我用Adoquery1.sql.add('select * from MyTable where 1=0')语句在内存生成空表,准备为这个空表添加若干记录后用批量更新一次性写回MyTable去。现在我想为这个空表增加一个'序号'字段,以便在录入时使DBGrid的最左边加一个序号,应如何写代码?谢谢!

解决方案 »

  1.   

    增加字段
    //
    Alter TABLE table_name ADD column_name DATATYPE对表table_name增加一个字段column_name,类型为DTATATYPE (取值见上表)
      

  2.   

    不知道以下方法可不可以???
    反正我是没有用过啦!
    ...
    //定义临时字段,也可以为其它类型。
    var
      lcField: TStringField; 
    begin
      //先创建。
      lcField:= TStringField.Create(所有者);
      //以下可以是lcField的参数设置。
      ...
      //添加到ADOQuery的记录表中去。
      ADOQuery1.Fields.Add(lcField);
      //添加完成,以下是其它操作。
      ...
    end;
    ...
      

  3.   

    Var
      Vfield:Tstringfield;
    begin
      VField := TStringField.Create(Self);
      Vfield.FieldName := 'a';  //这地方写你要加的字段的实际名字就是数据 as 后的名字
      Vfield.Name := ADOQuery1 .Name + Vfield.FieldName;
      Vfield.Index := ADOQuery1 .FieldCount;
      Vfield.DataSet := ADOQuery1 ;
      ADOQuery1 .FieldDefs.UpDate;
      ADOQuery1 .Open
    这是动态删除 
    var
      C: TComponent;
    begin
      C := FindComponent('ADOQuery1a');
      if not (TC = nil) then begin
        ADOQuery1.Close;
        C.Free;
        ADOQuery1.Open;
      end;
      

  4.   

    我试过了,上面两种方法添加新栏位前,都必须先关闭ADOQuery1,这样原来的栏位就不见了.
    有没有办法在原有栏位的基础上再添置加新栏位?
      

  5.   

    FCDS:=TClientDataSet.Create(Self);   //动态生成数据集并定义字段
    FCDS.FieldDefs.Add('AA',ftString,5,false);
    FCDS.FieldDefs.Add('BB',ftInteger,0,false);
    FCDS.FieldDefs.Add('CC',ftInteger,0,false);
    FCDS.CreateDataSet;
    FCDS.IndexDefs.Add('AA','AA',[]);
    FCDS.IndexDefs.Items[0].Fields:='AA' ;
    FCDS.IndexName:=FCDS.IndexDefs.Items[0].Name ;



    DataSource1.DataSet := FCDS ;     //把动态数据集给DBGrid