Ðề: Đặt password cho Front End bằng VB
Hi, thanks bác trước nhé .
Em đi thẳng vào vấn đề như vậy nè:
Có 3 cách mở 1 database access:
1. Mở từ giao diện tương tác trực tiếp access:
Vào File/Open, chọn file.
Với cách mở này bác có thể open 1 form lên để nhập liệu
2. Mở từ lệnh shell của VBA
call shell (AccessPath + ' ' + DataPath + 1 vài thông số command line nếu cần thiết)
Tuy nhiên chia buồn sâu sắc đến các access DB nào có cài password dạng database password
3. Mở từ giao diện lập trình VBA
Khởi tạo đối tượng: Access.Application
Set AccApp = New Access.Application
Mở DB:
AccApp.OpenCurrentDatabase "DataPath",True,"Database Password"
Tham số thứ 2 = True là mở theo phương thức Exclusive, ngược lại mở theo share DB.
Tuy nhiên chia buồn sâu sắc đến việc mở cái form change password, vì mở theo phương thức này thì bó tay trong việc thực hiện nhập liệu ngoại trừ việc gọi hàm InputBox.
Có hướng rồi. he he....
Bây giờ có 2 cách thiết kế như sau:
Cách 1: Muốn mở cái Form cho người dùng nhập old và new pass, chỉ có thể dùng ứng dụng khác ngoài access, VB6 chẳng hạn
Cài đoạn lệnh sau vào để đổi pass:
Dim accObj as Object
Set accObj = CreateObject("Access.Application")
accObj.OpenCurrentDatabase "DataPath",True,"oldPassword"
accObj.CurrentDb.NewPassword "oldPassword","newPassword"
accObj.CloseCurrentDatabase
Lưu ý: Sẽ có một vài lỗi phát sinh ở đây trong trường hợp data đó đang được mở bởi luồng khác thì ko đổi pass được.
Tại đây bác nên dùng bẫy lỗi rồi sáng tạo như thế nào tùy bác.
Cách xử lý:
Từ access, gọi lệnh shell để mở ứng dụng này lên
Sau đó gọi Application.Quit để thoát ứng dụng Access.
Cách 2: Dùng ứng dụng access
Từ access ứng gọi file access changePass
Dim accObj as New Access.Application
accObj.OpenCurrentDatabase "DataPath",False,"Password"
accObj.DoCmd.OpenForm("Formbatky có gắn timer để gọi lệnh đổi pass", acNormal)
Application.Quit 'Thoat khoi ung dung để thực hiện việc đổi Pass cho nó.
Lúc này ứng dụng thoát nhưng vẫn có 1 ứng dụng khác đang mở file changePass, muốn thấy nó vào TaskManager xem thì có.
Câu hỏi đặt ra ở đây là làm sao để nhập oldpass và newpass, phải nhờ vào InputBox thôi.
Như vậy trong file changePass phải thiết kế 1 Form, Form này thiết lập timer để nó luôn lặp kiểm tra tình trạng file kia đã thực sự dành riêng cho nó chưa.
Trong sự kiện OnTime
Dim oldPass As String
Dim newPass As String
oldPass = InputBox("Nhap old pass")
newPass = InputBox("Nhap new pass")
Set accObj = New Access.Application
accObj.OpenCurrentDatabase "DataPath",True,oldPass
accObj.CurrentDb.NewPassword oldPass,newPass
accObj.CloseCurrentDatabase
Nhớ bắt lỗi để kiểm tra chắc chắn rằng việc đổi pass phải thành công, nếu thành công thì gọi accObj.Quit ngược lại hiển thị câu thông báo cho biết và gọi accObj.Quit, xong rồi chờ cho Ontime kế tiếp.
Ah`, lần đổi đầu tiên ko bao giờ thành công vì cái file mình đang mở, vì vậy phải chờ đến lệnh quit xong và ontime lần 2 thực hiện thì mới ok.
Bác sẽ ko thấy cái ứng dụng nào dưới thanh taskbar, nhưng vẫn có các Message hiện lên yêu cầu bác nhập oldpass và newpass