2017-08-25 157 views
0

即時通訊工作與訪問和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 

我想這藏漢這裏:

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

但我不斷收到錯誤。

任何想法?它甚至可以通過vba使用sql語句嗎?

+2

***但我不斷收到錯誤*** ....有什麼錯誤? –

+0

在你寫的問題中,你正在尋找一個名爲'OP'的列,但是你的第二個查詢顯示了對'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之外的其他功能。雖然,Access是一種獨特的動物。您可以使用SQL Server執行此操作。我不是100%確定Access可以處理它。那麼,爲什麼不嘗試一下,看看自己。

相關問題