如何在程序中在一个table里动态创建一个查找字段,即lookup字段,
请给出代码.
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;