BCB ADO 备份 恢复 任何类型 数据库 文件

原创 2007年10月15日 22:23:00
TMainForm *MainForm;
bool ForceExist;
const bufsize = 409600; //复制文件基本单位为400K
String DBfilename;

//可以备份/恢复任何类型的数据库文件------------------------------------------
bool __fastcall TMainForm::CopyFile(AnsiString FromFile,AnsiString ToFile)
{
   bool result(false);
   FILE *FromF,*ToF;
   int NumRead,NumWritten;
   /* BUFSIZ is defined in stdio.h */
   char buf[bufsize];

   Screen- >Cursor = crHourGlass;
   ToF = fopen(ToFile.c_str(),"wb");
   FromF = fopen(FromFile.c_str(),"rb");
   try
   {
      struct stat statbuf;
      /* get information about the file */
      fstat(fileno(FromF), &statbuf);
      int ModVal = statbuf.st_size % bufsize;
      int MaxVal = statbuf.st_size / bufsize;
      if (ModVal) MaxVal++;
      int Blockcount = 0;
    //  float fSize = statbuf.st_size;
    //  TVarRec args[2] = {0,fSize};
      ForceExist = false;
      do
      {
         if (Blockcount <MaxVal-1)
         {
            NumRead = fread(&buf, sizeof(buf), 1, FromF);   // read the data
            NumWritten = fwrite(&buf, sizeof(buf), 1, ToF); // Write the data
           // fSize = bufsize * (Blockcount + 1);
         }
         else if (ModVal) {//当剩余的数据不足400K时,需作特殊处理...
            char *Smallbuf;
            Smallbuf = (char *)SysGetMem(ModVal);
            NumRead = fread(Smallbuf, ModVal, 1, FromF);   // read the data
            NumWritten = fwrite(Smallbuf, ModVal, 1, ToF); // Write the data
           // fSize += ModVal;
            SysFreeMem(Smallbuf);
            NumRead = 0;
         }
         Blockcount++;
         Application- >ProcessMessages();    //可以通过设置ForceExist停止复制
      }
      while (!ForceExist && (NumRead!=0  ¦ ¦ NumRead==NumWritten));
      //Blockcount++;
      fclose(ToF);
      fclose(FromF);
      result = !ForceExist;
   }
   catch(...)
   {
      fclose(ToF);
      fclose(FromF);
     // MessageDlg("在复制文件时出现错误,未能完成操作。", mtWarning, TMsgDlgButtons()  < < mbOK);
     MessageBox(Handle,"在复制文件时出现错误,未能完成操作。" ,  "警告" , MB_OK);
     }
   Screen- >Cursor = crDefault;
   return result;
}

//备份数据---------------------------------------------------------------------------

void __fastcall TMainForm::DataBakMenuClick(TObject *Sender)
{
 if (SaveDialog1- >Execute())
  {
      ADOConnection1- >Connected = false; //关闭数据库
      AnsiString fFile =  ExtractFilePath(ParamStr(0))+ExtractFileName(DBfilename);
      AnsiString tFile = SaveDialog1- >FileName;
      if (CopyFile(fFile,tFile))
      {
         ADOConnection1- >Connected == true;
         MainStatusBar- >Panels- >Items[0]- >Text="备份数据成功";
             //复制成功....
      }
      else {
         ForceExist = false;
         DeleteFile(tFile);
      }
   }
}
//恢复数据---------------------------------------------------------------------------

void __fastcall TMainForm::DataRestoreMenuClick(TObject *Sender)
{
  
   if (OpenDialog1- >Execute())
   {  ADOConnection1- >Connected = false;//关闭数据库
      AnsiString fFile = OpenDialog1- >FileName;
      AnsiString tFile =  ExtractFilePath(ParamStr(0))+ExtractFileName(DBfilename);
      if (CopyFile(fFile,tFile))
      {
         ADOConnection1- >Connected == true;
         MainStatusBar- >Panels- >Items[0]- >Text="恢复数据成功";

      }
      else {
         ForceExist = false;
         DeleteFile(tFile);
      }
   }

在BCB下如何用ADO操作带密码的ACCESS文件?

   首先建立一个ACCESS数据库,如psw.mdb,为其设置好密码为12345,在其中建立表usedb。   1.建立新表单Form1,在其中放入一个TADOTable控件、一个TDataSour...
  • huguangtao
  • huguangtao
  • 2002-03-11 09:18:00
  • 959

数据库的备份和还原

数据库的备份和还原是一个很重要的问题,有时候我们一个误删可能数据库里的数据就都没有了,所以一定要做好备份的工作。 备份 1.右击——任务——备份 2.选择要备...
  • caoyujiao520
  • caoyujiao520
  • 2016-03-18 21:57:10
  • 1362

BCB+ADO操作ACCESS数据库

  • 2009年09月11日 09:44
  • 391KB
  • 下载

SQL Server 数据库 备份 还原恢复 ADO

  • 2011年03月27日 09:52
  • 321KB
  • 下载

BCB 连接数据库和查询数据

1.托两个控件: TADOConnection 和 ADOQuery 2.将连个 控件关联。 连接数据库代码:...
  • midle110
  • midle110
  • 2014-08-05 16:00:39
  • 2129

pgAdmin备份和还原数据库

上一篇博客说到安装PostgreSql数据库,安装完之后需要pgAdmin来连接数据库。其实pgAdmin是不需要单独安装的,在数据库的安装路径下的bin文件夹中有一个pgAdmin3.exe文件,双...
  • u013038861
  • u013038861
  • 2016-12-11 21:35:12
  • 6382

c++builder 使用sqlite数据库

1、 Delphi連接SQLite3 2、BCB + SQLite之初体验 3、C++ Builder 2007中应用数据库SQLite
  • lcfeng1982
  • lcfeng1982
  • 2013-10-29 16:10:00
  • 1354

技术实现(2)之数据库备份恢复的设计与实现

APDPlat提供了web接口的数据库备份与恢复,支持手工操作和定时调度,可下载备份文件到本地,也可把备份文件发送到异地容错,极大地简化了数据库的维护工作。   设计目标: 1、多数据库支持 ...
  • zmx729618
  • zmx729618
  • 2016-11-29 11:13:12
  • 1065

ADO.NET 备份还原数据库

献给需要的人和我自己
  • bdbql
  • bdbql
  • 2015-06-16 16:29:25
  • 534

BCB OpenDialog 设置了Filter属性后但是却没有过滤效果

问题:BCB OpenDialog 设置了Filter属性后但是却没有过滤效果 原因:设置了OpenDialog 的FileName为“*.*” 解决方案:把FileName清空就可以了。...
  • u011569364
  • u011569364
  • 2013-12-27 14:03:55
  • 1035
收藏助手
不良信息举报
您举报文章:BCB ADO 备份 恢复 任何类型 数据库 文件
举报原因:
原因补充:

(最多只允许输入30个字)