var i:integer; list:TStringList; field:TField; begin list := TStringList.Create; ADOConnection1.GetFieldNames('stuff',list); ShowMessage(IntToStr(ADOTable1.Fields.Count)); for i := 0 to list.Count - 1 do begin field := TField.Create(nil); field.FieldName := list.Strings[i]; ADOTable1.Fields.Add(field); ..处理field的其它属性,比如类型 end; ShowMessage(IntToStr(ADOTable1.Fields.Count)); end;
为什么我把你的ADOTABLE 改为ADODATASET 就运行不了?
我的代码是: procedure TForm1.FormCreate(Sender: TObject); var i:integer; list:TStringList; field:TField; begin adodataset1.Close; adodataset1.CommandText:='select * from kind';list := TStringList.Create; ADOConnection1.GetFieldNames('kind',list); for i := 0 to list.Count - 1 do begin field := TField.Create(nil); field.FieldName := list.Strings[i]; adodataset1.Fields.Add(field); end; adodataset1.open;end;运行时就出现field '我数据库中的字段名' has no dataset
procedure gsDrawDBGridEhTitle(const tmpQry:TADOQuery;const objDBGridEh:TDBGridEh; const objTableName:string;const objDataSource:TDataSource); var I:Integer; begin with tmpQry do begin //查询字段名前清空上次的查询 Close; SQL.Clear ; SQL.Add('select * from FieldDict where TableName = '+ ''''+objTableName+''''+' order by ShowID '); Open ; I := RecordCount; objDBGridEh.Columns.Clear; while I > 0 do begin objDBGridEh.Columns.Add; I := I-1; end; I := 0; //穷举数据条目,执行添加语句 while not Eof do begin with objDBGridEh.Columns do begin //激活所有列的排序按钮 Items[I].Title.TitleButton := true; //从数据表FieldDict中决定DBGird的所有列属性 Items[I].Visible := False; //开始时,所有列为隐藏 if FieldByName('Show').AsInteger = 1 then begin Items[I].Visible := True; end; Items[I].Title.Caption := FieldByName('Name').AsString ; Items[I].FieldName := FieldByName('Field').AsString ; Items[I].Width := FieldByName('width').AsInteger; if FieldByName('DotSize').AsInteger = 2 then begin Items[I].DisplayFormat := '0.00'; end; if FieldByName('ShowButton').AsInteger = 1 then begin Items[I].AlwaysShowEditButton := True; Items[I].ButtonStyle := cbsEllipsis ; end; if FieldByName('ShowButton').AsInteger = 2 then begin //Items[I].AlwaysShowEditButton := True; //Items[I].ButtonStyle := cbsDropDown ; //Items[I].DropDownBox. //Items[I].LookupDisplayFields := 'billcode'; //Items[I].DropDownShowTitles := True; //Items[I].DropDownSizing := True; //Items[I].DropDownWidth := -1; end; { if STFilter = True then begin Items[I].STFilter.ListSource := objDataSource; Items[I].STFilter.ListField := FieldByName('Field').AsString; objDBGridEh.STFilter.Local := True; objDBGridEh.STFilter.Visible := True; end; } end; I := I + 1 ; //objDBGridEh.Columns.Count-1 可供改进算法的计数参数Count //往下添加 Next; end; Close; end; with objDBGridEh do begin //在属性中, //设置objDBGridEh.OptionsEh.dghautosorting := True后才可以启用排序 SortLocal := True; ColumnDefValues.Title.Alignment := taCenter; //标题居中 end; end; 上面的代码供参考,FieldDict是数据库中的一个记录各个实质数据表的字典表,绝密技术,吐血奉献!
var
i:integer;
list:TStringList;
field:TField;
begin
list := TStringList.Create;
ADOConnection1.GetFieldNames('stuff',list);
ShowMessage(IntToStr(ADOTable1.Fields.Count));
for i := 0 to list.Count - 1 do
begin
field := TField.Create(nil);
field.FieldName := list.Strings[i];
ADOTable1.Fields.Add(field);
..处理field的其它属性,比如类型
end;
ShowMessage(IntToStr(ADOTable1.Fields.Count));
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
list:TStringList;
field:TField;
begin
adodataset1.Close;
adodataset1.CommandText:='select * from kind';list := TStringList.Create;
ADOConnection1.GetFieldNames('kind',list);
for i := 0 to list.Count - 1 do
begin
field := TField.Create(nil);
field.FieldName := list.Strings[i];
adodataset1.Fields.Add(field);
end;
adodataset1.open;end;运行时就出现field '我数据库中的字段名' has no dataset
procedure gsDrawDBGridEhTitle(const tmpQry:TADOQuery;const objDBGridEh:TDBGridEh;
const objTableName:string;const objDataSource:TDataSource);
var
I:Integer;
begin
with tmpQry do
begin
//查询字段名前清空上次的查询
Close;
SQL.Clear ;
SQL.Add('select * from FieldDict where TableName = '+
''''+objTableName+''''+' order by ShowID ');
Open ;
I := RecordCount; objDBGridEh.Columns.Clear;
while I > 0 do
begin
objDBGridEh.Columns.Add;
I := I-1;
end; I := 0;
//穷举数据条目,执行添加语句
while not Eof do
begin
with objDBGridEh.Columns do
begin
//激活所有列的排序按钮
Items[I].Title.TitleButton := true; //从数据表FieldDict中决定DBGird的所有列属性
Items[I].Visible := False; //开始时,所有列为隐藏
if FieldByName('Show').AsInteger = 1 then
begin
Items[I].Visible := True;
end;
Items[I].Title.Caption := FieldByName('Name').AsString ;
Items[I].FieldName := FieldByName('Field').AsString ;
Items[I].Width := FieldByName('width').AsInteger;
if FieldByName('DotSize').AsInteger = 2 then
begin
Items[I].DisplayFormat := '0.00';
end;
if FieldByName('ShowButton').AsInteger = 1 then
begin
Items[I].AlwaysShowEditButton := True;
Items[I].ButtonStyle := cbsEllipsis ;
end;
if FieldByName('ShowButton').AsInteger = 2 then
begin
//Items[I].AlwaysShowEditButton := True;
//Items[I].ButtonStyle := cbsDropDown ;
//Items[I].DropDownBox.
//Items[I].LookupDisplayFields := 'billcode';
//Items[I].DropDownShowTitles := True;
//Items[I].DropDownSizing := True;
//Items[I].DropDownWidth := -1;
end;
{
if STFilter = True then
begin
Items[I].STFilter.ListSource := objDataSource;
Items[I].STFilter.ListField := FieldByName('Field').AsString;
objDBGridEh.STFilter.Local := True;
objDBGridEh.STFilter.Visible := True;
end; }
end;
I := I + 1 ; //objDBGridEh.Columns.Count-1 可供改进算法的计数参数Count
//往下添加
Next;
end;
Close;
end; with objDBGridEh do
begin
//在属性中,
//设置objDBGridEh.OptionsEh.dghautosorting := True后才可以启用排序
SortLocal := True; ColumnDefValues.Title.Alignment := taCenter; //标题居中
end;
end;
上面的代码供参考,FieldDict是数据库中的一个记录各个实质数据表的字典表,绝密技术,吐血奉献!