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:选择具有特定表名和字段名的所有表的主要内容,如果未能解决你的问题,请参考以下文章

获取一个数据表所有字段名的SQL怎么写

sqlserver 如何获得所有数据库名 如何获得已知数据库所有表名 和 已知表明获得所有字段名和字段类型

oracle中,改变表名和字段名的大小写

SQL注入的简单认识

如何查询一个ACCESS数据库中的表名和字段?

Oracle18获取数据库当前用户下所有表名和表名的注释