3
我正在尝试创建一个将多个结构相同的数据库连接在一起的Access数据库。这些其他数据库是来自3D模型的导出,它们具有相同的表格,但每个数据都有不同的数据。我需要做的是从所有数据库报告,就像他们是一个大数据库。我以为我会这样做的是创建查询,将来自每个数据库的单个相同表合并成一个查询,然后我可以在所有其他报告中使用这些查询。我写下来一起加入表格的代码如下。我遇到的麻烦是,这段代码在“Set QueryDef ...”行中给我一个堆栈空间错误。有人能告诉我我做错了什么吗?MS在创建查询时访问堆栈空间不足
Public Sub CreateUnionQueries()
'On Error GoTo Err_CreateUnionQueries
Dim QueryRs As DAO.Recordset
Dim TableRs As DAO.Recordset
Dim QueryDef As DAO.QueryDef
Dim SQLText As String
Dim qry As QueryDef
'Get list of all Foreign Table Names
Set QueryRs = CurrentDb.OpenRecordset("select distinct ForeignName from msysobjects where ForeignName is not null")
'Loop over list to create union queries
If QueryRs.RecordCount <> 0 Then
Do While Not QueryRs.EOF
Set TableRs = CurrentDb.OpenRecordset("select Name from msysobjects where ForeignName = """ & QueryRs![ForeignName] & """")
Do While Not TableRs.EOF
SQLText = SQLText & "select * from " & TableRs![Name]
TableRs.MoveNext
If Not TableRs.EOF Then
SQLText = SQLText & " UNION ALL "
End If
Loop
'Create union query
For Each qry In CurrentDb.QueryDefs
If qry.Name = "Q-" & QueryRs![ForeignName] Then
DoCmd.DeleteObject acQuery, "Q-" & QueryRs![ForeignName]
End If
Next qry
Set QueryDef = CurrentDb.CreateQueryDef("Q-" & QueryRs![ForeignName], SQLText)
QueryDef.Close
Set QueryDef = Nothing
QueryRs.MoveNext
TableRs.Close
Set TableRs = Nothing
Loop
Else
MsgBox "No files are linked currently"
End If
QueryRs.Close
Err_CreateUnionQueries:
MsgBox "We have an error"
Set QueryRs = Nothing
Set TableRs = Nothing
Exit Sub
End Sub
有多少个数据库?你确定他们是相同的吗?我用四个数据库和表格运行你的代码,它为我工作,除了缺少Exit Sub。 – Fionnuala
您是否尝试过在所有数据库上运行compact和修复?我认为Out of Stack Space错误可能来自腐败。 – HK1
当你减少while循环循环的时间时会发生什么?我想知道你是否达到工会的上限。对于Jet来说,查询太大也是可能的。你可以添加一个debug.print语句到SQLText并发布完整的查询吗? – dmarra