大家知道AdoTable和AdoQuery等组件的Fields是在打开时自动创建的
也可以在组件上选择Add Fields就可以将列添加进去不知道能不能直接从代码行像Add All Fields一样直接将所有列加入Fields
因为我在有需要不能在设计时将列直接使用Add Fields添加到组件中,本来可以不必设置就自动读取了,但我需要用到查询字段(Loopup Fields)直接象下面这样添加查询字段就会显示 字段Clas找不到,因为这时我的AdoTable1还没有Open,但如果我先Open后再添加查询字段的话又提示我不能操作打开的Dataset
如果像注释中这样先将列加入是可以,但列多了必带来不少麻烦,有没有在代码行像设计状态那样执行一个Add Fields就全OK了,我找来找去却没有找到添加的方法,请各位大侠帮忙
{ aField:=TWideStringField.Create(self);
aField.FieldName:='CLas';
aField.DataSet:=ADOTable1;
…..
} aField:=TWideStringField.Create(self);
aField.FieldKind:=fkLookup;
aField.FieldName:='SName';
aField.LookupDataSet:=ADOTable2;
aField.LookupKeyFields:='Code';
aField.LookupResultField:='Name';
aField.KeyFields:='Clas';
aField.DataSet:=DataSource1.DataSet;
ADOTable1.Open;
DBEdit7.DataSource:=DataSource1;
DBEdit7.DataField:='SName';
也可以在组件上选择Add Fields就可以将列添加进去不知道能不能直接从代码行像Add All Fields一样直接将所有列加入Fields
因为我在有需要不能在设计时将列直接使用Add Fields添加到组件中,本来可以不必设置就自动读取了,但我需要用到查询字段(Loopup Fields)直接象下面这样添加查询字段就会显示 字段Clas找不到,因为这时我的AdoTable1还没有Open,但如果我先Open后再添加查询字段的话又提示我不能操作打开的Dataset
如果像注释中这样先将列加入是可以,但列多了必带来不少麻烦,有没有在代码行像设计状态那样执行一个Add Fields就全OK了,我找来找去却没有找到添加的方法,请各位大侠帮忙
{ aField:=TWideStringField.Create(self);
aField.FieldName:='CLas';
aField.DataSet:=ADOTable1;
…..
} aField:=TWideStringField.Create(self);
aField.FieldKind:=fkLookup;
aField.FieldName:='SName';
aField.LookupDataSet:=ADOTable2;
aField.LookupKeyFields:='Code';
aField.LookupResultField:='Name';
aField.KeyFields:='Clas';
aField.DataSet:=DataSource1.DataSet;
ADOTable1.Open;
DBEdit7.DataSource:=DataSource1;
DBEdit7.DataField:='SName';
ADataSet.Fields.GetFieldNames(AListBox.Items);
var
aField : TStringField;
begin
ADOQuery1.Open;
aField := TStringField.Create(nil);
ADOQuery1.Fields.Add(aField);
with aField do
begin
FieldKind := fkLookup;
FieldName := 'sName';
LookupDataSet := ADOQuery2;
LookupKeyFields := 'Code';
LookupResultField := 'Name';
KeyFields := 'Code';
Lookup := True;
end;
end;
创建一个字段后然后再在数据集AdoQuery1增加,即ADOQuery1.Fields.Add(aField);
本人测试OK
为什么我执行了后在Grid中不能显示????
DBGrid1的值为DataSource1
执行上面的语句后并没有出现那个新增的查询字段
var
aField : TStringField;
aColumn : TColumn;
begin
ADOQuery1.Open;
aField := TStringField.Create(nil);
ADOQuery1.Fields.Add(aField);
with aField do
begin
FieldKind := fkLookup;
FieldName := 'sName';
LookupDataSet := ADOQuery2;
LookupKeyFields := 'Code';
LookupResultField := 'Name';
KeyFields := 'Code';
Lookup := True;
end; aColumn := DBGrid1.Columns.Add;
with aColumn do
begin
FieldName := 'name';
Visible := True;
end;
end
Field 'sName' has no Dataset
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;
aColumn := DBGrid1.Columns.Add;
with aColumn do
begin
FieldName := 'sName';
Visible := True;
end;但首先应在DBGrid中加入部分数据字段,一定可以
你说的先在DBGrid中加入部分字段,发如这样的话所有字段就全部要手工加入了,因为加入了几个字段后就不会自动加入其它的字段了