2012-09-25 108 views
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 
+0

有多少个数据库?你确定他们是相同的吗?我用四个数据库和表格运行你的代码,它为我工作,除了缺少Exit Sub。 – Fionnuala

+0

您是否尝试过在所有数据库上运行compact和修复?我认为Out of Stack Space错误可能来自腐败。 – HK1

+0

当你减少while循环循环的时间时会发生什么?我想知道你是否达到工会的上限。对于Jet来说,查询太大也是可能的。你可以添加一个debug.print语句到SQLText并发布完整的查询吗? – dmarra

回答

0

哦,我是个白痴。发现问题。当我循环时,我没有将SQLText设置为空,所以它将我的查询添加到最后一个表组。删除了,现在它按预期工作。谢谢你们的帮助。