2016-11-01 2 views
0

Ich verwende Access VBA, um eine Verbindung mit SQL Server herzustellen und Tabelleninformationen aus einer angegebenen Datenbank auszugeben. Ich kann eine Verbindung herstellen, und ich kann Tabelleninformationen problemlos ausdrucken. Wenn ich eine IF Anweisung hinzufüge, geht mein Code einfach und geht und druckt nie das gewünschte Ergebnis aus. Zum Beispiel wird wieder meine Debug.Print AussageDrucken von Daten aus nur bestimmten Tabellen

Test_1 
Test_2 
Red 
Blue 

jedoch, wenn ich die Kommentar- if-Anweisung und Versuch, die Syntax auszuführen, wird kein Fehler geworfen und Zugang friert nur auf mich. Mein gewünschtes Ergebnis ist, die zwei Tabellennamen zu drucken, die Like Test* sind. Wie soll meine Syntax geändert werden, damit diese Daten gedruckt werden?

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 

Antwort

0

Sie sind in der Nähe. Ihr Problem ist nicht mit der IF Aussage, es ist mit der Positionierung der .MoveNext Da diese Aussage innerhalb der IF Block ist, Sie sind nie auf die nächste Tabelle, so dass jeder Durchlauf Sie nur auf die erste Tabelle. Ich nehme an, dass Blue Ihr erster Tabellenname ist.

Ändern Sie Ihren Code und Sie werden fertig sein.

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 
Verwandte Themen