k2d_nh0k > 27-03-21, 10:51 AM
Option Explicit
Dim DBFile As Variant
Private Sub gopFile_Click()
MergeTables
End Sub
Private Sub MergeTables()
Dim rsDest As New ADODB.Recordset
Dim rsSource As New ADODB.Recordset
Dim fld As ADODB.Field
Dim DBFileList As Collection
Dim SourceTable As String
Dim DestTable As String
Set DBFileList = New Collection
DBFileList.Add "DATA1.accdb"
DBFileList.Add "DATA2.accdb"
DBFileList.Add "DATA3.accdb"
SourceTable = "TBP350A" 'Tên table giông nhau o tat ca cac file DATA 1,2,3
DestTable = "TBP350A"
Set rsDest = GetRecordset("SELECT * FROM " & DestTable & "", "DATA.accdb")
For Each DBFile In DBFileList
Debug.Print "Lay du lieu tu file: " & DBFile
Set rsSource = GetRecordset("SELECT * FROM " & DestTable & "", DBFile)
Do Until rsSource.EOF
rsDest.AddNew
For Each fld In rsSource.Fields
If (fld.Attributes And dbAutoIncrField) = dbAutoIncrField Then
'do nothing - bo qua field AutoNumber
Else
rsDest.Fields(fld.Name).Value = fld.Value
End If
Next
rsDest.Update
rsSource.MoveNext
Loop
rsSource.Close
Next
MsgBox "Thanh cong", vbOKOnly, "Thông báo"
rsDest.Close
Set rsDest = Nothing
Set rsSource = Nothing
End Sub
Function GetRecordset(strSQL As String, DBName As Variant) As ADODB.Recordset
On Error GoTo HandleError
Dim DBPath As String
DBPath = CurrentProject.Path
Dim conn As New ADODB.Connection
If conn.State And adStateOpen = adStateOpen Then conn.Close
With conn
.ConnectionString = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=" & DBPath & "\" & DBName & ";Uid=;Pwd=;"
.Open
End With
Dim rsCont As New ADODB.Recordset
With rsCont
.CursorType = adOpenDynamic
.CursorLocation = adUseClient
.LockType = adLockOptimistic
.Open strSQL, conn
'.ActiveConnection = Nothing
End With
'conn.Close
Set GetRecordset = rsCont
Exit Function
HandleError:
MsgBox "Error: " & Err.Number & vbCrLf & "Description: " & Err.Description
Exit Function
End Function
ongke0711 > 27-03-21, 11:40 AM
k2d_nh0k > 27-03-21, 12:23 PM
(27-03-21, 11:40 AM)ongke0711 Đã viết: Chút nữa rảnh tôi xem lại như thế nào.
Nếu các Table giống y như nhau thì dùng thư viện DAO với câu lệnh INSERT INTO để chèn nguyên gói dữ liệu vào file đích cũng được, khỏi dùng vòng lặp.
ongke0711 > 27-03-21, 12:56 PM
(27-03-21, 12:23 PM)k2d_nh0k Đã viết: Anh xem thêm giúp em trong code chỉ chạy được 3 file DATA1,DATA2,DATA3 thôi. Với trường hợp nhiều file thì phải thêm code nhưng nếu cả 20 file thì phải thêm nhiều lần.
For Each fld In rsSource.Fields
rsDest.Fields(fld.Name).Value = fld.Value
Next
k2d_nh0k > 27-03-21, 04:49 PM
(27-03-21, 12:56 PM)ongke0711 Đã viết:(27-03-21, 12:23 PM)k2d_nh0k Đã viết: Anh xem thêm giúp em trong code chỉ chạy được 3 file DATA1,DATA2,DATA3 thôi. Với trường hợp nhiều file thì phải thêm code nhưng nếu cả 20 file thì phải thêm nhiều lần.
Vậy :
- 20 file .accdb này nằm rải rác hay nằm cùng 1 folder?
- Tên các file này có gì đặt biệt không? được đặt tên tuỳ ý?
- Tên Table trong 20 file này giống nhau hay đặt theo qui ước nào đó?
Thường dữ liệu dạng này nên lưu thành file Text (.CSV) cho gọn nhẹ. Khi tổng hợp thì dùng ADO import vô thôi.
ongke0711 > 27-03-21, 06:23 PM
(27-03-21, 04:49 PM)k2d_nh0k Đã viết: Cho em trả lời câu hỏi của anh ở trên:
- 20 file .accdb nằm cùng 1 folder.
- Tên các file thường có cùng dạng. ví dụ: data1,data2,....,data20.
- Tên các Table của 20 file điều giống nhau.
Do đây là dữ liệu nhận từ công ty nước ngoài và được lưu dưới dạng .accdb, còn em thì không rành về access nên không biết chuyển đổi thành file Text(.CSV)
k2d_nh0k > 30-03-21, 12:00 PM
(27-03-21, 06:23 PM)ongke0711 Đã viết:(27-03-21, 04:49 PM)k2d_nh0k Đã viết: Cho em trả lời câu hỏi của anh ở trên:
- 20 file .accdb nằm cùng 1 folder.
- Tên các file thường có cùng dạng. ví dụ: data1,data2,....,data20.
- Tên các Table của 20 file điều giống nhau.
Do đây là dữ liệu nhận từ công ty nước ngoài và được lưu dưới dạng .accdb, còn em thì không rành về access nên không biết chuyển đổi thành file Text(.CSV)
File của bạn đây. Link: https://www.mediafire.com/file/nbhwyn6mb...s.rar/file
Tôi dùng câu lệnh SQL Insert dữ liệu cho nhanh, không cần dùng ADO.
Chú ý:
- Đây là file làm theo CSDL của bạn, chưa có bẫy lỗi import trùng dữ liệu.
- Qui định là thứ tự và số cột ở toàn bộ các file là giống nhau.
ongke0711 > 30-03-21, 03:37 PM
k2d_nh0k > 30-03-21, 04:08 PM
(30-03-21, 03:37 PM)ongke0711 Đã viết:(30-03-21, 12:00 PM)k2d_nh0k Đã viết: Anh kiểm tra lại giúp em, sao em down về giải nén trong thư mục Data chỉ có 4 file K1,K2,K3,K4.
Ý bạn là sao?
Trong file đó gồm 1 Folder Data và 1 file .accdb.
Folder Data: bạn sẽ chứa tất cả các file .accbd mà bạn cần gộp.
Vậy thôi.