如何在程序中在一个table里动态创建一个查找字段,即lookup字段,
请给出代码.

解决方案 »

  1.   

    with tclientdataset1.FieldDefs do
      begin
        Add('field1', ftInteger, 0, True);
      end;
      for i:= 1 to tclientdataset1.FieldDefs.Count - 1 do
      begin
        if tclientdataset1.FieldDefs[i].Name = 'tclientdataset1field1' then
         tclientdataset1.FieldDefs[i].fieldkind := fkLookUp;
      end;
      tclientdataset1CalcFields(nil)
      

  2.   

    t1:=tstringfield.Create(self);
      with t1 do
        begin
          FieldName := 'xz_back';
          FieldKind:= fkLookup;
          DataSet := data.ads_com;
          Name := Dataset.Name + FieldName;
          KeyFields:= 'xz';
          LookUpDataset:=data.ads_one ;
          LookUpKeyFields:= 'bm';
          LookUpResultField:= 'tname';
          xz.DataField:= FieldName;
          data.ads_com.FieldDefs.Add(Name, ftString, 10, false);
          xz.ListSource :=data.ds_one;
       end;
      

  3.   

    blueshu(绝对是菜鸟):
       你的方法我试过了,但现在问题是,我要建立的查找字段,所关联的字段的数据类型是未知的,
    我不能确定是用tstringfield,tfloatfield,还是 tintegerfield.我试着用tfield,但是
    不行,会出现数据类型不匹配的错误.我要建立的查找字段关联的字段可能是字符串,也可能是
    整型,我该怎么做?
      

  4.   

    我要做一个动态的数据库查询工具,可以连接任意数据源,对其中的数据库
    进行查询,要求在此工具中可以设置查询任务,给出数据源名称,要查询的表,
    要显示的字段,以及与其他表连接的查找字段,采集这些数据后,由工具
    自动产生查询任务。我现在遇到的难点是,在产生查询任务时,对查找字段
    如何动态产生,通过(绝对是菜鸟)的方法,可以动态加入一个动态字段,
    但用此方法,dbgrid中只显示出查找字段,表中其他的字段都不见了,只有
    把所有的其他字段都动态加一遍,才能显示出来,我现在请教,有无方法,
    可以动态加入一个动态字段,但不需要将其他的字段也动态加进去,而可以
    在dbgrid中显示出表中所有的字段(包括查找字段),请各位指点。
      

  5.   

    我的方法好笨的:
    var
       SField :TField;
    Begin
         SField:=nil;
         try
           if Query.Fields[I].DataType=ftString then
                SField:=TstringField.Create(nil);
           if (Query.Fields[I].DataType=ftInteger) or (Query.Fields[I].DataType=ftAutoInc) then
               SField:=TIntegerField.Create(nil);
           if Query.Fields[I].DataType=ftBoolean then
                SField:=TBooleanField.Create(nil);
           if Query.Fields[I].DataType=ftBCD then
                SField:=TBCDField.Create(nil);
           if Query.Fields[I].DataType=ftDateTime then
                SField:=TDateTimeField.Create(nil);
           if Query.Fields[I].DataType=ftMemo then
                SField:=TMemoField.Create(nil);
           if Query.Fields[I].DataType=ftCurrency then
                SField:=TCurrencyField.Create(nil);
           if SField=nil then
           Begin
              ShowMessage('未知类型,与我联系');
           end;
      

  6.   

    楼主的意思我没有全明白,是不是要做一个万能查询工具?至于在DBGRID要显示哪些字段,我认为可以在组织查询语句的时候都加入到SELECT 后面。这样应该可以解决你的问题!
      

  7.   

    我的意思是,如果我在程序里动态添加了一个查找字段,查询结束后,在dbgrid中只能显示这个查找字段,而表里的其他字段都没有显示了。如果没有动态添加一个查找字段,查询结束后,在dbgrid中能显示出查询结果中的所有字段,我尝试了一下,当在程序里动态添加了一个查找字段的同时,必须也要动态将其他的显示字段动态创建一遍,才能在结果中显示出来,这样实在太麻烦了,不知道有没有好一点的方法,可以动态添加一个查找字段,同时又能在查询结果中将其他的字段都能显示出来。