以下是我从网上当来在VB中的解决办法,TADOTable能解决,可我找不到关于GetCommandText的源码进行分析?当你打开Database对象以后,Database对象包括TableDefs集合。这个集合包括数据库中所有表的定义。表的个数为TableDefs.Count。你可以使用TableDefs(0),......,TableDefs(TableDefs.Count - 1)来依次获得各个表的定义(TableDef对象)。你也可以利用For Each ... Next来遍历整个集合。每个TableDef对象都表示一个表的结构,其Name属性就是表名。如果打开一个MDB文件,你可能会得到比实际多的表的个数,这是因为Access数据库中还有一些系统表,这些表通常不会被Access和VB显示出来,但你可以使用VB访问它们。如果你不想让这些系统表出现在你的列表中,可以判断TableDef的Attribution属性,如: 
    IF TableDef(i).Attibution And dbSystemObject Then 
     ' 系统表 
    Else 
     ' 普通的用户表 
    End If 
    得到一个TableDef对象,你可以进一步访问TableDef.Fields集合。这个集合表示有多少个字段,它的每个成员为Field对象,代表一个字段。访问的方法类似TableDefs。每个Field对象有若干个属性,包括字段名、字段类型等。 
    在VB的帮助有相应的例子。另外,我经常象初学者推荐VB的例子VisData(在Samples\VisData目录)。在这个例子中包括很多有用的程序段落。比如在VisData.bas中,GetTableList过程获得所有表名。 
     

解决方案 »

  1.   

    调用ADOConnection的GetTableNames获得
    例子(来源于李维的《Delphi_5.x_分布式多层应用系统篇》):
    procedure TSERVER.GetAllTables(var vtables: olevariant);
    var
      tblist:tstringlist;
      icount:integer;
    begin
      try
        ADOQuery2.
        tblist:=Tstringlist.create;
        ADOConnection1.GetTableNames(tblist);
        vtables:=VarArrayCreate([0,tblist.count-1],varvariant);
        for icount:=0 to tblist.count-1 do
        begin
          vtables[icount]:=tblist.strings[icount];
        end;
      finally
        tblist.free;
      end;
    end;
      

  2.   

    关键语句:
    用户表--〉
    select name from sysobjects where type='u'
    系统表--〉
    select name from sysobjects where type='s'
    所有表你该知道怎么找了吧
      

  3.   

    to koqiuiok(koqiui)
     首先表示感谢。然我知道了SQL server 的一些知识(如果我猜得没错的话,这应该是SQL server 中的系统表吧?)
      其次再问:若像ACCESS 这样的桌面数据库,用SQL语句又是如何来实现呢?
      

  4.   

    SQL呀!select name from sysobjects