190 lines
5.5 KiB
ObjectPascal
190 lines
5.5 KiB
ObjectPascal
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);
|
|
procedure ADODataSet2AfterInsert(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
|
|
else
|
|
ClientDataSet1.FieldByName('項次').AsInteger := ClientDataSet1.FieldByName('MAXItem').Value + 1;
|
|
ClientDataSet1.FieldByName('表格名稱').AsString := ADODataSet1.FieldValues['表格名稱'];
|
|
}
|
|
end;
|
|
|
|
procedure TForm1.ClientDataSet1AfterPost(DataSet: TDataSet);
|
|
//var i: integer;
|
|
begin
|
|
//i := ClientDataSet1.ApplyUpdates(0);
|
|
end;
|
|
|
|
procedure TForm1.ADODataSet2AfterInsert(DataSet: TDataSet);
|
|
begin
|
|
if VarIsNull(ClientDataSet1.FieldByName('MAXItem').Value) then
|
|
ADODataSet2.FieldByName('項次').AsInteger := 1
|
|
else
|
|
ADODataSet2.FieldByName('項次').AsInteger := ClientDataSet1.FieldByName('MAXItem').Value + 1;
|
|
ADODataSet2.FieldByName('表格名稱').AsString := ADODataSet1.FieldValues['表格名稱'];
|
|
end;
|
|
|
|
end.
|