2016-11-01 11 views
0

私はAccess VBAを使用してSQL Serverに接続し、指定されたデータベースからテーブル情報を出力しています。私は接続することができ、私は問題のテーブル情報を印刷することができます。 IFステートメントを追加すると、私のコードは行き来し、決して望みの結果を出力しません。例えば、私のDebug.Print文は特定のテーブルのみからデータを出力

Test_1 
Test_2 
Red 
Blue 

を返します。私は、if文と構文を実行しようとのコメントを解除する場合は、エラーがスローされていないとアクセスは、ちょうど私にフリーズ。私の望む結果は、Like Test*という2つのテーブル名を印刷することです。このデータを印刷するには、どのように構文を変更する必要がありますか?

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 

答えて

0

あなたは近くです。あなたの問題はIFステートメントではなく、.MoveNextの位置にあります。そのステートメントはIFブロックの内側にあるので、次のテーブルを繰り返すことはありません。したがって、それぞれのパスで最初のテーブルだけが見えます。それが言われて、私はBlueがあなたの最初のテーブル名であると仮定します。

コードをこれに変更すると、すべて設定されます。

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 
関連する問題