unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB, ExtCtrls, wdbreg, DBClient, Provider; type TForm1 = class(TForm) ADOConnection1: TADOConnection; ADODataSet1: TADODataSet; Memo1: TMemo; DataSource1: TDataSource; ADODataSet2: TADODataSet; DataSource2: TDataSource; Panel1: TPanel; DBGrid2: WDBGRID; DBGrid1: WDBGRID; Splitter1: TSplitter; Splitter2: TSplitter; DataSetProvider1: TDataSetProvider; ClientDataSet1: TClientDataSet; ClientDataSet1MAXItem: TAggregateField; Panel2: TPanel; Button1: TButton; Button2: TButton; Button3: TButton; ADODataSet2MaxItem: TAggregateField; ClientDataSet1CDSDesigner: TWideStringField; ClientDataSet1CDSDesigner2: TSmallintField; ClientDataSet1CDSDesigner3: TWideStringField; ClientDataSet1CDSDesigner4: TWideStringField; ClientDataSet1CDSDesigner5: TSmallintField; ClientDataSet1CDSDesigner6: TSmallintField; ClientDataSet1PK: TWideStringField; ClientDataSet1FK: TWideStringField; ClientDataSet1CDSDesigner7: TWideStringField; ClientDataSet1CDSDesigner8: TWideStringField; ClientDataSet1CDSDesigner9: TWideStringField; ClientDataSet1CDSDesigner10: TWideStringField; ADODataSet2DSDesigner: TWideStringField; ADODataSet2DSDesigner2: TSmallintField; ADODataSet2DSDesigner3: TWideStringField; ADODataSet2DSDesigner4: TWideStringField; ADODataSet2DSDesigner5: TSmallintField; ADODataSet2DSDesigner6: TSmallintField; ADODataSet2PK: TWideStringField; ADODataSet2FK: TWideStringField; ADODataSet2DSDesigner7: TWideStringField; ADODataSet2DSDesigner8: TWideStringField; ADODataSet2DSDesigner9: TWideStringField; ADODataSet2DSDesigner10: TWideStringField; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure ListBox1Click(Sender: TObject); procedure ADODataSet1AfterScroll(DataSet: TDataSet); procedure Button1Click(Sender: TObject); procedure ClientDataSet1AfterInsert(DataSet: TDataSet); procedure ClientDataSet1AfterPost(DataSet: TDataSet); private procedure GenerateCreateSQL; { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i: integer; begin ADOConnection1.Connected := True; ADODataSet1.Open; ADODataSet2.Open; //ClientDataSet1.Open; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin ADODataSet2.Close; ADODataSet1.Close; ADOConnection1.Connected := False; end; procedure TForm1.ListBox1Click(Sender: TObject); begin //if ListBox1.ItemIndex = -1 then // Exit; //ADODataSet1.Active := False; //ADODataSet1.CommandText := Format('SELECT * FROM [%S]', [ListBox1.Items[ListBox1.ItemIndex]]); //ADODataSet1.Active := True; //GenerateCreateSQL; end; procedure TForm1.GenerateCreateSQL; var recno: integer; s: string; fieldName, fieldType: string; aLength, aDecimal: integer; begin Memo1.Lines.Clear; Memo1.Lines.Append(Format('CREATE TABLE %s (', [ADODataSet2.FieldByName('表格名稱').AsString])); ClientDataSet1.DisableControls; ClientDataSet1.First; recno := 1; while not ClientDataSet1.Eof do begin fieldName := ClientDataSet1.FieldByName('欄位名稱').AsString; fieldType := ClientDataSet1.FieldByName('型態').AsString; aLength := ClientDataSet1.FieldByName('長度').AsInteger; aDecimal := ClientDataSet1.FieldByName('小數').AsInteger; s := Format(' %s %s', [fieldName, fieldType]); if fieldType = 'DECIMAL' then s := s + Format(' (%d, %d)', [aLength, aDecimal]) else if Pos(fieldType, 'CHAR,NCHAR,VARCHAR,NVARCHAR') > 0 then s := s + Format(' (%d)', [aLength]); if ClientDataSet1.FieldByName('PK').AsString = 'V' then s := s + ' NOT NULL '; if recno < ClientDataSet1.RecordCount then s := s + ' ,' else s := s + ' )'; Memo1.Lines.Append(s); Inc(recno); ClientDataSet1.MoveBy(1); end; Memo1.Lines.Append('GO'); ClientDataSet1.First; ClientDataSet1.EnableControls; end; procedure TForm1.ADODataSet1AfterScroll(DataSet: TDataSet); begin ClientDataSet1.Close; ADODataSet2.DisableControls; ADODataSet2.Close; ADODataSet2.Parameters.ParamValues['表格名稱'] := ADODataSet1.FieldValues['表格名稱']; ADODataSet2.Open; ClientDataSet1.Open; ADODataSet2.EnableControls; end; procedure TForm1.Button1Click(Sender: TObject); begin GenerateCreateSQL; end; procedure TForm1.ClientDataSet1AfterInsert(DataSet: TDataSet); begin if VarIsNull(ClientDataSet1.FieldByName('MAXItem').Value) then //ClientDataSet1.FieldByName('項次').AsInteger := 1 ADODataSet2.FieldByName('項次').AsInteger := 1 else //ClientDataSet1.FieldByName('項次').AsInteger := ClientDataSet1.FieldByName('MAXItem').Value + 1; ADODataSet2.FieldByName('項次').AsInteger := ClientDataSet1.FieldByName('MAXItem').Value + 1; //ClientDataSet1.FieldByName('表格名稱').AsString := ADODataSet1.FieldValues['表格名稱']; ADODataSet2.FieldByName('表格名稱').AsString := ADODataSet1.FieldValues['表格名稱']; end; procedure TForm1.ClientDataSet1AfterPost(DataSet: TDataSet); //var i: integer; begin //i := ClientDataSet1.ApplyUpdates(0); end; end.