请教关于数据库备份与恢复功能的实现方法 |
答題得分者是:cashxin2002
|
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
一简单通讯录软件,DELPHI ACCESS所编,很简单,就是EDIT输入框中填写的内容加到数据库中。所有想要的基本功能都实现了。就是想要一个备份恢复功能,不懂如何做。构思如下:点备份按钮跳出对话框,自动默认一个路径和名称,比如D:/TXL.DBF,但也可以让用户自己选择路径,(是点列表选,而不是手工输),点恢复按钮跳出对话框,也默认一个备份时一样的路径和名称,也可以自己选。实际上整个的要求就是拷贝了一下数据库文件。请问要加什么部件,代码如何写,希望高手讲得细一点,因为我才入门,你认为最简单的东西,也可能是我不懂的。呵呵。谢谢
------
我的编程起步于ktop,我将永远支持ktop |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 您可以將整個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 發送簡訊給我 |
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 發送簡訊給我 |
|
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
|
BIG-ROM
初階會員 發表:94 回覆:91 積分:37 註冊:2005-04-16 發送簡訊給我 |
Gauge1--------------------进度条,显示进行的百分比.
OpenDialog1---------------方便调用系统的打开路径窗体
SaveDialog1..............方便调用保存路径窗体 --------------------------------------------------------
由于我目前无法上传程式,否则定可以[绝对]可以给你个满意的答复. 你的问题我明白,我的答案你疑惑.
引言: 第一个回答方法我试了一下,他的代码很简捷,也很实用,能顺利编绎,但是和我的要求有一点差别,他没有一个可选择路径的对话框出来,只能直接填写。第二个方法我无法试成功,GUAGES不懂是什么,好象问题出在那上面,他说的放OpenDialog1 以及 SaveDialog1控件,我估计到是我所说的能在对话框中选路径的,可惜没能成功运行起来。再请哪位高手指教。寫程序——新問題會接踵而來! |
BIG-ROM
初階會員 發表:94 回覆:91 積分:37 註冊:2005-04-16 發送簡訊給我 |
是否就是你希望实现的功能呢??
引言: 一简单通讯录软件,DELPHI+ACCESS所编,很简单,就是EDIT输入框中填写的内容加到数据库中。所有想要的基本功能都实现了。就是想要一个备份恢复功能,不懂如何做。构思如下:点备份按钮跳出对话框,自动默认一个路径和名称,比如D:/TXL.DBF,但也可以让用户自己选择路径,(是点列表选,而不是手工输),点恢复按钮跳出对话框,也默认一个备份时一样的路径和名称,也可以自己选。实际上整个的要求就是拷贝了一下数据库文件。请问要加什么部件,代码如何写,希望高手讲得细一点,因为我才入门,你认为最简单的东西,也可能是我不懂的。呵呵。谢谢寫程序——新問題會接踵而來! 發表人 - BIG-ROM 於 2005/04/27 23:04:45 |
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
|
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
引言: 能否代码写得很简单,按图中所示,按下确定按钮后我想程序要完成这样一些过程:在备份时,就是拷贝目标数据库文件至输入框中显示的路径,关键有一点,我不知道如何取得目标数据库文件,因为客户不是默认安装软件的话,就不知道软件上的数据库在哪了想请问您的数据库是和您的软件(*.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 發送簡訊給我 |
由于刚刚起步学习,几位前辈的指教我还未能悟出。我自己又试了一个方法,我在窗口中放了两个控件,(WIN31标签下的,DriveComboBox
DirectoryListBox,这样就是好直接选择驱动器和文件夹了,)我所要知道的就是,在“确定保存”安钮上的事件代码如何写?我的数据库文件和EXE文件是在一个文件夹下的,如何找到用户的数据库安装位置,如何拷到本窗口中用户所选的目录下去。这是对备份而言的,反正我一步一步学吧。楼上的代码我没能够运行成功。
------
我的编程起步于ktop,我将永远支持ktop |
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
|
BIG-ROM
初階會員 發表:94 回覆:91 積分:37 註冊:2005-04-16 發送簡訊給我 |
您好,關於你需要的文件已經上傳到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 發送簡訊給我 |
|
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
|
BIG-ROM
初階會員 發表:94 回覆:91 積分:37 註冊:2005-04-16 發送簡訊給我 |
|
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
|
BIG-ROM
初階會員 發表:94 回覆:91 積分:37 註冊:2005-04-16 發送簡訊給我 |
|
BIG-ROM
初階會員 發表:94 回覆:91 積分:37 註冊:2005-04-16 發送簡訊給我 |
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
引言: deity前辈的源码我已下载成功,并且也运行成功了,这就是说明备份一块已经完成,但数据恢复一块有所不同,能否请deity再辛苦指点一下,恢复这一块我想要打开的是文件而不是目录了,对吧?其它高手也可指点一下,可以下载他给我的源码看一下,那个源码我已经成功了。再加一下恢复部份,要求是选文件。谢谢!ntjrr 您好: 不好意思,没看到有回复< >误会您了,报歉~~ 关于恢复那块,其实类似,所以就偷下懒< > 新增了进去,链接如下,试试看 > ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================ > |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |