Tìm thủ thuật nhanh hơn với chức năng tìm trong Blog

12/4/09

Link table từ MDB có password

TransferDatabase to open password protect database

Question : Tôi xây dựng chương trình có 2 file: 1 file để thực hiện các thao tác trên FORM và xử lý thông tin (DBSYS.mdb) và 1 file để lưu trữ dữ liệu(DBDATA.mdb)
- Để cho người khác không thể vào được các dữ liệu lưu trữ, tôi đặt pass vào file DBDATA.
- Tôi tạo biến về đường dẫn để có thể tùy ý người sử dụng thay đổi thư mục của chương trình. Khi thay đổi thư mục của chương trình, thì sẽ tự tạo lại các link đến các table trong DBDATA.
Vấn đề là: để thực hiện các lệnh link thì phải gõ pass. Nhưng mỗi một lệnh linktable, lại phải gõ pass một lần.
Các PRO xem có cách nào giúp tôi: đặt sẵn và dùng VBA tại file chính (DBSYS) có thể link table từ DBDATA mà không cần phải gõ pass không (chỉ có sử dụng lệnh trong DBSYS mới không yêu cầu pass, còn các hình thức khác đều yêu cầu pass)



Reply:
Đầu tiên bạn kết nối với file ở dạng exclusive :

Dim TempDb as Database
Dim P as String ' Password
P= "mypassword"
Set tempDB = OpenDatabase(CurrentProject.Path & "\" &  "DBDATA.MDB", True, False, "MS Access;PWD= " & p)


Sau đó xóa pass đi

tempDB.NewPassword p, ""
tempDB.Close

Tiến hành liên kết table:
DoCmd.TransferDatabase acLink, "Microsoft Access", CurrentProject.Path & "\" &"DBDATA.MDB", acTable, "TableName", "Tablename"

'Sau đó set password lại cho file Data

Set tempDB = OpenDatabase(CurrentProject.Path & "\" & "DBDATA.MDB", True, False)
tempDB.NewPassword "", p
tempDB.Close
Set tempDB = Nothing



Chú ý : Khi sử dụng chương trình thì phải unSet Password đi. Và khi sử dụng xong hoặc có lỗi ta sẽ setPassword trở lại:
Bạn tạo  thủ tục 1
Sub setPass(oldPass as String, newPass As String)
Set tempDB = OpenDatabase(CurrentProject.Path & "\" & "DBDATA.MDB", True, False, "MS Access;PWD=" & oldPass)
tempDB.NewPassword oldPass, NewPass
tempDB.Close
End Sub


Như Vậy, khi cần xài dữ liệu, bạn gọi : setPass mypassword, "" mục đích xóa pass của file đi
Và khi sử dụng xong hoặc chương trình có lỗi, bạn nhớ setPass trở lại password gốc setPass  "", mypassword
Xem Demo