自動遞增編號的 Paradox Table 備份 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
這個程序是備份 Paradox Table 所用,所有 Memo, index, 預設值, Referencial Integrity 等等全部會一起備份。 備份的檔名會自動遞增編號,例如 MyTable.* 第一次備份會備份為 MyTable001.*,第二次會備份為 MyTable002.*, 如此類推。 程序需要 2 個變數 第一個是 TTable ,就是你要備份的 Table,程序會自動找檔案所在及需要一起備份的相關檔案。 第二個(可選)是目的地,若不傳入,則預設是來源 Table 的同一檔案夾。 回傳值是成功與否,任一檔案不能備份均會回傳失敗。 提醒一點,由於程序會試行設定 Exclusive = True,若有人在使用(包括 Delphi IDE)會引起 Exception,程序中特意沒處理這個 Exception 讓你可處理這個來通知使用者有人在用Table備份不安全。所以若你用 Delphi 來 Run 不要預設該 Table Active 為 True。 若是你不想設 Exclusive = True 可自行刪掉, 若抄檔中途剛好有人更新的話備份檔便會 Index out of date。 最後,若你把這個程序放在別的 Unit 記得該 Unit 要 Use DBTables。 使用實例
procedure TForm1.Button1Click(Sender: TObject); begin if ParadoxBackupTable(Table1) then // 不提供目的地,即用原始檔案夾 ShowMessage('備份成功') else ShowMessage('備份失敗'); end;* 若你在Delphi Run 而 Table1.Active 設成 True,會出現訊息說 Table busy 及 username : 你的 username。 程序 : function ParadoxBackupTable(DS : TTable; DestPath : String='') : Boolean; var FHand : THandle; FDir, FName : String; FNum : Integer; FD: TWin32FindData; begin result := false; DS.DisableControls; DS.Active := false; DS.Exclusive := true; DS.Active := true; FDir := DS.Database.Directory; if DestPath = '' then DestPath := FDir; FName := copy(DS.TableName,1,Length(DS.TableName)-3); FNum := 1; If not FileExists(FDir FName '.db') then exit; While FileExists(Format('%s%3.3d%s',[FDir FName,FNum,'.db'])) do // 找最小的可用序號 FNum := FNum 1; FHand := windows.FindFirstFile(PChar(FDir FName '.*'),FD); if FHand = INVALID_HANDLE_VALUE then exit; result := true; repeat if not LongBool(FD.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) then //不處理資料夾 begin result := result and CopyFile(PChar(FDir FD.cFileName),PChar(Format('%s%3.3d%s', [DestPath FName,FNum,ExtractFileExt(FD.cFileName)])),True); end; until not windows.FindNextFile( FHand, FD ); Windows.FindClose( FHand ); DS.Active := false; DS.EnableControls; end; |
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |