用OLEDB,枚举服务器、数据库、表名,得到了表名其他还不是小菜
我做过这个,实现的非常好,不过是VC的,VB应该也差不多

解决方案 »

  1.   

    可以搜索一下啊,这是我搜集的,未经过测试
    列举表名
        Dim adoConnectionX As New ADODB.Connection 
        Dim adoSchemaRecordsetX As New ADODB.Recordset 
        'Ms SQL 7: 
        'adoConnectionX.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Data Source=yuer;DataBase=NorthwindCS" 
        'Access 2000: 
        adoConnectionX.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\DRptPlus\DRptPlus\Data\NWind2K.mdb;Persist Security Info=False" 
        
        Set adoSchemaRecordsetX = adoConnectionX.OpenSchema(adSchemaTables)
        Do until adoSchemaRecordsetX.EOF 
          Debug.Print "Table name: " & _
            adoSchemaRecordsetX !TABLE_NAME & vbCr & _
            "Table type: " & adoSchemaRecordsetX!TABLE_TYPE & vbCr
          adoSchemaRecordsetX.movenext 
          Loop    
        方 法 2(引 用 Microsoft ADO Extensions 2.1 for DDL and Security (ADOX)): 
        ( 需 要 升 级 至 VB 6.0 SP3+) 
        Dim adoConnectionX As New ADODB.Connection 
        'Ms SQL 7: 
        adoConnectionX.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Data Source=yuer;DataBase=NorthwindCS" 
        'Access 2000: 
        'adoConnectionX.Open "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=E:\DRptPlus\DRptPlus\Data\NWind2K.mdb;Persist Security Info=False" 
        
        Dim adoxCatalogX As New ADOX.Catalog 
        Set adoxCatalogX.ActiveConnection = adoConnectionX 
        
        
        Dim adoxTableX As ADOX.Table 
        For Each adoxTableX In adoxCatalogX.Tables 
            debug.print adoxTableX.name 
        Next 
    ----------------------------------------------------------------------
    列举字段
    Dim adoConnectionX As New ADODB.Connection
    'Ms SQL 7:
    'adoConnectionX.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Data Source=yuer;DataBase=Northwind"
    'Access 2000:
    adoConnectionX.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\NWind2K.mdb;Persist Security Info=False"
    Dim adoxCatalogX As New ADOX.Catalog
    Set adoxCatalogX.ActiveConnection = adoConnectionX
    Dim i As Integer
    Dim j As Integer
    For i = 0 To adoxCatalogX.Tables.Count - 1
        If adoxCatalogX.Tables.Item(i).Type = "TABLE" Then
          Debug.Print "[" & adoxCatalogX.Tables.Item(i).Name & "] Contains " & adoxCatalogX.Tables.Item(i).Columns.Count & " Fields!"
          For j = 0 To adoxCatalogX.Tables.Item(i).Columns.Count - 1
              Debug.Print "[" & adoxCatalogX.Tables.Item(i).Name & "].[" & adoxCatalogX.Tables.Item(i).Columns.Item(j).Name & "]"
          Next j
        End If
    Next i 
      

  2.   

    在master数据库中有一个sysdatabases表,表的每行对应一个数据库.
      

  3.   

    多谢各位大侠了,我心中明白了。更进一步,能否取得SQL服务器的名称?
      

  4.   

    列举sql7.0数据库名
    看看http://www.csdn.net/expert/topic/40/40091.shtm
    引用 Microsoft SQLDMO object libary
    Dim SQLServerX As New SQLDMO.SQLServer
    SQLServerX.Connect "sServerName", "sa","" 
    Dim i As Integer
    For i = 0 To SQLServerX.Databases.Count - 1
        Debug.Print SQLServerX.Databases.Item(i + 1).Name
        Debug.Print SQLServerX.Databases.Item(i + 1).PrimaryFilePath
    Next i 
      

  5.   

    如何知道字段类型、大小?是否有类似sysdatabases表记录这些信息?
      

  6.   

    风之子:似乎VB不直接支持oledb,虽然ado也有用到Oledb。
      

  7.   

    经本人实验,发现用SQLDMO很好,我暂时用的sql 6.5,用sqlole(相当于SQLDMO)
    Dim SQLServerX As New SQLOLE.SQLServer
    SQLServerX.Connect "sServerName", "sa","password"
    在SQLServerX.DataBases集合中,数据库名,表名,字段名和类型大小等信息都有