3

複数の構造的に同一のデータベースをリンクする Access データベースを作成しようとしています。これらの他のデータベースは、同一のテーブルを持つ 3D モデルからエクスポートされたものですが、それぞれに異なるデータがあります。私がする必要があるのは、1 つの大きなデータベースであるかのように、すべてのデータベースからレポートすることです。これにどのようにアプローチするかを考えたのは、各データベースの個々の同一テーブルを 1 つのクエリに結合するクエリを作成し、それを他のすべてのレポートで使用できるようにすることでした。テーブルを結合するために私が書いたコードは以下のとおりです。私が遭遇している問題は、このコードにより、「Set QueryDef...」行でスタック領域不足エラーが発生することです。誰かが私が間違っていることを教えてもらえますか?

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
4

1 に答える 1

0

ああ、私はばかです。問題が見つかりました。ループしているとき、SQLText を空に戻していなかったので、テーブル グループのクエリを最後に追加していました。それを削除したところ、期待どおりに動作するようになりました。助けてくれてありがとう。

于 2012-10-03T15:04:40.230 に答える