• Xin code vba gọp dữ liệu nhiều file access có cùng cấu trúc lại với nhau.
  • Xin code vba gọp dữ liệu nhiều file access có cùng cấu trúc lại với nhau.

    k2d_nh0k > 27-03-21, 10:51 AM

    Chuyện là mình có nhiều file access có cùng cấu trúc với nhau, mình muốn viết code để gọp lại tất cả làm 1.
    Ví dụ: file DATA1,DATA2,..... GỌP VÀO FILE TẠM DATA.
    Nhờ các cao nhân giúp đỡ.
    Mình có tìm được code của anh ongke0711 nhưng khi sử dụng thì đối với field có data type là number bỏ qua và không gộp.
    Hiện tại mình chưa liên hệ được với ongke0711 nhờ giúp.

    Nhờ mọi người giúp đỡ .

    Mã:
    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

    đường dẫn download file : http://upfile.vn/ImFCKqZCKrBC/gop-file-7z.html
  • RE: Xin code vba gọp dữ liệu nhiều file access có cùng cấu trúc lại với nhau.

    ongke0711 > 27-03-21, 11:40 AM

    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.
  • RE: Xin code vba gọp dữ liệu nhiều file access có cùng cấu trúc lại với nhau.

    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.

    Cảm ơn anh. Do em mới tìm hiểu về Access nên không biết làm như thế nào nhờ anh chỉ giúp.
    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.
    Mong anh nhín chút thời gian giúp đỡ.
  • RE: Xin code vba gọp dữ liệu nhiều file access có cùng cấu trúc lại với nhau.

    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.

    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.

    Còn lý do code trên không cập nhật cho Field có DataType dạng Number là do trong code tôi có dùng code để loại bỏ trường dạng AutoNumber nhưng code này chỉ hoạt động cho DAO chứ không hoạt động trong ADODB. 
    Bạn kiếm dòng code: For Each fld In rsSource.Fields --> sửa lại như bên dưới. Bỏ cụm IF...End If

    Mã PHP:
    For Each fld In rsSource.Fields
         rsDest
    .Fields(fld.Name).Value fld.Value
    Next 
  • RE: Xin code vba gọp dữ liệu nhiều file access có cùng cấu trúc lại với nhau.

    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.

    Cảm ơn anh em sửa code chạy được rồi.
    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)

    Cảm ơn anh vì đã giúp.
  • RE: Xin code vba gọp dữ liệu nhiều file access có cùng cấu trúc lại với nhau.

    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)

    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.
  • RE: Xin code vba gọp dữ liệu nhiều file access có cùng cấu trúc lại với nhau.

    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.

    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.
  • RE: Xin code vba gọp dữ liệu nhiều file access có cùng cấu trúc lại với nhau.

    ongke0711 > 30-03-21, 03:37 PM

    (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.
  • RE: Xin code vba gọp dữ liệu nhiều file access có cùng cấu trúc lại với nhau.

    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.

    Xin lỗi anh nhe. Tại để chung thu mục củ khi giải nén ra trùng tên nên tưởng file gopfile.accdb là file củ.
    Một lần nữa cảm ơn anh nhiều vì đã giúp đỡ.