如何用代码在adodataset  添加所查询的表中的所有字段 ?

解决方案 »

  1.   


    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;
      

  2.   

    为什么我把你的ADOTABLE 改为ADODATASET 就运行不了?
      

  3.   

    我的代码是:
    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
      

  4.   


    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是数据库中的一个记录各个实质数据表的字典表,绝密技术,吐血奉献!