SQL VBA:选择具有特定表名和字段名的所有表

时间:2017-08-25 07:40:53

标签: sql vba

我正在使用访问和VBA。至于现在,我正在尝试使用SQL语句创建查询。 我有一堆表,所有表都被命名为" innen"最后,他们在开始时变化。这些表中的每一个都包含列名称" OP" (还有其他字段名称)。现在我的目标是选择名称中包含'%innen'的所有表格。和列名" OP"。到目前为止我试过这个:

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语句吗?

1 个答案:

答案 0 :(得分: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可以处理它。那么,为什么不试试看看自己。