Chào mừng đến với Diễn đàn Dân Kế Toán - Kế toán tổng hợp thực tế.
Kết quả 1 đến 7 của 7
  1. #1
    Ngày tham gia
    Dec 2015
    Bài viết
    0

    Sao lưu table từ file -> file?

    Tôi đang làm việc (chạy VBA trong file Main.mdb), link đến dữ liệu chứa trong file Data.mdb (trong file này có tablbe với tên XNT). Có sẵn 1 file Backup.mdb trên HDD.
    Để copy table XNT từ Data.mdb sang Backup.mdb có cùng tên table XNT với đoạn code ngắn nhất và thông minh nhất viết trong Main.mdb làm sao đây? Chú ý: Nếu table XNT đã có trong Backup.mdb thì phải hỏi người sử dụng trước khi copy đè lên dữ liệu cũ.

  2. #2
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Sao lưu table từ file -> file?




    Trích dẫn Gửi bởi dangtuanson
    Tôi đang làm việc (chạy VBA trong file Main.mdb), link đến dữ liệu chứa trong file Data.mdb (trong file này có tablbe với tên XNT). Có sẵn 1 file Backup.mdb trên HDD.
    Để copy table XNT từ Data.mdb sang Backup.mdb có cùng tên table XNT với đoạn code ngắn nhất và thông minh nhất viết trong Main.mdb làm sao đây? Chú ý: Nếu table XNT đã có trong Backup.mdb thì phải hỏi người sử dụng trước khi copy đè lên dữ liệu cũ.
    Với cái màu đỏ đỏ đó thì xin thưa không ai dám nói rằng mình đạt đến trình độ đó đâu bạn ạ.

    Còn vấn đề bạn nêu ra thì không thể nào cho là ngắn nhất với không ngắn nhất. Dù gắn đến đâu thì nó cũng phải thực hiện tuần tự những lôgic bắt buộc.

    Tất nhiên tôi cũng có một giải pháp có thể không hay lắm, nhưng hiện thời để nhường sân cho các cao thủ khác, tôi tạm thời chưa nêu giải pháp của mình.

    Cao thủ đâu rồi, vào sân đi thôi. :341:

  3. #3
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Sao lưu table từ file -> file?

    Sub command2_click()
    Msgbox("Dùng Win Explorer mà chép đè lên cả file.mdb cho rồi")
    End sub


    :441:

  4. #4
    Ngày tham gia
    Dec 2015
    Bài viết
    0
    Ðề: Sao lưu table từ file -> file?

    Để xử lý việc hỏi người sử dụng trước khi copy đè lên dữ liệu cũ thì bạn cần thêm hàm kiểm tra sự tồn tại của 1 table trong tệp .MDB
    Giải pháp của tôi như sau:
    Đầu tiền bạn chep hàm kiểm tra sự tồn tại của một table trong một tệp .MDB này vào

    Function fTonTaiBang(TenTep As String, TenBang As String) As Boolean
    Dim db As Database, tb As TableDef
    fTonTaiBang = False
    If TenTep = "" Then 'Neu khong chi ra ten tep .MDB thi kiem tra tren tep hien thoi
    Set db = CurrentDb
    Else
    Set db = OpenDatabase(TenTep)
    End If
    For Each tb In db.TableDefs
    If tb.Name = TenBang Then
    fTonTaiBang = True
    Exit Function
    End If
    Next tb
    End Function

    Còn đây là thủ tục thực hiện yêu cầu của bạn:

    Sub CopyTable(TblName As String, ToMDB As String) 'Copy bang TblName sang tep ToMDB
    Dim st As String
    If fTonTaiBang(ToMDB, TblName) Then
    If MsgBox("Bang " & TblName & " da ton tai. Ban co muon ghi de khong?", vbQuestion + vbYesNo) = vbNo Then Exit Sub
    End If
    st = "SELECT " & TblName & ".* INTO " & TblName & " IN '" & ToMDB & "' FROM " & TblName & ";"
    DoCmd.SetWarnings False
    DoCmd.RunSQL st
    DoCmd.SetWarnings True
    End Sub

  5. #5
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Sao lưu table từ file -> file?




    Trích dẫn Gửi bởi dongnamnb
    Để xử lý việc hỏi người sử dụng trước khi copy đè lên dữ liệu cũ thì bạn cần thêm hàm kiểm tra sự tồn tại của 1 table trong tệp .MDB
    Giải pháp của tôi như sau:
    Đầu tiền bạn chep hàm kiểm tra sự tồn tại của một table trong một tệp .MDB này vào

    Function fTonTaiBang(TenTep As String, TenBang As String) As Boolean
    Dim db As Database, tb As TableDef
    fTonTaiBang = False
    If TenTep = "" Then 'Neu khong chi ra ten tep .MDB thi kiem tra tren tep hien thoi
    Set db = CurrentDb
    Else
    Set db = OpenDatabase(TenTep)
    End If
    For Each tb In db.TableDefs
    If tb.Name = TenBang Then
    fTonTaiBang = True
    Exit Function
    End If
    Next tb
    End Function

    Còn đây là thủ tục thực hiện yêu cầu của bạn:

    Sub CopyTable(TblName As String, ToMDB As String) 'Copy bang TblName sang tep ToMDB
    Dim st As String
    If fTonTaiBang(ToMDB, TblName) Then
    If MsgBox("Bang " & TblName & " da ton tai. Ban co muon ghi de khong?", vbQuestion + vbYesNo) = vbNo Then Exit Sub
    End If
    st = "SELECT " & TblName & ".* INTO " & TblName & " IN '" & ToMDB & "' FROM NXT;"
    DoCmd.SetWarnings False
    DoCmd.RunSQL st
    DoCmd.SetWarnings True
    End Sub
    Chào các Bạn,
    Theo tôi nên viết lại hàm kiểm tra sự tồn tại của 1 bảng xác định như sau:

    Function fTonTaiBang2(TenBang As String, Optional TenTep) As Boolean

    On Error Resume Next 'Nếu có lỗi thì bỏ qua và chạy tiếp

    Dim db As DAO.Database, tb As DAO.Recordset

    fTonTaiBang2 = False

    'Kiểm tra sự tồn tại của File database TenTep (nếu có khai báo) Nếu không tìm thấy thì thoát ra khỏi Function - Không chạy tiếp

    If Not IsMissing(TenTep) Then
    If Len(Dir$(TenTep)) = 0 Then Exit Function
    end If

    'Nếu không khai báo tên file database TenTep

    If IsMissing(TenTep) Then
    Set db = CurrentDb
    Else
    Set db = OpenDatabase(TenTep)
    End If

    'Kiểm tra bằng cách gán biến Recorset tb
    'Nếu Tenbang không tồn tại sẽ phát sinh lỗi (Err > 0)
    'Lúc ấy đẳng thức Err = 0 sẽ có giá trị False
    'Ngược lại sẽ có giá trị True


    Set tb = db.openrecordset(TenBang)
    '
    fTonTaiBang2 = (Err = 0)
    '
    Set tb = Nothing
    Set db = Nothing
    '
    End Function

    Việc chạy vòng lặp For ... Next như Function fTonTaiBang sẽ phải mất nhiều thời gian hơn.

  6. #6
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Sao lưu table từ file -> file?

    Rất cảm ơn anh dongnamnb và anh Hồng Đức đã góp ý cho đề tài này.
    -----------------------------------------------------------------------------------------
    Sub CopyTable(TName As String, Fname as string)
    if Dir$(Fname)="" then Exit sub
    Docmd.Setwarning False
    On Error Goto NoTab
    DoCmd.TransferDatabase acLink, "Microsoft Access", Fname, acTable, Tname, "Son"
    If Msgbox("Đã có dữ liệu, đồng ý copy không?",VbYesNo+256,"Chú ý")= VbNo then Exit sub
    Docmd.DeleteObject acTable,"Son"
    NoTab:
    Docmd.Runsql "Select " & TName & ".* Into " & TName & " In " & Fname & "' From " & TName & ";"
    End sub

  7. #7
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Sao lưu table từ file -> file?




    Trích dẫn Gửi bởi dangtuanson
    Tôi đang làm việc (chạy VBA trong file Main.mdb), link đến dữ liệu chứa trong file Data.mdb (trong file này có tablbe với tên XNT). Có sẵn 1 file Backup.mdb trên HDD.
    Để copy table XNT từ Data.mdb sang Backup.mdb có cùng tên table XNT với đoạn code ngắn nhất và thông minh nhất viết trong Main.mdb làm sao đây? Chú ý: Nếu table XNT đã có trong Backup.mdb thì phải hỏi người sử dụng trước khi copy đè lên dữ liệu cũ.
    Chào các Bạn,
    Nhân dịp ta bàn chuyện sao lưu, xin tham gia 1 kinh nghiệm nhỏ:

    + Với các File hoặc các bảng (table) được chép lưu ta nên đặt tên có kèm theo thời điểm sao lưu để tiện việc tìm kiếm và nhất là xử lý cho phục hồi lại khi cần.

    Thí dụ:
    + Tên file dữ liệu được sao lưu có thể được định dạng bằng dòng code sau:
    Format$(Now(),ddmmhhmm) & ".mdb"
    Chuỗi định dạng "ddmmhhmm" có ý nghĩa là: dd (ngày) mm (tháng) hh (giờ) mm (phút). Hàm Now() cho ta giá trị thời điểm hiện tại tính đến giờ - phút - giây, khác với hàm Date() chỉ cho giá trị thời điểm hiện tại là ngày.
    + Tên table được sao lưu cũng được định dạng tương tự như vậy.

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •