有两个listbox
1)  listbox1:数据库里面部分表的表名
2)  listbox2:用来显示listBox1中表的所有字段(!!字段名不重复)
3)  接收表名的是ADOTable.name 属性
这如何实现呢

解决方案 »

  1.   

    参考,动态显示ListBoxTables 表中的字段
    ListBoxTables 包含表A,B,C
    ListBoxColumns.Items.Clear;
        for i := 0 to (ListBoxTable.Items.Count - 1) do
        begin
          if ListBoxTable.Selected[i] then
          begin
              with frmdm.qryOpen do
              begin
                   close;
                   sql.Clear;
                   str := format('select syscolumns.name from syscolumns,sysobjects where syscolumns.id = sysobjects.id and  sysobjects.name = ''%s'' order by colid ',[ListBoxTable.Items.Strings[i]]);
                   sql.Add(str);
                   prepared;
                   open;
                   first;
                   while not eof do
                   begin
                       ListBoxColumns.Items.Add(frmdm.qryOpen.fieldbyname('Name').AsString);
                       next;
                   end;
              end;
          end;
        end;
      

  2.   

    这是代码,看着写一个就行了
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, ADODB;type
      TForm1 = class(TForm)
        ListBox1: TListBox;
        ListBox2: TListBox;
        ADOConnection1: TADOConnection;
        ADOQuery1: TADOQuery;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure ListBox1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var ls:TStrings;
    begin
      ADOConnection1.GetTableNames(ListBox1.Items,False);
    end;procedure TForm1.ListBox1Click(Sender: TObject);
    begin
      ListBox2.Clear;
      ADOQuery1.Close;
      ADOQuery1.SQL.Text:='select name from syscolumns where id in '+
        '(select id from sysobjects where name='+
        QuotedStr(ListBox1.Items[ListBox1.ItemIndex])+')';
      ADOQuery1.Open;
      while not ADOQuery1.Eof do
      begin
        ListBox2.Items.Add(ADOQuery1.FieldByName('name').AsString);
        ADOQuery1.Next;
      end;
    end;end.