Thủ Thuật Access

Thế Giới Thủ Thuật với Access

Link table từ MDB có password

Posted by Noname on 04.12.2009

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
[B]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[/B]

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

5 phản hồi to “Link table từ MDB có password”

  1. Nguyễn Ngọc Quang said

    Chào anh Noname!Trước đây em sử dụng phầm mềm kế toán Sông đà (dùng cơ sở dữ liệu Access 2000).Trong khi em đi công tác một người cùng làm ở Công ty đã lỡ tay xoá mất phần mềm. Bây giờ em muốn mở cơ sở dữ liệu ra để tìm lại chứng từ kế toán nhưng không mở được (do người lập trình phần mềm đã đặt Pass). Em có thể nhờ anh giúp em cách mở Pass được không?Em đã dùng các phần mềm để gở bỏ Pass nhưng Pass đã được mã hoá hay sao ấy (chỉ tìm thấy hình vuông ở ô Pass thôi).Nếu giúp em thì Thông tin lại cho em biết với.Tên: Nguyễn Ngọc QuangEmail: quang24119@yahoo.comĐT: 0983489021————Cảm ơn anh rất nhiều.

  2. Noname said

    Chào: Cũng tùy người lập trình đặt pass bằng phương pháp nào. Nếu bằng các công cụ thông thường thì bạn có thể dùng tool.Nếu người lập trình cố ý dùng phương pháp mã hóa dữ liệu trước khi lưu thì gần như potay. Nếu là phần mềm có bản quyền thì bạn nên liên hệ tác giả để được tư vấn thếm. Theo mình biết thì tất cả các công ty cung cấp phần mềm đều tư vấn miễn phí!

  3. thuc said

    cho minh hoi khi trong access co mot cai loi lakhi minh dung pass cho chuong trinh cua minh thi sau khi nhap pass roi thi lai hien len mot bang nua minh phai chon open thi moi mo ra
    cho minh hoi co cach nao bo di buoc do dc khong

  4. ncxn said

    Thực ra do bí quá mới áp dụng phương pháp này thôi, nó không thật sự hiệu quả chút nào
    ví dụ nhé:
    – Nếu khi muốn mở backend mà xóa pass đi (trong lúc frontend đang mở) thì nếu lúc ấy người ta mở thẳng backend thì sao, vì backend dùng chung trên ổ mạng và thường là share full với kiểu link table. Như thế đặt pass cho backend cũng như không vfi đường nào thì người ta cũng mở được backend để lấy dữ liệu! Cry
    – Nếu cứ mỗi một sự kiện trong frontend mới gọi thủ tục xóa pass, sau khi kết thúc sự kiện lại set pass trở lại thì cũng không được, vì nhiều người dùng nên set và unset pass liên tục có khi gây lỗi database. Hơn nữa viết thủ tục trong một chương trình mà bất cứ thao tác nào cũng gọi hai thủ tục này ra có vẻ dở hơi lắm.
    —–
    Thật ra trong khi link table có pass thì trong tblSYS của frontend nó lưu lại trong một trường với dữ liệu có dạng password: xxxxx. Vì thế khi mở forntend lên công việc của người viết chương trình là kiểm tra xem link table có pass không và pass này còn đúng không (bằng cách kiểm tra bất cứ 1 kết nối nào nếu trả về false thì ta set pass cho backend đúng như pass lưu trong tbSYS là được.

    • Noname said

      Cảm ơn bạn đã góp ý. Mình sẽ thử cách của bạn xem sao!
      Chúc cuối tuần vui vẻ!
      Nhắn thêm: blog quá ít chức năng để thực hiện 1 cuộc thảo luận!
      Nếu bạn hứng thú đề tài này, mới ghé qua : http://thuthuataccess.co.cc/forum thảo luận Access cùng mình nhé!
      Thân mến!

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

 
%d bloggers like this: