我需要创建多个涉及某种UNION的查询。我唯一能弄清楚的办法是在下面。有什么方法可以简化这个过程吗?这样我就不需要为每张桌子建立单独的工会了吗?(我有大约50个表,不想每个表都这样做)--使用Access db
选择Header1,Header2,header 3,header 4
来自score_ADACOMPT
友联市
选择Header1,Header2,header 3,header 4
来自score_ADADESG
友联市
选择Header1,Header2,header 3,header 4
来自Score_API
友联市
选择Header1,Header2,header 3,header 4
来自score_COMPCAC
友联市
选择Header1,Header2,header 3,header 4
来自Score_CRV
友联市
发布于 2014-12-12 19:43:38
我认为用这种方法你会遇到一些障碍。我从未在上面找到过正式文档,但Access一次只能处理这么多UNION操作。这似乎取决于操作和查询的复杂程度。您可以尝试编写VBA来创建UNION查询语法,并查看Access是否能够处理它。如果是的话,那就认为自己是幸运的。
或者,您可以考虑创建一个表来保存这些值,并运行append查询将数据加载到该表中。这有优缺点,取决于应用程序环境,以及您计划在数据组合后对其做什么。
通过DAO TableDefs循环并创建联合查询的示例:
Public Sub TestIt()
BuildUNIONQuery "UNIONTest"
End Sub
Public Sub BuildUNIONQuery(saveQueryName As String)
'builds a large union query for queries starting with "score_" and contains fields: Header1, Header2, header 3, header 4
Dim qryStr As String
Dim tDef As DAO.TableDef
Dim qDef As DAO.QueryDef
Dim db As DAO.Database
Set db = Access.CurrentDb
qryStr = ""
For Each tDef In db.TableDefs
If tDef.Name Like "score_*" Then
qryStr = qryStr & "SELECT [Header 1], [Header 2], [header 3], [header 4] "
qryStr = qryStr & "FROM [" & tDef.Name & "] "
qryStr = qryStr & "UNION "
End If
Next tDef
'remove last UNION from string
If Len(qryStr) > 0 Then
qryStr = Left(qryStr, Len(qryStr) - 6)
End If
If QueryExists(saveQueryName) Then 'query exits update SQL for current item
Set qDef = db.QueryDefs(saveQueryName)
qDef.SQL = qryStr
db.QueryDefs.Refresh
Else
Set qDef = db.CreateQueryDef(saveQueryName, qryStr)
db.QueryDefs.Refresh
End If
End Sub
Public Function QueryExists(qName As String) As Boolean
'determine if query name already exists in the database
Dim qDef As DAO.QueryDef
Dim db As DAO.Database
Set db = Access.CurrentDb
QueryExists = False
For Each qDef In db.QueryDefs
If qDef.Name = qName Then
QueryExists = True
Exit Function
End If
Next qDef端函数
https://stackoverflow.com/questions/27450331
复制相似问题