SQL VBA:选择具有特定表名和字段名的所有表
Posted
技术标签:
【中文标题】SQL VBA:选择具有特定表名和字段名的所有表【英文标题】:SQL VBA: Selecting all tables with specific table name and field name 【发布时间】:2017-08-25 07:40:52 【问题描述】:我正在使用访问和 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 语句吗?
【问题讨论】:
但我不断收到错误。 .... 什么错误?? 在您的问题中,您写道您正在寻找名为OP
的列,但您的第二个查询显示搜索列OP_Datum
。哪一个是正确的?
您有阅读权限吗?检查***.com/questions/1937703/…
是的,它实际上是 OP_Datum,我的坏哈哈。试图让它尽可能简单
你需要使用SQL吗?您还可以使用 VBA 并循环遍历所有 TableDef,然后遍历每个 TableDef 的字段...
【参考方案1】:
这是适合您的 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 可以处理它。好吧,为什么不亲自尝试一下。
【讨论】:
以上是关于SQL VBA:选择具有特定表名和字段名的所有表的主要内容,如果未能解决你的问题,请参考以下文章