数据库备份恢复问题 |
答題得分者是:cashxin2002
|
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
以前别人给了我一套数据备份和恢复的代码,我单独运行成功的,但现在套用到自己的程序上来没有成功,我仔细分析了一下,好象有最主要的一点区别,就是人家给我的那个代码中的演示的数据库,他根本不和程序相连,而我自己的程序在启动一开始就要读数据库了,就是说在拷贝时当时数据库是在用的,我用备份时是成功的,因为是读了拷到另一个地方,用数据恢复时不能成功,(我自己估计是数据在读,所以不好覆盖)如果改成其它名字,则就能成功的恢复到当前应用程序的目录下,如果改成和原来名字一样的,那么也没什么提示错误,只是打开后还是原来的数据内容。请问我的分析是否对,如果对的话用什么方法暂时让数据库不在用,而让备份好的数据成功覆盖本数据库。
------
我的编程起步于ktop,我将永远支持ktop |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 不知您是使用何種資料庫﹐小弟手上有個專案(ADO存取Access資料庫形態)﹐其中就有資料庫備份及恢复的部分﹐現將程式碼貼上﹐供您參考﹕
壓縮及備份部分﹕ Function TDataBRForm.CompactRepairData(soldMDB, snewMDB: String): Boolean; Const SProvider = 'Provider=Microsoft.Jet.OLEDB.4.0;'; Var OJetEng: JetEngine; begin soldMDB := SProvider + 'Data Source=' + soldMDB + ';Jet OLEDB:Engine Type=5' + ';Jet OLEDB:Database Password=cashxinsheng'; snewMDB := SProvider + 'Data Source=' + snewMDB + ';Jet OLEDB:Engine Type=5' + ';Jet OLEDB:Database Password=cashxinsheng'; Try OJetEng := CoJetEngine.Create; OJetEng.CompactDatabase(soldMDB, snewMDB); OJetEng := Nil; Result := True; Except OJetEng := Nil; Result := False; end; end; procedure TDataBRForm.suiButton1Click(Sender: TObject); Var MDB1, MDB2, BACKUPMDB, Str: String; I: Integer; begin Label1.Caption := 'Compacting and Backuping Now ...'; Label2.Caption := 'Please wait the moment!'; suiPanel1.Pop; suiButton1.Enabled := False; suiButton2.Enabled := False; MDB1 := ExtractFilePath(Application.ExeName)+'Data\Salary.mdb'; MDB2 := ExtractFilePath(Application.ExeName)+'Data\Temp.mdb'; BACKUPMDB := ExtractFilePath(Application.ExeName) + 'Backup\'; if FileExists(MDB1) then begin if Not CompactRepairData(MDB1, MDB2) then begin suiMessageDialog1.IconType := suiStop; suiMessageDialog1.Text := 'Compact and Backup Data was fail!'; suiMessageDialog1.ShowModal; end else begin DeleteFile(MDB1); MoveFile(PChar(MDB2), PChar(MDB1)); if suiInputDialog1.ShowModal = mrOK then begin DataBRForm.Update; Str := suiInputDialog1.ValueText; BACKUPMDB := BACKUPMDB + Str + '.mdb'; CopyFile(PChar(MDB1), PChar(BACKUPMDB), False); suiMessageDialog1.IconType := suiInformation; suiMessageDialog1.Text := 'Compact and Backup Data was Complete!'; suiMessageDialog1.ShowModal; end; end; end else begin suiMessageDialog1.IconType := suiStop; suiMessageDialog1.Text := 'Data File is not exist!'; suiMessageDialog1.ShowModal; end; suiButton1.Enabled := True; suiButton2.Enabled := True; suiPanel1.Push; Label1.Caption := ''; Label2.Caption := ''; suiInputDialog1.ValueText := ''; end; 恢复部分﹕ procedure TDataBRForm.suiButton3Click(Sender: TObject); Var oldMDB, newMDB, Str: String; I: Integer; begin Label3.Caption := 'Restore Old Data Now ...'; Label4.Caption := 'Please wait the moment!'; suiPanel2.Pop; suiButton3.Enabled := False; oldMDB := ExtractFilePath(Application.ExeName) + 'Data\Salary.mdb'; newMDB := ExtractFilePath(Application.ExeName) + 'Backup\'; if suiInputDialog1.ShowModal = mrOK then begin DataBRForm.Update; Str := suiInputDialog1.ValueText; newMDB := newMDB + Str + '.mdb'; if Not FileExists(newMDB) then begin suiMessageDialog1.IconType := suiStop; suiMessageDialog1.Text := Str + '.mdb is not exists!'; suiMessageDialog1.ShowModal; end else begin CopyFile(PChar(newMDB), PChar(oldMDB), False); suiMessageDialog1.IconType := suiInformation; suiMessageDialog1.Text := 'Restore Data Complete!'; suiMessageDialog1.ShowModal; end; end; suiButton3.Enabled := True; suiPanel2.Push; Label3.Caption := ''; Label4.Caption := ''; suiInputDialog1.ValueText := ''; end;程式中以sui開頭的元件為小弟新增的第三方元件﹐您可替換成普通的元件來做 ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟 |
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |