我想做个数据库的备份 ...
我的数据库路径是:F:\bysj\data\xqwy.mdb;我从别的软件里 copy 了代码 ,可就是不知道下面的空 该添什么 大家帮个忙
CopyFile(PChar(这里不知道该添什么),PChar(SaveDialog1.FileName+'.mdb'),True);
我的数据库路径是:F:\bysj\data\xqwy.mdb;我从别的软件里 copy 了代码 ,可就是不知道下面的空 该添什么 大家帮个忙
CopyFile(PChar(这里不知道该添什么),PChar(SaveDialog1.FileName+'.mdb'),True);
BOOL WINAPI CopyFile(LPCSTR oldFileName, LPCSTR newFileName, BOOL failIfExists);
oldFileName: 原始文件名;
newFileName: 目标文件名;
failIfExists: 目标文件已存在时的处理办法。TRUE则不覆盖并返回失败标记,FALSE则覆盖。
返回值:TRUE代表成功,FALSE代表失败。
copyfile(
lpcstr lpexistingfilename, // 源文件路径
lpcstr lpnewfilename, //新文件路径
bool bfailifexists //为true的话, 如果新文件已存在, 则返回false;如果為false的話,如果新文件已經存在,會將原來的覆蓋.
);
函數成功返回true,失敗返回false;举例:
CopyFile(pChar('sql.txt'),pChar(ExtractFilePath(Application.ExeName) + '2.txt'),true);
在uses单元中加入ComObj, ActiveX;
//引用ComObj,ActiveX
function CompactDatabase(AFileName,APassWord:string):boolean;
//压缩与修复数据库,覆盖源文件
const
SConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'
+'Jet OLEDB:Database Password=%s;';
var
SPath,SFile:Array [0..254] Of Char;
STempFileName:String;
JE:OleVariant;
begin
GetTempPath(40,SPath);//取得Windows的Temp路径
GetTempFileName(SPath,'~CP',0,SFile);//取得Temp文件名,Windows将自动建立0字节文件
STempFileName:=SFile;//PChar->String
DeleteFile(STempFileName);//删除Windows建立的0字节文件
try
JE:=CreateOleObject('JRO.JetEngine');//建立OLE对象,函数结束OLE对象超过作用域自动释放
OleCheck(JE.CompactDatabase(format(SConnectionString,[AFileName,APassWord]),
format(SConnectionString,[STempFileName,APassWord])));//压缩数据库
//复制并覆盖源数据库文件,如果复制失败则函数返回假,压缩成功但没有达到函数的功能
result:=CopyFile(PChar(STempFileName),PChar(AFileName),false);
DeleteFile(STempFileName);//删除临时文件
except
result:=false;//压缩失败
end;
end;
procedure TBackup.Button2Click(Sender: TObject);
begin
PostMessage(handle,wm_close,0,0);
end;
procedure TBackup.Button1Click(Sender: TObject);
var
path:string;
begin
if SaveDialog1.Execute then
if SaveDialog1.FileName <> '' then
begin
path := ExtractFilePath(application.ExeName);
try
copyfile(pchar(path+ 'db.mdb'), pchar(SaveDialog1.FileName+'.bak'), false);
messagebox(getactivewindow(),'成功备份数据!','提示!' ,MB_OK + MB_ICONINFORMATION);
except
messagebox(getactivewindow(),'备份数据失败,请重试!!','错误!' ,MB_OK + MB_ICONERROR);
end;
end;
end;
procedure TBackup.Button3Click(Sender: TObject);
var
path:string;
begin
if OpenDialog1.Execute then
if OpenDialog1.FileName <> '' then
begin
path := ExtractFilePath(application.ExeName);
try
DM.ADOConnection1.Connected := false;
Deletefile(path+'db.mdb');
copyfile(pchar(OpenDialog1.FileName),pchar(path + 'db.mdb'), false);
messagebox(getactivewindow(),'成功恢复数据,单击确定后请重新运行软件!','提示!' ,MB_OK + MB_ICONINFORMATION);
Application.Terminate;
except
messagebox(getactivewindow(),'恢复数据失败,请重试!!','错误!' ,MB_OK + MB_ICONERROR);
end;
end;
end;
procedure TBackup.Button4Click(Sender: TObject);
var
sFileName: String;
begin
sFileName:=ExtractFilePath(Application.ExeName)+'db.mdb';
//sBarText('正在压缩数据库,请稍候......');
Self.Enabled:=false;
Self.Cursor:=crSqlWait;
try
DM.AdoConnection1.Close;
if CompactDatabase(sFileName,'') then
begin
messagebox(getactivewindow(),'压缩数据库完毕!','成功!' ,MB_OK + MB_ICONINFORMATION);
Button1.Enabled := true;
end
else
messagebox(getactivewindow(),'压缩数据库失败!','错误!' ,MB_OK + MB_ICONERROR);
DM.AdoConnection1.Open;
finally
Self.Enabled:=true;
Self.Cursor:=crDefault;
end;
end;
begin
if FileExists(SaveDialog_toMdb.FileName) then
if Application.MessageBox(PChar('此文件夹已经包含一个名为“'+ExtractFileName(SaveDialog_toMdb.FileName)+'”的文件,是否覆盖?'),'提示',MB_OKCANCEL+MB_ICONQUESTION)=IDCANCEL then Exit;
if CopyFile(PChar(ExtractFilePath(Application.ExeName)+'Dhjbgl.mdb'),PChar(SaveDialog_toMdb.FileName),False) then
Application.MessageBox('数据备份成功','提示',64)
else
Application.MessageBox('数据备份失败','提示',64);
end;