Chào mọi người,
Lần này lại phải nhờ mọi người giúp đỡ nữa rồi. Hơn nữa mình lại cần gấp vì đây là phần cuối cùng mình làm cho 1 chương trình viết bằng Access.
Link download file ở đây:
http://www.mediafire.com/file/gmg2mznnlht/password.mdb
File này mình gặp khó khăn về đổi password.
File có 3 table:
tblUser chứa thông tin về tất cả người sử dụng chương trình như mã người dùng, tên người dùng, mật mã, quyền sử dụng và ngày đổi password.
tblCurrentUser ghi nhận mã người dùng đã đăng nhập trong phiên hiện tại.
tblMsgBoxUnicode để mã hóa unicode tiếng Việt cho các msgbox.
Có 2 query:
QryCurrentUser để lấy thông tin về người dùng đã đăng nhập trong phiên hiện tại.
QryDeleteCurrentUser để xóa mã người dùng trong tblCurrentUser (và sau đó dùng lệnh VBA để insert mã người dùng hiện tại vào tblCurrentUser)
Có 3 form:
Đầu tiên mở frmLogon lên để nhập tên người dùng và mật mã. Form này không có vấn đề gì.
Sau đó khi click nút Đăng nhập chương trình sẽ đóng frmLogon và mở frmChangePassword nếu password đã sau 4 tuần chưa được đổi, hoặc mở frmSplashUser nếu chưa đến thời hạn 4 tuần.
frmSplashUser chỉ dùng để minh họa chứ không có tác dụng gì cả.
Vấn đề mình gặp phải là không đổi được password bằng frmChangePassword.
Trong form này, người dùng sẽ phải nhập password hiện tại, sau đó nhập password mới và nhập lại lần nữa để kiểm tra.
Nếu nhập đúng password hiện tại, password mới không trùng password hiện tại và nhập lại đúng password mới thì sẽ hiện 3 dấu tick. Khi đó click nút Lưu thì password hiện tại sẽ được thay thế bằng password mới (trong txtMatMaMoi). Còn nếu hiện không đủ 3 dấu tick thì click nút Lưu cũng không đổi password được.
Tuy nhiên khi đã hiện đủ 3 dấu tick mình cũng không thể đổi được password vì khi test thử thì đoạn mã này bị báo lỗi:
Dim db As DAO.Database, SQL As String, rCount As Integer
Set db = CurrentDb()
SQL = "UPDATE tblUser SET MatMa = " & txtMatMaMoi.Text & " WHERE MaNguoiDung = " & NguoiDungHienTai.Text & ""
db.Execute SQL, dbFailOnError
rCount = db.RecordsAffected
'Kiem tra xem mat ma da duoc doi chua
If rCount > 0 Then
MsgBox "Doi mat ma thanh cong"
End If
Ngoài lỗi này là nghiêm trọng nhất thì còn những lỗi khác nữa:
Trong code VBA mình đã viết để người dùng bắt buộc phải nhập mật mã hiện tại trước rồi mới đến mật mã mới và cuối cùng là nhập lại mật mã mới. Tuy nhiên khi test thử thì thấy không có tác dụng. Người dùng vẫn có thể nhập cái gì trước cũng được, không bị ép theo thứ tự (chỉ có điều phải click OK cho mấy cái thông báo Chưa nhập mật mã).
(mình không hiểu sao mấy cái SetFocus không có tác dụng ép người dùng trở lại textbox vừa lost focus. Ví dụ lúc đầu đang focus ở txtMatMaHienTai nhưng mình click vào txtNhapLai thì có báo lỗi chưa nhập mật mã ở txtMatMaHienTai. Tuy nhiên mình không bị đưa về txtMatMaHienTai mà vẫn ở txtNhapLai.)
Thứ hai là khi người dùng nhập cái gì trước cũng được thì sau một hồi khi focus vào 1 textbox nào đó nhiều khi lại không được mà lại bị lỗi focus sai tùm lum.
Cuối cùng là nếu người dùng muốn thoát khỏi form bằng nút X trên caption của form thì sẽ có báo lỗi Chưa nhập mật mã. Mình không biết làm thế nào để msgbox này không hiện ra nếu người ta muốn thoát (mà vẫn đảm bảo lúc đổi password khi textbox nào đó trống thì vẫn có thông báo Chưa nhập mật mã).
Mong các bạn có thể giúp mình sớm, vì mình đang rất cần. Sắp đến hạn chót rồi.
Lần này lại phải nhờ mọi người giúp đỡ nữa rồi. Hơn nữa mình lại cần gấp vì đây là phần cuối cùng mình làm cho 1 chương trình viết bằng Access.
Link download file ở đây:
http://www.mediafire.com/file/gmg2mznnlht/password.mdb
File này mình gặp khó khăn về đổi password.
File có 3 table:
tblUser chứa thông tin về tất cả người sử dụng chương trình như mã người dùng, tên người dùng, mật mã, quyền sử dụng và ngày đổi password.
tblCurrentUser ghi nhận mã người dùng đã đăng nhập trong phiên hiện tại.
tblMsgBoxUnicode để mã hóa unicode tiếng Việt cho các msgbox.
Có 2 query:
QryCurrentUser để lấy thông tin về người dùng đã đăng nhập trong phiên hiện tại.
QryDeleteCurrentUser để xóa mã người dùng trong tblCurrentUser (và sau đó dùng lệnh VBA để insert mã người dùng hiện tại vào tblCurrentUser)
Có 3 form:
Đầu tiên mở frmLogon lên để nhập tên người dùng và mật mã. Form này không có vấn đề gì.
Sau đó khi click nút Đăng nhập chương trình sẽ đóng frmLogon và mở frmChangePassword nếu password đã sau 4 tuần chưa được đổi, hoặc mở frmSplashUser nếu chưa đến thời hạn 4 tuần.
frmSplashUser chỉ dùng để minh họa chứ không có tác dụng gì cả.
Vấn đề mình gặp phải là không đổi được password bằng frmChangePassword.
Trong form này, người dùng sẽ phải nhập password hiện tại, sau đó nhập password mới và nhập lại lần nữa để kiểm tra.
Nếu nhập đúng password hiện tại, password mới không trùng password hiện tại và nhập lại đúng password mới thì sẽ hiện 3 dấu tick. Khi đó click nút Lưu thì password hiện tại sẽ được thay thế bằng password mới (trong txtMatMaMoi). Còn nếu hiện không đủ 3 dấu tick thì click nút Lưu cũng không đổi password được.
Tuy nhiên khi đã hiện đủ 3 dấu tick mình cũng không thể đổi được password vì khi test thử thì đoạn mã này bị báo lỗi:
Dim db As DAO.Database, SQL As String, rCount As Integer
Set db = CurrentDb()
SQL = "UPDATE tblUser SET MatMa = " & txtMatMaMoi.Text & " WHERE MaNguoiDung = " & NguoiDungHienTai.Text & ""
db.Execute SQL, dbFailOnError
rCount = db.RecordsAffected
'Kiem tra xem mat ma da duoc doi chua
If rCount > 0 Then
MsgBox "Doi mat ma thanh cong"
End If
Ngoài lỗi này là nghiêm trọng nhất thì còn những lỗi khác nữa:
Trong code VBA mình đã viết để người dùng bắt buộc phải nhập mật mã hiện tại trước rồi mới đến mật mã mới và cuối cùng là nhập lại mật mã mới. Tuy nhiên khi test thử thì thấy không có tác dụng. Người dùng vẫn có thể nhập cái gì trước cũng được, không bị ép theo thứ tự (chỉ có điều phải click OK cho mấy cái thông báo Chưa nhập mật mã).
(mình không hiểu sao mấy cái SetFocus không có tác dụng ép người dùng trở lại textbox vừa lost focus. Ví dụ lúc đầu đang focus ở txtMatMaHienTai nhưng mình click vào txtNhapLai thì có báo lỗi chưa nhập mật mã ở txtMatMaHienTai. Tuy nhiên mình không bị đưa về txtMatMaHienTai mà vẫn ở txtNhapLai.)
Thứ hai là khi người dùng nhập cái gì trước cũng được thì sau một hồi khi focus vào 1 textbox nào đó nhiều khi lại không được mà lại bị lỗi focus sai tùm lum.
Cuối cùng là nếu người dùng muốn thoát khỏi form bằng nút X trên caption của form thì sẽ có báo lỗi Chưa nhập mật mã. Mình không biết làm thế nào để msgbox này không hiện ra nếu người ta muốn thoát (mà vẫn đảm bảo lúc đổi password khi textbox nào đó trống thì vẫn có thông báo Chưa nhập mật mã).
Mong các bạn có thể giúp mình sớm, vì mình đang rất cần. Sắp đến hạn chót rồi.