代码如下:
Dim tn$
Set tablename = maincn.OpenSchema(adSchemaTables)
Do Until tablename.EOF
tn = tablename!table_name
If tn = "..表" Then
...
End If
tablename.MoveNext
Loop
这段代码在安装SQL服务器上机器上执行时未见异常,但在客户端机器 上运行时会出现一个"类型错误"的提示.参阅相关文档,有如下的说明:
远程数据服务用法   OpenSchema 方法在客户端 Connection 对象上无效。
注意   在 Visual Basic 中,在由 Connection 对象的 OpenSchema 方法所返回的 Recordset 中有 4 字节无符号整型 (DBTYPE UI4) 的列无法与其他变量比较。有关 OLE DB 数据类型的详细信息,请参阅“Microsoft OLE DB 程序员参考”的第十章和附录 A。
不知如何理解!请各位高手给我一个解决的方法.谢谢!

解决方案 »

  1.   

    Query = " Select * from sysobjects where xtype='U'"
    使用这种方式
    rs.open Query,conn
      

  2.   

    strSql= " Select * from sysobjects where xtype='U' and name='你要的表名'"
      

  3.   

    sysobjects 是系统对象表
    里面保存了包括表、存储过程等对象,其中对TYPE字段代表对象类型,NAME代表对象名称
    用户表的类型为'U'
      

  4.   

    好象不行哦.程序提示tn = tablename!table_name
    这一行"对象未能发现"这种错误!
      

  5.   

    你是咋写的?Dim tn$
    dim maincn as new adodb.connection
    dim tablename as new adodb.recordset
    Set tablename = maincn.execute("Select * from sysobjects where xtype='U'")
    或者
    tablename.open "Select * from sysobjects where xtype='U'",maincn,1,3
    Do Until tablename.EOF
    tn = tablename.fields("name")
    If tn = "..表" Then
    ...
    End If
    tablename.MoveNext
    Loop
      

  6.   

    是不是这个问题
    系统对象表在master库中。所以连接的数据库应是master。
      

  7.   

    代码如下:
    Dim tn$
    Set tablename = maincn.OpenSchema(adSchemaTables)
    Do Until tablename.EOF
    tn = tablename!table_name
    If tn = "..表" Then
    ...
    End If
    tablename.MoveNext
    Loop楼主写的是在access中取得表名的方法
    但你实际使用的显然是sql server,在sql server中要取得表名要用online的方法
    sysobjects是sql server的数据库中的一个系统表,访问它可以得到你想要的表名。