Delphi中如何备份数据表为insert 脚本2015-02-13
unit Unit1;interfaceusesWinapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,System.Classes, Vcl.Graphics,Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Data.DB,Datasnap.DBClient;typeTForm1 = class(TForm)cds: TClientDataSet;Button1: TButton;Button2: TButton;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);private{ Private declarations }procedure ExportData(const tableNames: string);procedure ImportData(const fileName, tableNames: string);public{ Public declarations }end;varForm1: TForm1;implementation{$R *.dfm}uses untDB;procedure TForm1.Button1Click(Sender: TObject);beginExportData("bas_kind,bas_goods");end;procedure TForm1.Button2Click(Sender: TObject);beginImportData(ExtractFilePath(Application.ExeName) + "export.sql", "bas_kind,bas_goods");end;procedure TForm1.ExportData(const tableNames: string);varsql, err: string;sl, tables: TStringList;i, h: Integer;fieldNames, values: string;function GetValue(field: TField): string;begincase field.DataType offtString, ftTimeStamp:beginResult := QuotedStr(field.AsString);end;ftBoolean:begincase field.AsBoolean oftrue: Result := "1";false: Result := "0";end;end;elseif not VarIsNull(field.Value) thenbeginResult := VarToStr(field.Value);endelseResult := "null";end;end;beginif tableNames = "" thenexit;tables := TStringList.Create;tables.Delimiter := ",";tables.DelimitedText := tableNames;sl := TStringList.Create;sl.Clear;for h := 0 to tables.Count - 1 dobeginsql := "select * from " + tables[h];if frmDB.QuerySQL(sql, cds, err) and (not cds.IsEmpty) thenbegincds.First;while not cds.Eof dobeginfieldNames := "";values := "";for i := 0 to cds.FieldCount - 1 dobeginif fieldNames = "" thenbeginfieldNames := cds.Fields[i].FieldName;endelsebeginfieldNames := fieldNames + "," + cds.Fields[i].FieldName;end;if values = "" thenbeginvalues := GetValue(cds.Fields[i]);endelsebeginvalues := values + "," + GetValue(cds.Fields[i]);end;end;sl.Add("insert into " + tables[h] + "(" + fieldNames + ") values (" +values + ")");cds.Next;end;end;end;sl.SaveToFile(ExtractFilePath(Application.ExeName) + "export.sql");sl.Free;tables.Free;end;procedure TForm1.ImportData(const fileName, tableNames: string);varcmd, tables: TStringList;err, sql: string;i: Integer;beginif (not FileExists(fileName)) or (tableNames = "") thenexit;tables := TStringList.Create;tables.Delimiter := ",";tables.DelimitedText := tableNames;for i := 0 to tables.Count - 1 dobeginsql := "truncate table " + tables[i];frmDB.ExecuteSQL(sql, err);end;tables.Free;cmd := TStringList.Create;cmd.LoadFromFile(fileName);frmDB.ExecuteSQL(cmd.Text, err);cmd.Free;end;end.
Author:cnblogs 咏南 delphi