2012-09-25 107 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設置爲空,所以它將我的查詢添加到最後一個表組。刪除了,現在它按預期工作。謝謝你們的幫助。