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)
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;
我的方法好笨的: 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;
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)
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;
你的方法我试过了,但现在问题是,我要建立的查找字段,所关联的字段的数据类型是未知的,
我不能确定是用tstringfield,tfloatfield,还是 tintegerfield.我试着用tfield,但是
不行,会出现数据类型不匹配的错误.我要建立的查找字段关联的字段可能是字符串,也可能是
整型,我该怎么做?
进行查询,要求在此工具中可以设置查询任务,给出数据源名称,要查询的表,
要显示的字段,以及与其他表连接的查找字段,采集这些数据后,由工具
自动产生查询任务。我现在遇到的难点是,在产生查询任务时,对查找字段
如何动态产生,通过(绝对是菜鸟)的方法,可以动态加入一个动态字段,
但用此方法,dbgrid中只显示出查找字段,表中其他的字段都不见了,只有
把所有的其他字段都动态加一遍,才能显示出来,我现在请教,有无方法,
可以动态加入一个动态字段,但不需要将其他的字段也动态加进去,而可以
在dbgrid中显示出表中所有的字段(包括查找字段),请各位指点。
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;