同じデータベース構造を持つ 60 個の MS Access ファイルがあります。各データベースから関連している 2 つのテーブルからデータを取得して、これらの 60 ファイルのすべてのレコードを含む 1 つのデータベースを作成したいと考えています。これらすべての MS Access ファイルをマージする簡単な方法はありますか?
質問する
3649 次
1 に答える
3
私の理解が正しければ、60 個のデータベース ファイルにまたがる同一のテーブルがあり、それらの集計を自動化する方法を検討していると思います。
これを行うには、いくつかの方法があります。それはおそらくあなたの状況に依存します。2 つの異なるアプローチを示しました。
最初の方法は簡単です。各クエリにデータベース名を代入して、静的クエリを作成するだけです。詳細が単純化されている場合は、これでうまくいくはずです。
2 番目の方法では、DAO を使用して各データベースの各テーブルを開き、データを現在のデータベースに書き込みます。この方法は、1 回限りの例外があり、インテリジェンスを追加する必要がある場合に役立ちます。
Public Sub SimpleCombine()
Dim DBFileList As Collection
Dim DBPath As String
Dim ForeignTableName As String
Dim LocalTableName As String
Dim dbfile As Variant
' Configure
Set DBFileList = New Collection
DBFileList.Add "Test1.accdb"
DBFileList.Add "Test2.accdb"
DBPath = CurrentProject.Path ' (No Trailing Backslash)
ForeignTableName = "Fruit"
LocalTableName = "Fruit"
For Each dbfile In DBFileList
querystr = "INSERT INTO Fruit (FruitName, FruitValue) " & _
"SELECT FruitName, FruitValue " & _
"FROM Fruit IN '" & DBPath & "\" & dbfile & "'"
Debug.Print "Transferring Data From " & dbfile
CurrentDb.Execute querystr
DoEvents
Next
End Sub
例 #2
Public Sub DAOCombine()
Dim DBFileList As Collection
Dim DBPath As String
Dim ForeignTableName As String
Dim LocalTableName As String
Dim db As DAO.Database
Dim rst, drst As DAO.Recordset
Dim fld As DAO.Field
' Configure
Set DBFileList = New Collection
DBFileList.Add "Test1.accdb"
DBFileList.Add "Test2.accdb"
DBPath = CurrentProject.Path ' (No Trailing Backslash)
ForeignTableName = "Fruit"
LocalTableName = "Fruit"
Set drst = CurrentDb.OpenRecordset(LocalTableName)
For Each dbfile In DBFileList
Debug.Print "Transferring Data From " & dbfile
Set db = DBEngine.Workspaces(0).OpenDatabase(DBPath & "\" & dbfile)
Set rst = db.OpenRecordset(ForeignTableName)
Do Until rst.EOF
drst.AddNew
For Each fld In rst.Fields
If (fld.Attributes And dbAutoIncrField) = dbAutoIncrField Then
' We have an autonumber field - lets skip
Else
drst.Fields(fld.Name).Value = fld.Value
End If
Next
drst.Update
rst.MoveNext
Loop
rst.Close
DoEvents
Next
drst.Close
Set rst = Nothing
Set drst = Nothing
End Sub
特定の状況に合わせてコードを調整する必要がありますが、うまくいくはずです。
于 2013-10-21T14:40:46.910 に答える