2017-08-25 12 views
0

imはアクセスとVBAで作業します。今のところ、私はSQLステートメントでクエリを作成しようとしています。 私はテーブルの束を持っています、それらのすべては、最後に "innen"と呼ばれ、彼らは最初に異なります。これらの各テーブルには、列名 "OP"(他のフィールド名)も含まれています。今私の目標は、 '%innen'と列名 'OP'を含む名前のテーブルをすべて選択することです。これまでのところ、私はこれを試してみました:SQL VBA:特定のテーブル名とフィールド名を持つすべてのテーブルを選択します。

Sub Aktuell() 
Dim strSQL As String 
Dim db As DAO.Database 
Set db = CurrentDb 
Dim qdf As QueryDef 

    strSQL = "SELECT [*].OP FROM MSysObjects WHERE TABLE_NAME LIKE '%innen' ORDER BY MAX;" 
    db.Execute strSQL 

    Set qdf = CurrentDb.CreateQueryDef("NewQuery8", strSQL) 
    DoCmd.OpenQuery qdf.Name 

End Sub 

私はaswellここにこれを試してみました:

strSQL = "SELECT * " & _ 
    "FROM INFORMATION_SCHEMA.TABLES " & _ 
    "WHERE COLUMN_NAME = 'OP_Datum';" 

をしかし、私はエラーを得続けます。

アイデア?それはvba経由のSQL文でも動作しますか?

+2

***しかし、私はエラーを取得しています。*** ....どのようなエラー? –

+0

あなたの質問では、あなたは 'OP'という名前の列を探していますが、2番目のクエリは列' OP_Datum'を検索していると書いています。どちらが正しいか? – Arminius

+0

読み取り権がありますか? https://stackoverflow.com/questions/1937703/record-cannot-be-read-no-read-permission-on-msysobjects –

答えて

0

ここはVBAソリューションです。

Option Compare Database 

Function GetFieldList(TableName As String) As String() 
    On Error GoTo Er 
    Dim Flds() As String 
    Dim fc As Long 
    Dim I As Long 

    'Initialize Dynamic Flds() Array 
    Flds = Split("") 
    fc = CurrentDb.TableDefs(TableName).Fields.Count - 1 
    If fc >= 0 Then 
    ReDim Preserve Flds(fc) 
    For I = 0 To fc 
     Flds(I) = CurrentDb.TableDefs(TableName).Fields(I).Name 
    Next I 
    End If 
Done: 

    GetFieldList = Flds 
    Erase Flds 
    Exit Function 
Er: 
    Resume Done 

End Function 

Sub flTest() 
    Dim I As Long 
    Dim Fields As Variant 

    Fields = GetFieldList("Customers") 
    If UBound(Fields) = -1 Then 
    MsgBox "Table Not Found, or Table has no fields", vbCritical + vbOKOnly 
    Exit Sub 
    End If 

    For I = LBound(Fields) To UBound(Fields) 
    Debug.Print """" & Fields(I) & """" 
    Next I 


End Sub 

私はSQL以外のものを使って同じことをする方法があります。しかし、アクセスはユニークな動物です。これはSQL Serverを使用して行うことができます。私は100%アクセスがそれを扱うことができるとは限りません。さて、それを試してみて、自分で見てみましょう。

関連する問題