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

dangtuanson

Member
Hội viên mới
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ũ.
 
Ðề: 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ũ.

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:
 
Ðề: 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:
 
Ðề: 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 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.
 
Sửa lần cuối:
Ðề: 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
 
Sửa lần cuối:
Ðề: 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ũ.

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.
 

CẨM NANG KẾ TOÁN TRƯỞNG


Liên hệ: 090.6969.247

KÊNH YOUTUBE DKT

Cách làm file Excel quản lý lãi vay

Đăng ký kênh nhé cả nhà

SÁCH QUYẾT TOÁN THUẾ


Liên hệ: 090.6969.247

Top