只是传送表的列表不用这么麻烦吧。看下面的代码:
procedure TDynamicSQLDemoServer.GetAllTables(var vTables: string);
var
   tblList :TStringList;
   iCount : Integer;
begin
   try
      tblList:=TStringList.Create;
      adocSQL.GetTableNames(tblList);
      vTables := tblList.CommaText;
   finally
      tblList.Free;
   end;
end;procedure TForm3.Button1Click(Sender: TObject);//点击此按钮时读出SQL Server中Pubs数据库的所有表名
var
   vtblList:string;
   iCount:integer;
begin 
   socketconnection1.Connected :=true;
   socketconnection1.appserver.GetAllTables(vtblList);
   dblistbox1.Items.CommaText := vtblList;
 end;

解决方案 »

  1.   

    use pubs
    go
    select name from sysobjects where type='u'
      

  2.   

    还是提示:socketconnection1.appserver.GetAllTables(vtblList)出错,提示说:Variant is not an array
    在线等待高手!
      

  3.   

    select * from sysobjects where Type='u';
    调整type可以得到所有的sql server的对象的
      

  4.   

    你要确定连接到pubs上;
    select name from sysobjects where type='u'
    type='u'表示用户表,type='s'表示系统表
    或者
    execute sp_tables
    取得比较全面一些
      

  5.   

    试试:
    procedure TForm3.Button1Click(Sender: TObject);//点击此按钮时读出SQL Server中Pubs数据库的所有表名
    var
       vtblList:OleVariant;
       iCount:integer;
       
    begin 
       socketconnection1.Connected :=true;
       socketconnection1.appserver.GetAllTables(vtblList);
       dbListBox1.Items.AddStrings(vtblList);
    end;其中GetAllTables方法的代码是:
    procedure TDynamicSQLDemoServer.GetAllTables(var vTables: OleVariant);
    var
       tblList :TStringList;
       iCount : Integer;
    begin
       try
          tblList:=TStringList.Create;
          adocSQL.GetTableNames(tblList);
          vTables:=vtblList;
       finally
          tblList.Free;
       end;
    end;
     
      

  6.   

    上面的老兄vTables:=vtblList;这句是什么意思啊?
      

  7.   

    adocSQL.GetTableNames(tblList);//得到所有表的名称,并存在tblList里面
    vTables:=vtblList;//把得到的值付给返回的参数
      

  8.   

    可是在上面的程序中没有汲到vtblList,是不是打多一个v啊?
      

  9.   

    怎么可以:vTables:=tblList呢?vTables是OleVariant类型,
    而tblList是TstringList,我试了提示说两个类型不匹配啊?
      

  10.   

    OleVariant可以兼容大多数的数据类型,这一点并没有问题
      

  11.   

    是我弄错了,sorry。
    这一句改为这样试试:
    vTables:=tblList.Text;
      

  12.   

    其实这是李维的《多层应用系统》中的一个例子。主要问题在于GetAllTable方法。我试过的,没有问题。你自己调试一下就知道了。
      

  13.   

    vTables: array [min..max]of olevariant;
    是你的变量申明有问题!
      

  14.   

    你在SQL中写一个存储过程,再在DELPHI是调用不就得了,何必在DELPHI
    中大费力啊。
      

  15.   

    用sql server 中自带的存储过程即可:
    (假如pubs是你的数据库,以下返回pubs中所有的用户表,表名在Table_Name字段中)sp_tables null, dbo, pubs, "'TABLE'"