Access数据库被份的代码如下:
procedure TForm14.BitBtn1Click(Sender: TObject);
var
   F:TShFileOpStruct;
   //DataBackupFileName:string;
begin
   F.wnd:=Handle;
   F.wFunc:=Fo_COPY; //操作方式:拷贝数据
   F.pFrom:=pAnsichar(ExtractFileDir(Application.ExeName)+'\Data\WEmis.mdb'+#0);
   OpenDialog1.Filter:='Access文件(*.mdb)|*.mdb';
   OpenDialog1.Title:='选择备份路径和文件名';
   OpenDialog1.InitialDir := ExtractFileDir(Application.ExeName)+'\Backup';
   if OpenDialog1.Execute then
   F.pTo:=pAnsichar(OpenDialog1.FileName+'[Access备份'+//构造备份文件名
          FormatDateTime('yyyy-mm-dd',Now)+']'+'.mdb');//进行文件备份
   F.fFlags:=FOF_ALLOWUNDO or FOF_RENAMEONCOLLISION;//操作选项
   if ShFileOperation(F)=0 then
      MessageDlg(#13+#10+' Access数据文件备份成功!',mtInformation,[mbYes],0)
   else
      MessageDlg(#13+#10+' Access数据文件备份失败!' ,mtWarning,[mbYes],0);
end;
可以备份,但打开选择备份文件的windows窗口后,如果不想备份了,点击取消就会弹出windows错误提示:
提示内容:Access violation at address 7C84C0D1 in module 'kernel32.dll.Read of address E1300084.

解决方案 »

  1.   

    procedure TForm14.BitBtn1Click(Sender: TObject);
    var
      F:TShFileOpStruct;
      //DataBackupFileName:string;
    begin
      F.wnd:=Handle;
      F.wFunc:=Fo_COPY; //操作方式:拷贝数据
      F.pFrom:=pAnsichar(ExtractFileDir(Application.ExeName)+'\Data\WEmis.mdb'+#0);
      OpenDialog1.Filter:='Access文件(*.mdb)|*.mdb';
      OpenDialog1.Title:='选择备份路径和文件名';
      OpenDialog1.InitialDir := ExtractFileDir(Application.ExeName)+'\Backup';
      if OpenDialog1.Execute then
      begin
      F.pTo:=pAnsichar(OpenDialog1.FileName+'[Access备份'+//构造备份文件名
              FormatDateTime('yyyy-mm-dd',Now)+']'+'.mdb');//进行文件备份
      F.fFlags:=FOF_ALLOWUNDO or FOF_RENAMEONCOLLISION;//操作选项
      if ShFileOperation(F)=0 then
          MessageDlg(#13+#10+' Access数据文件备份成功!',mtInformation,[mbYes],0)
      else
          MessageDlg(#13+#10+' Access数据文件备份失败!' ,mtWarning,[mbYes],0);
      end;
    end;