亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? adobackup.pas

?? 數(shù)據(jù)備份與恢復(fù)源碼,給需要的一個(gè)參考,可以直接運(yùn)行
?? PAS
?? 第 1 頁 / 共 3 頁
字號(hào):
// ************************  ADOBackUP ******************************
//
// 引用外部控件:   BackUp ------ 可實(shí)現(xiàn)多個(gè)文件壓縮成單一文文件
//                  DialogEx ---- 可預(yù)覽的 Dialog
// 更新功能:
//     2001.3.15
//       包文件的名稱定為Save.dat,后面依次為:Save1.dat,Save2.dat ....
//       增加刪除數(shù)據(jù)選項(xiàng),可自動(dòng)刪除舊數(shù)據(jù),也可傳遞通過傳遞SQl刪除。
//       增加數(shù)據(jù)包信息,使用戶可以隨數(shù)據(jù)包傳送文本信息,以便終端識(shí)別。
//
//     2001.2.21
//       備份 Backup  : 根據(jù)讀取的外部Sql語句,備份數(shù)據(jù),生成備份文件。
//                       可根據(jù)需要,分割備份文件,可直接用A盤存儲(chǔ)。
//       恢復(fù) Restore : 選擇備份文件,可自動(dòng)合并在同一目錄的文件。
//                       根據(jù)條件恢復(fù)相關(guān)數(shù)據(jù)。
//       備份、恢復(fù)過程有進(jìn)度提示。
//
//     2001.4.4
//       備份文件格式改變:不再存儲(chǔ) Info.Txt,而是存放于備份文件頭
//
// 注意:作為備份依據(jù)的字段,如果修改,則可能造成數(shù)據(jù)重復(fù)或不能正確入庫(kù)
//
//********************************************************************


unit ADOBackUP;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db, ADODB, FileCtrl, Backup, DialogEx;
type
  TFloppyFileHead = record
    ID: array[0..3] of char; //  文件標(biāo)志, 正常為 JSFB 四個(gè)字符
    SerialNo: Double; //  序列號(hào)
    FloppyCount: Smallint; //  磁盤總數(shù)
    CurFloppyNo: Smallint; //  當(dāng)前磁盤號(hào)
    FileSize: integer; //  文件大小
    FileName: string[60]; //  原始文件名
    Information: array[0..43] of char; //  附加信息
  end;

  TErrorType = (etCancel, etError);
  TReturnType = (rtAll, rtTable, rtSql);
  TRatioChangedEvent = procedure(Sender: TObject; Ratio: Integer) of object;

  TADOBackUP = class(TComponent)
  private
    { Private declarations }
    FPackSize: Integer; // 每個(gè)包文件的大小
    FBackUpFileName: string; // 包文件名
    FTempPath, FSavePath, FWorkPath, FOrigPath: string; // 臨時(shí)目錄
    FSourceFile: string; // 含路徑
    FADOConnection: TADOConnection; // 數(shù)據(jù)庫(kù)源
    FSQLStrings: TStrings; // Sql語句
    FDelSQLStrings: TStrings; // 傳遞刪除Sql語句
    FInfo: TStrings; // 附帶信息
    TableMaps: TStrings; // 文件名映射
    FIsDevide: Boolean; // 是否分割文件
    FIsSavetoA: Boolean;
    FRadio: integer; // 拷貝進(jìn)度
    FRatioChanged: TRatioChangedEvent;
    FAutoDel: Boolean; // 是否自動(dòng)刪除數(shù)據(jù)

    FFloppyFileHead: TFloppyFileHead;
    FFileHeadList: array of TFloppyFileHead;
    FErrorType: TErrorType;

    BackupFile: TBackupFile;

    function StartWrong: Boolean;
    function CopyDevide: Boolean; // 拷貝分割文件  
    function CopyFloopyFile: Boolean; //  將文件進(jìn)行分割
    function MergeFloopyFile: Boolean; // 將文件進(jìn)行合并

    procedure CalFloppyHeadList; //  計(jì)算每包文件頭(分割拷貝前準(zhǔn)備)
    procedure RemoveDir(DirName: string); // 刪除臨時(shí)單層目錄
    function CopyfromAtoTemp: Boolean; // 將文件從A轉(zhuǎn)移至臨時(shí)目錄
    function CopytoTemp(SourcePath: string): Boolean; // 文件轉(zhuǎn)移至臨時(shí)目錄
    function RestoreData: Boolean; // 更新數(shù)據(jù)庫(kù)
    function GetTableName(mSql: TStrings; ReturnType: TReturnType = rtAll): TStrings;
    procedure RebackFiles(mfileName: string); // 恢復(fù)文件

    procedure SetSqlStrings(Value: TStrings);
    procedure SetDelSQLStrings(Value: TStrings);
    procedure SetInfo(Value: TStrings);
    function GenerateTempName(Path: string): string;
    procedure PreviewFile(Sender: TOpenPreviewDialog; FileName: string);
 //   Function CopyFromSource:Boolean;  // 從備份轉(zhuǎn)移文件
  protected
    { Protected declarations }
  public
    { Public declarations }

    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    function Backup(SavePath: string): Boolean;
    function Restore(SourceFile: string): Boolean;
    function GetInfo(SourceFile: string): Boolean; // 是否合法的備份文件
    function BrowseBackFile: string;

  published
    { Published declarations }
    property AutoDel: Boolean read FAutoDel write FAutoDel default True;
    property Info: TStrings read FInfo write SetInfo;
    property PackSize: Integer read FPackSize write FPackSize default 1456000;
    property BackUpFileName: string read FBackUpFileName write FBackUpFileName;
    property ADOConnection: TADOConnection read FADOConnection write FADOConnection;
    property SQLStrings: TStrings read FSQLStrings write SetSqlStrings;
    property DelSQLStrings: TStrings read FDelSQLStrings write SetDelSQLStrings;
    property IsDevide: Boolean read FIsDevide write FIsDevide;
    property Procession: TRatioChangedEvent read FRatioChanged write FRatioChanged;
  end;

procedure Register;

implementation

const
  fn_TableMap = '_TblMap.txt';
  fn_SQLFile = '_SQL.Txt';
  BackupSign = #$AA#$55#0'SWAT';

procedure Register;
begin
  RegisterComponents('FVCL', [TADOBackUP]);
end;

procedure TADOBackUp.SetSqlStrings(Value: TStrings);
begin
  if Assigned(Value) then
    FSqlStrings.Assign(Value);
end;

procedure TADOBackUp.SetDelSQLStrings(Value: TStrings);
begin
  if Assigned(Value) then
    FDelSqlStrings.Assign(Value);
end;

procedure TADOBackup.SetInfo(Value: TStrings);
begin
  if Assigned(Value) then
    FInfo.Assign(Value);
end;

// 在指定路徑(Path)下生成唯一的臨時(shí)文件名

function TADOBackup.GenerateTempName(Path: string): string;
  function IntToBase32(Number: Longint): string;
  const
    Table: array[0..31] of Char = '0123456789ABCDEFGHIJKLMNOPQRSTUV';
  var
    I: Integer;
  begin
    Result := '';
    for I := 0 to 4 do
    begin
      Insert(Table[Number and 31], Result, 1);
      Number := Number shr 5;
    end;
  end;
var
  Rand, RandOrig: Longint;
begin
  RandOrig := Random($2000000);
  Rand := RandOrig;
  repeat
    Inc(Rand);
    if Rand > $1FFFFFF then Rand := 0;
    if Rand = RandOrig then
      raise Exception.Create('建立臨時(shí)文件失敗');
    Result := 'Dat' + IntToBase32(Rand);
  until not FileExists(Path + Result);
end;

function TADOBackup.GetInfo(SourceFile: string): Boolean; // 是否合法的備份文件
var
  mReadFile: file of Byte;
  InfoLen: Integer;
  InfoText: string;
begin
  Assignfile(mReadFile, SourceFile);
  InfoText := '';
  Result := False;
  try
    try
      ReSet(mReadFile);
      if not Eof(mReadFile) then
        BlockRead(mReadFile, FFloppyFileHead, Sizeof(TFloppyFileHead));
      if FFloppyFileHead.ID <> 'JSFB' then // 表明不是經(jīng)過處理后的包文件
        ReSet(mReadFile);
      SetLength(InfoText, Length(BackUpSign));
      BlockRead(mReadFile, InfoText[1], Length(BackUpSign));
      if InfoText = BackUpSign then
      begin
        Result := True;
        BlockRead(mReadFile, InfoLen, Sizeof(Integer));
        SetLength(InfoText, InfoLen);
        BlockRead(mReadFile, InfoText[1], InfoLen);
      end;
    finally
      CloseFile(mReadFile);
    end;
  except
  end;
  FInfo.Text := InfoText;
end;

function TADOBackup.GetTableName(mSql: TStrings; ReturnType: TReturnType = rtAll): TStrings;
  function PosStr(substr: string; s: string): Integer; //
  begin
    s := stringReplace(s, substr, '^', [rfIgnoreCase]);
    Result := Pos('^', s);
  end;
var
  i: integer;
  Sqltxt: string;
  posint: integer;
  mtableName, mtablesql: string;
begin
  Result := Tstringlist.Create;
  for i := 0 to mSql.Count - 1 do
  begin
    Sqltxt := mSql[i];
    posint := posstr('from', Sqltxt);
    if posint <> 0 then
    begin
      delete(sqltxt, 1, posint + 4); // 刪去空格
      mtableName := copy(Sqltxt, 1, pos(' ', Sqltxt) - 1);
      posint := posstr('Where', Sqltxt);
      mtablesql := '';
      if posint = 0 then
        mtableName := SqlTxt
      else
      begin
        delete(sqltxt, 1, posint + 5);
        mtablesql := 'Where ' + Copy(Sqltxt, 1, length(Sqltxt));
      end;

      case ReturnType of
        rtAll:
          begin
            if posint <> 0 then
              mtablesql := ',' + mtablesql;
            Result.Add(mtableName + mtablesql);
          end;
        rtTable:
          Result.Add(mtableName);
        rtSql:
          Result.Add(mtablesql);
      end;
    end;
  end;
end;

function TADOBackup.MergeFloopyFile: Boolean;
var
  SFile: string;
  tmpS: string;
  ErrorFlag: Boolean;
  SHandle, THandle: Integer;
  i, j: integer;
  BlockCount, LastBlockSize: integer;
  Buffers: array[0..4095] of char;
  Excursion: Integer;
  TempFileName: string;
begin
  Result := True;
  ErrorFlag := False;
  TempFileName := FOrigPath + FBackUpFileName;

  THandle := FileCreate(TempFileName);

  SHandle := -1;

  SFile := StringReplace(FBackUpFileName, '.', InttoStr(1) + '.', [rfReplaceAll, rfIgnoreCase]);
  SFile := fTempPath + SFile;

  for i := 0 to Length(FFileHeadList) - 1 do
  begin
    TempFileName := ExtractFileName(SFile);
    Excursion := Length(inttostr(i + 1)) + 1; // 計(jì)算.偏移位數(shù)
    if i = 0 then
      SFile := ExtractFilePath(SFile) + Copy(TempFileName, 1, pos('.', TempFileName) - Excursion)
        + ExtractFileExt(SFile)
    else if i = 1 then
      SFile := ExtractFilePath(SFile) + Copy(TempFileName, 1, pos('.', TempFileName) - 1)
        + Inttostr(i + 1) + ExtractFileExt(SFile)
    else
      SFile := ExtractFilePath(SFile) + Copy(TempFileName, 1, pos('.', TempFileName) - Excursion)
        + Inttostr(i + 1) + ExtractFileExt(SFile);
    if FileExists(SFile) then
    begin
      SHandle := FileOpen(SFile, fmOpenRead or fmShareDenyNone);
      if SHandle = -1 then
      begin
        tmpS := '讀備份數(shù)據(jù) ' + IntToStr(i + 1) + ' 號(hào)盤錯(cuò)誤, ';
        ErrorFlag := True;
        Break;
      end;
    end
    else
    begin
      tmpS := '沒有發(fā)現(xiàn)備份數(shù)據(jù) ' + IntToStr(i + 1) + ' 號(hào)盤, ';
      ErrorFlag := True;
      Break;
    end;

    // 設(shè)置讀寫緩沖區(qū)大小
    BlockCount := (FFileHeadList[i].FileSize - Sizeof(TFloppyFileHead)) div 4096;
    LastBlockSize := (FFileHeadList[i].FileSize - Sizeof(TFloppyFileHead)) mod 4096;

    FileSeek(SHandle, Sizeof(TFloppyFileHead), 0);
    for j := 1 to BlockCount do
    begin
      FileRead(SHandle, Buffers, 4096);
      FileWrite(THandle, Buffers, 4096);
    end;
    if LastBlockSize > 0 then
    begin
      FileRead(SHandle, Buffers, LastBlockSize);
      FileWrite(THandle, Buffers, LastBlockSize);
    end;
    FileClose(SHandle);
    DeleteFile(SFile);
  end;
  FileClose(THandle);

  if ErrorFlag then
    Result := False;
end;

procedure TADOBackup.RemoveDir(DirName: string);
var
  FSearchRec: TSearchRec;
  FindResult: integer;
begin
  try
    FindResult := FindFirst(DirName + '*.*', faAnyFile + faHidden + faSysFile, FSearchRec);
    try
      while FindResult = 0 do
      begin
        Deletefile(DirName + FSearchRec.Name);
        FindResult := FindNext(FSearchRec);
      end;
    finally
      FindClose(FSearChRec);
    end;
    rmDir(DirName);
  except
  end;
end;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产日产欧美精品一区二区三区| 精品久久人人做人人爱| 老司机精品视频线观看86 | 久久免费午夜影院| 色狠狠桃花综合| 国产一级精品在线| 午夜国产不卡在线观看视频| 久久aⅴ国产欧美74aaa| 亚洲激情五月婷婷| 中文字幕精品在线不卡| 欧美成人女星排名| 欧美丰满少妇xxxbbb| 99久久精品国产麻豆演员表| 久久国产精品露脸对白| 亚洲图片有声小说| 亚洲精品久久久久久国产精华液| 国产亚洲精品免费| 日韩欧美国产电影| 欧美久久久久久久久| 91丨九色丨尤物| 福利一区二区在线| 国产一二精品视频| 捆绑变态av一区二区三区| 午夜欧美大尺度福利影院在线看| 17c精品麻豆一区二区免费| 久久伊人蜜桃av一区二区| 欧美一区二区黄| 欧美日韩国产bt| 欧美日韩一区二区三区在线| 色哟哟国产精品免费观看| 不卡在线视频中文字幕| 国产成人免费9x9x人网站视频| 久久精品国产网站| 日韩av网站在线观看| 午夜精品久久久久久久 | 国产在线不卡一区| 免费在线看一区| 日韩黄色小视频| 丝袜美腿亚洲一区| 日本不卡高清视频| 777午夜精品视频在线播放| 91亚洲精品久久久蜜桃| 99久久国产综合精品色伊| 99综合影院在线| 91成人免费在线视频| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 亚洲成人你懂的| 亚洲综合免费观看高清在线观看| 亚洲精品乱码久久久久久久久| 国产精品女同一区二区三区| 国产日韩欧美一区二区三区综合| 欧美日韩日日骚| 国产露脸91国语对白| 一区二区三区四区高清精品免费观看 | 国产精品香蕉一区二区三区| 国产精品一区免费视频| 日韩欧美视频在线| 日韩免费观看2025年上映的电影| 日韩精品一区二区三区四区视频| 日韩免费成人网| 欧美激情一二三区| 亚洲精品一卡二卡| 午夜电影网一区| 韩国精品主播一区二区在线观看| 国产精品一区二区久久精品爱涩 | 欧美精品久久天天躁| 欧美www视频| 国产欧美精品区一区二区三区| 国产精品每日更新| 国产精品国产自产拍高清av王其| 亚洲色图在线看| 美女一区二区在线观看| 国产高清久久久久| 日本高清不卡一区| 欧美大白屁股肥臀xxxxxx| 中文字幕免费一区| 午夜久久久久久| 国产精品18久久久久久久久 | 国产精品一品二品| 在线视频亚洲一区| 精品三级在线看| 成人在线一区二区三区| 色婷婷激情一区二区三区| 69成人精品免费视频| 中文字幕高清不卡| 亚洲1区2区3区视频| 国产成人在线免费观看| 在线欧美小视频| 久久久久久久久久久久久女国产乱| 亚洲色图在线播放| 九色|91porny| 91国偷自产一区二区三区成为亚洲经典 | 亚洲欧美在线高清| 免费在线视频一区| 色婷婷国产精品综合在线观看| 日韩欧美中文字幕一区| 中文字幕中文字幕一区二区 | 黄网站免费久久| 欧美在线免费视屏| 国产精品素人视频| 久久国产精品露脸对白| 欧洲精品一区二区三区在线观看| 久久久久久久一区| 日韩制服丝袜av| 91欧美激情一区二区三区成人| 欧美videossexotv100| 亚洲一区二区三区四区在线观看 | 日韩伦理免费电影| 韩国欧美一区二区| 6080日韩午夜伦伦午夜伦| 中文字幕综合网| 久久亚洲影视婷婷| 日韩在线观看一区二区| 色婷婷精品大在线视频| 国产精品久久久久永久免费观看 | 亚洲特级片在线| 国产成人自拍高清视频在线免费播放| 欧美人与禽zozo性伦| 一区二区三区丝袜| 色呦呦国产精品| 一区精品在线播放| 成人黄色电影在线| 国产欧美日韩在线| 狠狠色丁香九九婷婷综合五月| 欧美一区二区三区四区高清| 一区二区久久久久| 在线一区二区三区| 亚洲精品欧美二区三区中文字幕| 暴力调教一区二区三区| 国产欧美一区二区精品久导航| 国产一区二区久久| 精品av综合导航| 狠狠久久亚洲欧美| 久久奇米777| 国产精品1区2区| 久久久www成人免费毛片麻豆| 久久99国产精品免费| 日韩欧美国产一区二区在线播放 | 欧美日韩国产色站一区二区三区| 一区二区三区免费看视频| 色老综合老女人久久久| 一区二区三区欧美日韩| 欧美专区亚洲专区| 亚洲国产视频网站| 51精品国自产在线| 久久精品国产99久久6| 精品国产一区二区三区久久久蜜月 | 午夜激情久久久| 欧美日韩日日夜夜| 日韩1区2区3区| 日韩午夜在线观看视频| 久久99国产精品麻豆| 久久夜色精品国产噜噜av| 国产精品99久久久| 日韩美女精品在线| 欧美性淫爽ww久久久久无| 日韩综合一区二区| 精品国产一区二区三区av性色| 国产一区亚洲一区| 最新中文字幕一区二区三区| 色天天综合色天天久久| 日韩av电影天堂| 久久嫩草精品久久久久| 99久久久无码国产精品| 亚洲成人免费在线| 久久久噜噜噜久噜久久综合| 丁香亚洲综合激情啪啪综合| 亚洲欧美激情插| 日韩视频123| 成人动漫精品一区二区| 亚洲午夜精品网| 欧美xxxxxxxx| 色综合天天综合网天天看片| 日韩国产高清影视| 国产女人18毛片水真多成人如厕 | 亚洲综合视频在线观看| 日韩欧美中文字幕精品| 国内久久精品视频| 中文字幕亚洲一区二区av在线| 色婷婷一区二区| 欧美国产一区二区| 欧美亚一区二区| 国产一区二区免费视频| 一个色妞综合视频在线观看| 欧美一二三区在线观看| 成人激情黄色小说| 日韩一区精品视频| ㊣最新国产の精品bt伙计久久| 欧美一区二区观看视频| 99视频超级精品| 狠狠色2019综合网| 亚洲一区二区欧美日韩| 国产欧美日韩不卡免费| 欧美精品v日韩精品v韩国精品v| 成人av网站大全| 麻豆国产91在线播放| 一区二区三区日韩精品| 欧美国产精品中文字幕| 日韩视频免费观看高清在线视频| 色噜噜狠狠色综合中国|