線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1413
推到 Plurk!
推到 Facebook!

请教关于数据库备份与恢复功能的实现方法

答題得分者是:cashxin2002
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-27 18:08:17 IP:222.184.xxx.xxx 未訂閱
一简单通讯录软件,DELPHI ACCESS所编,很简单,就是EDIT输入框中填写的内容加到数据库中。所有想要的基本功能都实现了。就是想要一个备份恢复功能,不懂如何做。构思如下:点备份按钮跳出对话框,自动默认一个路径和名称,比如D:/TXL.DBF,但也可以让用户自己选择路径,(是点列表选,而不是手工输),点恢复按钮跳出对话框,也默认一个备份时一样的路径和名称,也可以自己选。实际上整个的要求就是拷贝了一下数据库文件。请问要加什么部件,代码如何写,希望高手讲得细一点,因为我才入门,你认为最简单的东西,也可能是我不懂的。呵呵。谢谢
------
我的编程起步于ktop,我将永远支持ktop
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-27 18:34:29 IP:202.62.xxx.xxx 未訂閱
您好﹗    您可以將整個MDB檔案复制出來﹐賦予其備份的名稱﹐當需要恢复時再將此檔案回存到原來的位置﹐置換掉原來的檔案即可﹐以下截自小弟某專案部分﹐供您參考﹕
備份部分﹕
procedure TForm30.BitBtn1Click(Sender: TObject);
Var
  SaveString : String;
begin
  Try
    DataModule1.ADOConnection1.Connected := False;
    if InputQuery('Database Backup Box', 'Input Backup-FileName', SaveString) then
      begin
        CopyFile(PChar('.\Data\GreatLaosWovenAccounting.mdb'), PChar('.\DataBackup\'+SaveString+'.mdb'), False);
        ShowMessage('Backup the database was been successful!');
      end;
  Finally
    DataModule1.ADOConnection1.Connected := True;    
  end;
end;    回存部分﹕
procedure TForm30.BitBtn2Click(Sender: TObject);
Var
  SaveString : String;
begin
  Try
    Datamodule1.ADOConnection1.Connected := False;
    if InputQuery('Database Backup Box', 'Input Backup-FileName', SaveString) then
      begin
        CopyFile(PChar('.\Data\Backup.mdb'), PChar('.\Data\GreatLaosWovenAccounting.mdb'), False);
        ShowMessage('Restore the old datebase was been successful!');
      end;
  Finally
    DataModule1.ADOConnection1.Connected := True;
  end;
end;
================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
BIG-ROM
初階會員


發表:94
回覆:91
積分:37
註冊:2005-04-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-27 18:54:05 IP:59.36.xxx.xxx 未訂閱
unit UnitDbBuckup;    interface    uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,    Dialogs, ComCtrls, Gauges, ExtCtrls, StdCtrls;    type   TFrameDbBuckup = class(TFrame)     GroupBox1: TGroupBox;     SaveDialog1: TSaveDialog;     Gauge1: TGauge;     OpenDialog1: TOpenDialog;     procedure Image2Click(Sender: TObject);     procedure Image3Click(Sender: TObject);   private     { Private declarations }   public     { Public declarations }   end;    implementation    uses UnitLogin;    {$R *.dfm}    procedure TFrameDbBuckup.Image2Click(Sender: TObject); var   i: integer; begin   try     if not savedialog1.Execute then exit;     if FileExists(savedialog1.FileName+'.mdb') then     begin       if Messagebox(handle,'存在數據庫重名,是否覆蓋?','存盤選項',mb_iconquestion+mb_yesno)=IDNo then Exit;     end     else     begin       for i:=Gauge1.MinValue to Gauge1.MaxValue do         Gauge1.Progress := i;       CopyFile(PChar(DataFile),PChar(SaveDialog1.FileName+'.mdb'),True);       Messagebox(handle,'數據庫備份成功!','備份數據',mb_iconinformation+mb_ok);     end;   except     Messagebox(handle,'警告:數據庫備份失敗!','存盤錯誤',mb_iconwarning+mb_ok);   end; end;    procedure TFrameDbBuckup.Image3Click(Sender: TObject); var   i: integer; begin   try     if not opendialog1.Execute then exit;     if Messagebox(handle,'警告:現有數據有可能丟失,確定還原?','確定還原',mb_iconquestion+mb_yesno)=IDNo then Exit;     for i:=Gauge1.MinValue to Gauge1.MaxValue do       Gauge1.Progress := i; //    CopyFile(PChar(OpenDialog1.FileName+'.mdb'),PChar(Form1.DataFile),True);       Messagebox(handle,'數據庫還原成功!','還原數據',mb_iconinformation+mb_ok);   except     Messagebox(handle,'警告:數據庫還原失敗!','讀取錯誤',mb_iconwarning+mb_ok);   end; end;    end.    -------------------------- 需要放置OpenDialog1 以及 SaveDialog1控件    
引言: 一简单通讯录软件,DELPHI ACCESS所编,很简单,就是EDIT输入框中填写的内容加到数据库中。所有想要的基本功能都实现了。就是想要一个备份恢复功能,不懂如何做。构思如下:点备份按钮跳出对话框,自动默认一个路径和名称,比如D:/TXL.DBF,但也可以让用户自己选择路径,(是点列表选,而不是手工输),点恢复按钮跳出对话框,也默认一个备份时一样的路径和名称,也可以自己选。实际上整个的要求就是拷贝了一下数据库文件。请问要加什么部件,代码如何写,希望高手讲得细一点,因为我才入门,你认为最简单的东西,也可能是我不懂的。呵呵。谢谢
寫程序——新問題會接踵而來!
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-27 21:35:14 IP:222.184.xxx.xxx 未訂閱
第一个回答方法我试了一下,他的代码很简捷,也很实用,能顺利编绎,但是和我的要求有一点差别,他没有一个可选择路径的对话框出来,只能直接填写。第二个方法我无法试成功,GUAGES不懂是什么,好象问题出在那上面,他说的放OpenDialog1 以及 SaveDialog1控件,我估计到是我所说的能在对话框中选路径的,可惜没能成功运行起来。再请哪位高手指教。
------
我的编程起步于ktop,我将永远支持ktop
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-27 22:02:50 IP:222.184.xxx.xxx 未訂閱
我再把我的构思讲细一点: 点备份按钮:跳出一个窗口:请输入备份路径,下面是一个EDIT文本框,默认写上,比如D:/123.MDB,右侧是一个浏览按钮,下方是确定和取消,一般情况下,可以直接点确定就备份好了。当然可点浏览按钮跳出自己电脑上的文体列表,自己选位置保存。反之,恢复时,默认填好D:/123.MDB,或者自己点浏览按钮选,按确定恢复成功。 好象关键也就是在按确定时的那段代码,当然希望高手讲得细一点更好。
------
我的编程起步于ktop,我将永远支持ktop
BIG-ROM
初階會員


發表:94
回覆:91
積分:37
註冊:2005-04-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-27 22:49:40 IP:59.36.xxx.xxx 未訂閱
Gauge1--------------------进度条,显示进行的百分比. OpenDialog1---------------方便调用系统的打开路径窗体 SaveDialog1..............方便调用保存路径窗体    -------------------------------------------------------- 由于我目前无法上传程式,否则定可以[绝对]可以给你个满意的答复.    你的问题我明白,我的答案你疑惑.        
引言: 第一个回答方法我试了一下,他的代码很简捷,也很实用,能顺利编绎,但是和我的要求有一点差别,他没有一个可选择路径的对话框出来,只能直接填写。第二个方法我无法试成功,GUAGES不懂是什么,好象问题出在那上面,他说的放OpenDialog1 以及 SaveDialog1控件,我估计到是我所说的能在对话框中选路径的,可惜没能成功运行起来。再请哪位高手指教。
寫程序——新問題會接踵而來!
BIG-ROM
初階會員


發表:94
回覆:91
積分:37
註冊:2005-04-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-27 23:03:03 IP:59.36.xxx.xxx 未訂閱
是否就是你希望实现的功能呢??
引言: 一简单通讯录软件,DELPHI+ACCESS所编,很简单,就是EDIT输入框中填写的内容加到数据库中。所有想要的基本功能都实现了。就是想要一个备份恢复功能,不懂如何做。构思如下:点备份按钮跳出对话框,自动默认一个路径和名称,比如D:/TXL.DBF,但也可以让用户自己选择路径,(是点列表选,而不是手工输),点恢复按钮跳出对话框,也默认一个备份时一样的路径和名称,也可以自己选。实际上整个的要求就是拷贝了一下数据库文件。请问要加什么部件,代码如何写,希望高手讲得细一点,因为我才入门,你认为最简单的东西,也可能是我不懂的。呵呵。谢谢
寫程序——新問題會接踵而來! 發表人 - BIG-ROM 於 2005/04/27 23:04:45
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-04-28 06:58:15 IP:222.184.xxx.xxx 未訂閱
对的,要的就是图上的那个功能,
------
我的编程起步于ktop,我将永远支持ktop
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-04-28 07:30:33 IP:222.184.xxx.xxx 未訂閱
能否代码写得很简单,按图中所示,按下确定按钮后我想程序要完成这样一些过程:在备份时,就是拷贝目标数据库文件至输入框中显示的路径,关键有一点,我不知道如何取得目标数据库文件,因为客户不是默认安装软件的话,就不知道软件上的数据库在哪了,还有就是图片上的输入框中已填好的的路径怎么取得?COPY怎么写,
------
我的编程起步于ktop,我将永远支持ktop
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-04-28 09:54:16 IP:218.15.xxx.xxx 未訂閱
引言: 能否代码写得很简单,按图中所示,按下确定按钮后我想程序要完成这样一些过程:在备份时,就是拷贝目标数据库文件至输入框中显示的路径,关键有一点,我不知道如何取得目标数据库文件,因为客户不是默认安装软件的话,就不知道软件上的数据库在哪了想请问您的数据库是和您的软件(*.exe)放在一起的吗?是的话,不管是不是按默认安装软件都可以用下列方法找到,
var  ApplicationPath:string;      ApplicationPath:=ExtractFilePath(Application.ExeName);
  if copy(ApplicationPath,length(ApplicationPath),1)<>'\' then
  ApplicationPath:=ApplicationPath '\'; //ApplicationPath为当前可执行文件所在的目录
此步获取您的目标数据库文件
,还有就是图片上的输入框中已填好的的路径怎么取得? 您可以用SaveDialog(选择的是文件),selectDirectory(选择的是目录),我觉得用selectDirectory比较好,用法如下:
uses QDialogs;
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
  str:string;
begin
 if selectDirectory('选择保存的路径','',str) then
   if copy(str,length(str),1)<>'\' then
      Edit1.Text:=str '\'
   else
     Edit1.Text:=str;
end;
Edit1.text为您想将要备份数据库文件放置的目录。
COPY怎么写, 如以上两位前辈所言,用CopyFile吧。
总结:
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons,QDialogs, DB, ADODB;    type
  TForm1 = class(TForm)
    Edit1: TEdit;
    SpeedButton1: TSpeedButton;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    ADOConnection1: TADOConnection;
    procedure SpeedButton1Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form1: TForm1;
  ApplicationPath:string;
implementation    {$R *.dfm}
//点Edit旁边的SpeedButton供选择备份所存放的路径
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
  str:string;
begin
 if selectDirectory('选择保存的路径','',str) then
   if copy(str,length(str),1)<>'\' then
      Edit1.Text:=str '\'
   else
     Edit1.Text:=str;
end;    //備份部分﹕
procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  SaveString : String;
begin
  Try
    SaveString:=Edit1.Text;
    ADOConnection1.Connected := False;
    CopyFile(PChar(ApplicationPath 'Data.mdb'), PChar(SaveString 'Data.mdb'), False);
  Finally
    ADOConnection1.Connected := True;
  end;
end;    //回存部分﹕
procedure TForm1.BitBtn2Click(Sender: TObject);
Var
  SaveString : String;
begin
  Try
    SaveString:=Edit1.Text;
    ADOConnection1.Connected := False;
    CopyFile(PChar(ApplicationPath 'Data.mdb'), PChar(SaveString 'Data.mdb'), False);
  Finally
    ADOConnection1.Connected := True;
  end;
end;    //获取源目标数据库文件目录
procedure TForm1.FormCreate(Sender: TObject);
begin
  ApplicationPath:=ExtractFilePath(Application.ExeName);
  if copy(ApplicationPath,length(ApplicationPath),1)<>'\' then
  ApplicationPath:=ApplicationPath '\';    end;    end.    
您可以根据自己需要,略作修改,参考看看 <> =============================== 为什么经过多年以后,得失的过程如此冷漠 =============================== 發表人 -
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-04-28 21:37:13 IP:222.184.xxx.xxx 未訂閱
由于刚刚起步学习,几位前辈的指教我还未能悟出。我自己又试了一个方法,我在窗口中放了两个控件,(WIN31标签下的,DriveComboBox DirectoryListBox,这样就是好直接选择驱动器和文件夹了,)我所要知道的就是,在“确定保存”安钮上的事件代码如何写?我的数据库文件和EXE文件是在一个文件夹下的,如何找到用户的数据库安装位置,如何拷到本窗口中用户所选的目录下去。这是对备份而言的,反正我一步一步学吧。楼上的代码我没能够运行成功。
------
我的编程起步于ktop,我将永远支持ktop
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-04-28 22:22:13 IP:219.129.xxx.xxx 未訂閱
ntjrr 您好:小弟写了个小测试,您下载来参考参考,写得比较简单,如还是不是很清楚的话,您可以将您所写的放放会员求助区,我下载帮您调试看看。 链接: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=70009 望您早点完成!     ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================
BIG-ROM
初階會員


發表:94
回覆:91
積分:37
註冊:2005-04-16

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-04-29 07:19:32 IP:216.195.xxx.xxx 未訂閱
您好,關於你需要的文件已經上傳到http://delphi.ktop.com.tw/topic.php?TOPIC_ID=70023 請下載參考。    問題獲得結束的話就應該結束本主題,謝謝!        
引言: 由于刚刚起步学习,几位前辈的指教我还未能悟出。我自己又试了一个方法,我在窗口中放了两个控件,(WIN31标签下的,DriveComboBox DirectoryListBox,这样就是好直接选择驱动器和文件夹了,)我所要知道的就是,在“确定保存”安钮上的事件代码如何写?我的数据库文件和EXE文件是在一个文件夹下的,如何找到用户的数据库安装位置,如何拷到本窗口中用户所选的目录下去。这是对备份而言的,反正我一步一步学吧。楼上的代码我没能够运行成功。
寫程序——新問題會接踵而來! 發表人 - BIG-ROM 於 2005/04/29 07:22:14
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-04-29 17:57:25 IP:222.184.xxx.xxx 未訂閱
deity前辈的源码我已下载成功,并且也运行成功了,这就是说明备份一块已经完成,但数据恢复一块有所不同,能否请deity再辛苦指点一下,恢复这一块我想要打开的是文件而不是目录了,对吧?其它高手也可指点一下,可以下载他给我的源码看一下,那个源码我已经成功了。再加一下恢复部份,要求是选文件。谢谢!
------
我的编程起步于ktop,我将永远支持ktop
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-04-29 18:09:21 IP:222.184.xxx.xxx 未訂閱
感谢BIG-ROM前辈的指教,也使我受益颇深,您所上传的软件,网页都是乱码,而且下载不了,不知道什么原因。反正我这边也成功了一半了。不过我还是要感谢BIG-ROM的前辈,谢谢您对我的关心指点!
------
我的编程起步于ktop,我将永远支持ktop
BIG-ROM
初階會員


發表:94
回覆:91
積分:37
註冊:2005-04-16

發送簡訊給我
#16 引用回覆 回覆 發表時間:2005-04-29 21:07:31 IP:219.130.xxx.xxx 未訂閱
引言: 感谢BIG-ROM前辈的指教,也使我受益颇深,您所上传的软件,网页都是乱码,而且下载不了,不知道什么原因。反正我这边也成功了一半了。不过我还是要感谢BIG-ROM的前辈,谢谢您对我的关心指点!
寫程序——新問題會接踵而來!
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#17 引用回覆 回覆 發表時間:2005-04-29 21:31:17 IP:222.184.xxx.xxx 未訂閱
乱码重选择后是好了,但两个地址都无法下载的。
------
我的编程起步于ktop,我将永远支持ktop
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#18 引用回覆 回覆 發表時間:2005-04-29 22:27:23 IP:219.129.xxx.xxx 未訂閱
BIG-ROM您好: 我想这是上传代码时,采用了中文名的缘故,或中文路径。请改为非中文开形式,再上传。 ntjrr您好:你有下载过小弟的试试吗?     ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================
BIG-ROM
初階會員


發表:94
回覆:91
積分:37
註冊:2005-04-16

發送簡訊給我
#19 引用回覆 回覆 發表時間:2005-04-29 23:39:41 IP:219.130.xxx.xxx 未訂閱
不可能是中文名称,文件名称为:bakmdb.rar    
引言: BIG-ROM您好: 我想这是上传代码时,采用了中文名的缘故,或中文路径。请改为非中文开形式,再上传。 ntjrr您好:你有下载过小弟的试试吗? ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================
寫程序——新問題會接踵而來!
BIG-ROM
初階會員


發表:94
回覆:91
積分:37
註冊:2005-04-16

發送簡訊給我
#20 引用回覆 回覆 發表時間:2005-04-29 23:56:24 IP:219.130.xxx.xxx 未訂閱
再一次重新上传了,位加快下载,你可以通过下面的连接进行直速下载. http://delphi.ktop.com.tw/loadfile.php?TOPICID=21917212&CC=490168    寫程序——新問題會接踵而來!
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#21 引用回覆 回覆 發表時間:2005-04-30 08:35:39 IP:218.15.xxx.xxx 未訂閱
引言: deity前辈的源码我已下载成功,并且也运行成功了,这就是说明备份一块已经完成,但数据恢复一块有所不同,能否请deity再辛苦指点一下,恢复这一块我想要打开的是文件而不是目录了,对吧?其它高手也可指点一下,可以下载他给我的源码看一下,那个源码我已经成功了。再加一下恢复部份,要求是选文件。谢谢!
ntjrr 您好: 不好意思,没看到有回复< >误会您了,报歉~~ 关于恢复那块,其实类似,所以就偷下懒< > 新增了进去,链接如下,试试看 > ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================
系統時間:2024-06-22 18:52:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!