select @s = 'create table #s ('
declare cursor c for
select 名称, 字段类型 from s2
open c
fetch c nect into @f1, @f2
select @s = @s + @f1 + ' ' + @f2
fetch c nect into @f1, @f2
while @@fetch_status <> 0 do
begin
select @s = @s + ',' + @f1 + ' ' + @f2
fetch c nect into @f1, @f2
end
exec (@s)
begin
Table1.First;
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('CREATE TABLE S1 (');
while not Table1.Eof do begin
if SameText(Table1.FieldByName('字段类型').AsString, 'int') then
Query1.SQL.Add(Format('%s int,', [Table1.FieldByName('名称').AsString]))
else if SameText(Table1.FieldByName('字段类型').AsString, 'string') then begin
Query1.SQL.Add(Format('%s varchar(30),', [Table1.FieldByName('名称').AsString]))
end else if SameText(Table1.FieldByName('字段类型').AsString, 'bool') then begin
Query1.SQL.Add(Format('%s varchar(2),', [Table1.FieldByName('名称').AsString]))
//直接字符“是”、“否”取代bool类型
end else if SameText(Table1.FieldByName('字段类型').AsString, 'float') then begin
Query1.SQL.Add(Format('%s float,', [Table1.FieldByName('名称').AsString]))
end;
Table1.Next;
end;
Query1.SQL.Add(')');
// Memo1.Text := Query1.SQL.Text; //调试用//如果不成功就把Memo1的文本复制到SQL管理程序中执行看看什么地方错误
Query1.ExecSQL;
end;
你用的是什么数据库?
//参考
var
vSize: Integer;
vDataType: TFieldType;
begin
Table1.First;
Table2.Close;
Table2.TableName := 'S1';
while not Table1.Eof do begin
if SysUtils.SameText(Table1.FieldByName('字段类型').AsString, 'int') then begin
vSize := 0;
vDataType := ftInteger;
end else if SysUtils.SameText(Table1.FieldByName('字段类型').AsString, 'string') then begin
vSize := 10;
vDataType := ftString;
end else if SysUtils.SameText(Table1.FieldByName('字段类型').AsString, 'bool') then begin
vSize := 0;
vDataType := ftBoolean;
end else if SysUtils.SameText(Table1.FieldByName('字段类型').AsString, 'float') then begin
vSize := 0;
vDataType := ftFloat;
end;
Table2.FieldDefs.Add(Table1.FieldByName('名称').AsString, vDataType, vSize);
Table1.Next;
end;
Table2.CreateTable;
end;