怎样在程序运行时,用代码动态的创建LOOKUP字段????

解决方案 »

  1.   

    var v_a:tfield;
    begin
      v_a:=tfield.Create(self);
      v_a.FieldKind:=fklookup;
      v_a.FieldName:='name';  //字段名稱
      v_a.KeyFields:='no';    //索引字段
      v_a.LookupDataSet:=table1;//查找的數據集
      v_a.LookupKeyFields:='no';//查找的數據集索引
      v_a.LookupResultField:='name';//查找的數據集返回值
    end;
      

  2.   

    我还是有点问题:
    qry.close;
    qry.fields.add(v_a);
    qry.open;
    我在把LOOKUP字段加到ADOQUERY里的时候,还是有错误,请再给指教一下。
      

  3.   

    [qry.close;
    qry.fields.add(v_a);
    qry.open;]
    其中v_a应该是一个 TField 类型。
      

  4.   

    var v_a:tfield;
    begin
      qry.close;
      v_a:=tfield.Create(self);
      v_a.FieldKind:=fklookup;
      v_a.FieldName:='name';  //字段名稱
      v_a.KeyFields:='no';    //索引字段
      v_a.LookupDataSet:=table1;//查找的數據集
      v_a.LookupKeyFields:='no';//查找的數據集索引
      v_a.LookupResultField:='name';//查找的數據集返回值
      qry.fields.add(v_a);
      qry.open;
    end;
    記住table1要打開喲。
    如果你對v_a的相關屬性沒有設錯的話﹐絕對不會有錯誤 的。
      

  5.   

    我确实是按上面写的,提示的错误:qry: field 'name' cannot be a calculated or lookup field.
      

  6.   

    Procedure GetCalcField(QrySrc:TQuery;ModeType:String;SelfCalcList:tStringList);
    var Qrytmp:TQuery;
        Fieldstr:TStringField;
        FieldInt:TIntegerField;
        FieldCur:TCurrencyField;
    begin
      Qrytmp:=QrySrc;
      Qrytmp.Close;
    Fieldstr:=TStringField.Create(Qrytmp);
    Fieldstr.FieldKind:= fkData;//fkCalculated;
    Fieldstr.Name:= Qrytmp.Name + Fieldbyname('FldName').Asstring;
    Fieldstr.FieldName:= Fieldbyname('FldName').Asstring;
    Fieldstr.DisplayLabel:= Fieldbyname('FldCaption').asstring;
    Fieldstr.Size:= StrtoInt(Fieldbyname('FldSize').asstring);
    Fieldstr.DisplayWidth:= StrtoInt(Fieldbyname('FldSize').asstring);
    Fieldstr.Index:=Qrytmp.FieldCount;
    Fieldstr.DataSet:=Qrytmp;
      
    end;
    用这个方法没有问题,我现在正在使用这个方法。给分吧!
      

  7.   

    我作出来了
    var
    t: TStringField;
    s: String;
    begin
    qry1.Close;
    t := TStringField.Create(Self);
    t.FieldKind := fkLookUp;
    t.FieldName := 'zgd';
    t.KeyFields := 'itemcode';
    t.LookupDataSet := qry2;
    t.LookupKeyFields := 'itemcode';
    t.LookupResultField := 'itemname';
    t.DataSet := qry1;
    qry1.Open;
    s := qry1.fieldbyname('zgd').AsString;
    end;
    注意:1、一定要用TStringField
      2、一定要用 t.DataSet := qry1, 不能使用 qry1.Fields.Add(t)