我动态加入字段的代码如下,
不知道错在哪里?
procedure TForm1.Button5Click(Sender: TObject);
 var s:Tfieldtype ;//增加字段的类型
     i:integer;//增加字段的长度
     recname:string;//增加的字段名
begin
s:=adoquery1.FieldByName('CompanyID').DataType;
i:= adoquery1.FieldByName('CompanyID').Size ;
recname:= 'CompanyID';
Adoquery2.Close ;
Adoquery2.SQL.Clear ;
Adoquery2.SQL.Add('ALTER TABLE test '+recname+' '+s+'('+i+')') ;
adoquery2.ExecSQL ;end;

解决方案 »

  1.   

    recname:= 'CompanyID';
    Adoquery2.Close ;
    Adoquery2.SQL.Clear ;
    Adoquery2.SQL.Add('ALTER TABLE test add '+recname+' '+s+'('+i+')') ;
    adoquery2.ExecSQL ;//可能原因:没有加ADD;数据类型不存在;如果是整型,则不要加()呢
      

  2.   

    谢谢 zhoutian618
    还有数据类型不知道怎样处理!
      

  3.   

    你的想法是好的,但是实际上你的方法办不到。主要有两个问题:
    1、'ALTER TABLE test '+recname+' '+s+'('+i+')'
    中的S是Tfieldtype(一个集合)类型,它直接和字符串相加是不可以的。
    2、即使可以相加,而不同数据库对于定义相同类型字段的关键字有所不同。如access支持“text”,表示“varchar”,而oracle则不支持“text”表示“varchar”。
    3、i:= adoquery1.FieldByName('CompanyID').Size ;
    中i是Integer类型,不能和字符串直接相加。同样特殊类型字段的Size并不等于数据库中定义的字段长度,如数据库中是varchar(256),则取得的Size并不等于256,因为在Delphi中,这样的字段类型是TMemoField而不是简单的TStringDField.————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  4.   

    to lxpbuaa
      那如果我增加的字段的类型是与其他字段的类型相同,
    我应该怎样做了?
    谢谢!