⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 sql版功能齐全
💻 PAS
字号:
{作者:星五 Smallarmy@hotmail.com www.e8e.net
 QQ:593106 加入消息:DF编程 或 DF编程爱好者
 申明:我是业余爱好者,并不专业,不要拿我比}
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, ADODB;

type
  TForm1 = class(TForm)
    Duba: TADOQuery;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
   _s3,_f,_t:string;
   i,k:integer;
   _s:textfile;
   tname: array[0..7] of string  ;
begin
  tname[0]:='dlyb' ;
  tname[1]:='groupuser' ;
  tname[2]:='jyxxb'  ;
  tname[3]:='qxgl' ;
  tname[4]:='sx'  ;
  tname[5]:='tsjbxx';
  tname[6]:='tslb';
  tname[7]:='yh' ;
  for k:=0 to 7 do
    begin
      Randomize;
      _t:=tname[k];
      _s3:=ExtractFileDir(application.ExeName)+'\backup\'+_t+FormatDateTime('yyyymmddhhmmss',now())+'.sql';
      //备份文件名,取当前日期时间为文件名
      assignfile(_s,_s3);
      rewrite(_s);//新建并打开,文件存在则覆盖目标文件
      //_t:=edit1.Text;
      Duba.Active:=false;
      with Duba do
      begin
        close;
        sql.clear;
        sql.add('select syscolumns.name as 名称,systypes.name as 类型,syscolumns.prec as 长度,isnullable as 允许空 from syscolumns,systypes where (object_id('''+_t+''')=syscolumns.id) and (syscolumns.xusertype=systypes.xusertype)');
        //表的数据都存在库的syscolumns表里,所以只要读它就能取出表结构,systypes表里的是类型
        open;
      end;
      Duba.Active:=true;
      if Duba.RecordCount>0 then
      begin
        Duba.First;
        writeln(_s,'--表'''+_t+'''的结构');
        writeln(_s,'  if exists (select * from sysobjects where id = OBJECT_ID('''+_t+''') and OBJECTPROPERTY(id, ''IsUserTable'') = 1) DROP TABLE '+_t);
        write(_s,'  CREATE TABLE '+_t+'(');
        repeat
          if duba.FieldByName('类型').AsString='nvarchar' then
          begin
          for i:=1 to Duba.FieldCount-1 do
            if duba.Fields.FieldByNumber(i).DataType=ftSmallint then write(_s,'('+Duba.Fields.FieldByNumber(i).AsString+') ')
              else write(_s,duba.Fields.FieldByNumber(i).asString+' ');
          end else
          for i:=1 to Duba.FieldCount-1 do
            if duba.Fields.FieldByNumber(i).DataType<>ftSmallint then write(_s,duba.Fields.FieldByNumber(i).asString+' ');
          if Duba.Fields.FieldByNumber(Duba.FieldCount).AsString='1' then write(_s,'null,')
            else write(_s,'not null,');
          Duba.Next;
        until Duba.Eof;
        write(_s,')');
        writeln(_s);
      end;
      Duba.Active:=false;
      with Duba do
      begin
        close;
        sql.clear;
        sql.add('SELECT * FROM '+_t);
        open;
      end;
      Duba.Active:=true;
      if Duba.RecordCount>0 then
      begin
        _f:='';
        for i:=1 to Duba.FieldCount-1 do
          _f:=_f+Duba.Fields.FieldByNumber(i).FieldName+',';
        _f:=_f+Duba.Fields.FieldByNumber(Duba.FieldCount).FieldName;
        Duba.First;
        writeln(_s,'--表'''+_t+'''的数据');
        repeat
          write(_s,'  insert into '+_t+'('+_f+ ') Values(');
          for i:=1 to Duba.FieldCount-1 do
            if Duba.Fields.FieldByNumber(i).AsString='' then write(_s,'null,')
              else if (Duba.Fields.FieldByNumber(i).DataType=ftWideString) or (Duba.Fields.FieldByNumber(i).DataType=ftDateTime) then write(_s,''''+Duba.Fields.FieldByNumber(i).AsString+''',')
                else write(_s,Duba.Fields.FieldByNumber(i).AsString+',');
          if Duba.Fields.FieldByNumber(Duba.FieldCount).AsString='' then write(_s,'null)')
            else if (Duba.Fields.FieldByNumber(Duba.FieldCount).DataType=ftWideString) or (Duba.Fields.FieldByNumber(Duba.FieldCount).DataType=ftDateTime) then write(_s,''''+Duba.Fields.FieldByNumber(Duba.FieldCount).AsString+''')')
              else write(_s,Duba.Fields.FieldByNumber(Duba.FieldCount).AsString+')');
            Writeln(_s);
          Duba.Next;
        until Duba.Eof;
      end;
      Closefile(_s);
    end;
  MessageBox(Handle,'备份完成','提示',MB_OK or MB_ICONINFORMATION);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -