Delphi FireDAC 连接Access MDB数据库以及进行创建、压缩、修复和修改密码的方法
Open the Microsoft Access database:
DriverID=MSAcc
Database=c:\mydata.mdb
Open the Microsoft Access database using the system database:
DriverID=MSAcc
Database=c:\mydata.mdb
SystemDB=c:\system.mdb
User_Name=usr
Password=pwd
Open the Microsoft Access password protected database. Note that the password length must be equal to or less than 14 characters:
DriverID=MSAcc
Database=c:\mydata.mdb
Password=pwd
Note: to drop/create, encrypt, compact, and repair the database use the TADMSAccessUtility component.
http://docwiki.embarcadero.com/RADStudio/XE8/en/Connect_to_Microsoft_Access_Database_(FireDAC)
FireDac压缩和修复MS ACCESS数据库
先添加FDMSAccessService组件并将驱动程序链接设置为FDPhysMSAccessDriverLink;
关闭数据库连接;
设置数据库名称和路径;
仅在使用数据库密码时才需要设置数据库密码;
执行修复和压缩以完成任务。
function TfrmMainForm.CompactAndRepair(const DB: string): Boolean;
begin
Result := True;
DM.DataMod.FDConnection.Connected := False;
DM.DataMod.FDMSAccessService.Database := DB;
DM.DataMod.FDMSAccessService.Password := 'PASSWORD';
try
DM.DataMod.FDMSAccessService.Repair;
except
on E : Exception do
begin
ShowMessage('Exception message = '+E.Message);
Result := False;
end;
end;
try
DM.DataMod.FDMSAccessService.Compact;
except
on E : Exception do
begin
ShowMessage('Exception message = '+E.Message);
Result := False;
end;
end;
DM.DataMod.FDConnection.Connected := True;
end;
ADODB:下面是借鉴网上诸多网友的代码经过整理和修改而来的示例代码,注意压缩数据库的代码同时可以用于修改密码。
unit DataProc;
interface
uses Windows, SysUtils, ADODB, Variants, ComObj;
const
ConStr = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'
+ 'Jet OLEDB:Database Password=%s';
function BuildConnectionString: String;
function CompactDatabase(DB: String; OldPass: String='';
NewPass: String=''): Boolean;
function CreateAccess(pAccess: String; Pass: String=''): Boolean;
function RepairDatabase(pDBFile: String; Pass: String=''): Boolean;
implementation
function GetTmpFile: String;
var
LPath: String;
LFile: array[0..MAX_PATH] of Char;
begin
LPath := ExtractFilePath(ParamStr(0));
if (GetTempFileName(PChar(LPath), '~data', 0, LFile) <> 0) then
begin
DeleteFile(LFile);
Result := LFile;
end;
end;
function BuildConnectionString: String;
begin
Result := PromptDataSource(0, '');
end;
function CompactDatabase(DB, OldPass, NewPass: String): Boolean;
var
dao: OleVariant;
TmpDB: String;
begin
TmpDB := GetTmpFile;
try
dao := CreateOleObject('JRO.JetEngine');
dao.CompactDatabase(Format(ConStr, [DB, OldPass]),
Format(ConStr, [DB, NewPass]));
Result := CopyFile(PChar(TmpDB), PChar(DB), False);
DeleteFile(TmpDB);
except
Result := False;
end;
end;
function CreateAccess(pAccess: String; Pass: String=''): Boolean;
var
cat: OleVariant;
begin
try
cat := CreateOleObject('ADOX.Catalog');
cat.Create(Format(ConStr, [pAccess, Pass]));
Result := True;
except
Result := False;
end;
end;
function RepairDatabase(pDBFile: String; Pass: String=''): Boolean;
var
dao: OleVariant;
begin
try
dao := CreateOleObject('JRO.JetEngine');
dao.RepairDatabase(Format(ConStr, [pDBFile, Pass]));
Result := True;
except
Result := False;
end;
end;
end.