仅从特定表打印数据

Print Data From Only Specific Tables

我正在使用 Access VBA 连接到 SQL 服务器并从指定数据库打印出 table 信息。我可以连接,我可以打印出 table 信息没问题。当我添加 IF 语句时,我的代码一直在运行,从未打印出所需的结果。例如,我的 Debug.Print 语句将 return

Test_1
Test_2
Red
Blue

但是,如果我取消注释 if 语句并尝试执行语法,则不会抛出任何错误并且访问会冻结。我想要的结果是打印两个 table 名称,它们是 Like Test* 我的语法应该如何更改才能打印此数据?

Public Sub GetTableNames()
Dim c As ADODB.Connection
Dim r As ADODB.Recordset
Dim f As ADODB.Field
Set c = New ADODB.Connection
With c
.Provider = "sqloledb.1"
With .Properties
    .Item("Data Source") = "server"
    .Item("Initial Catalog") = "database"
    .Item("PassWord") = "password"
    .Item("User ID") = "userid"
End With
.Open
Set r = .OpenSchema(adSchemaTables,Array(Empty, Empty, Empty, "TABLE"))
With r
    While Not .EOF
        'IF (.Fields("Table_Name") LIKE "Test*") THEN
            Debug.Print .Fields("TABLE_NAME"), .Fields("TABLE_TYPE")
            .MoveNext
        'END IF
    Wend
End With
End With
End Sub

你很接近。您的问题不在于 IF 语句,而在于 .MoveNext 的定位 由于该语句位于 IF 块内,因此您永远不会迭代到下一个 table所以每次通过你只看第一个 table。话虽如此,我假设 Blue 是您的第一个 table 名字。

将您的代码更改为此,一切就绪。

Public Sub GetTableNames()
Dim c As ADODB.Connection
Dim r As ADODB.Recordset
Dim f As ADODB.Field
Set c = New ADODB.Connection
With c
.Provider = "sqloledb.1"
With .Properties
.Item("Data Source") = "server"
.Item("Initial Catalog") = "database"
.Item("PassWord") = "password"
.Item("User ID") = "userid"
End With
.Open
Set r = .OpenSchema(adSchemaTables,Array(Empty, Empty, Empty, "TABLE"))
With r
While Not .EOF
    IF (.Fields("Table_Name") LIKE "Test*") THEN
        Debug.Print .Fields("TABLE_NAME"), .Fields("TABLE_TYPE")            
    END IF
    .MoveNext
Wend
End With
End With
End Sub