Ứng dụng chạy trong mạng lan
mrsiro > 26-11-17, 08:44 AM
Chào các bạn.
Mình có 1 file ứng dụng access được chia front end và backend. Mình có thiết kế 1 form dùng để chỉnh sửa thông tin của nhân viên, trong form có nút chỉnh sửa. Mình muốn khi 1 client ấn vào nút sửa này thì client khác nếu ấn nút sửa tiếp trên chính record đó sẽ gặp thông báo "nhân viên này đang được chỉnh sửa bởi tài khoản khác", và mình đã tìm ra cách như sau: Tạo 1 table tên là lock, khi client1 ấn nút sửa tự động thêm vào bảng này mã của cái nhân viên đang được sửa kia, khi client2 mở chương trình ấn vào nút sửa thì tự động check trong bảng lock này nếu tồn tại mã nhân viên kia thì hiện thông báo. Đến khi client1 ấn nút lưu thì thực hiện lệnh xóa cái mã nhân viên trong table lock, khi đó client2 mới có thể ấn sửa trên record đó được.
Nhưng đến đây mình gặp vấn đề, mà theo mình nghĩ có lẽ là độ trể của việc thêm record vào bảng lock, tại vì mình test thử nếu client1 ấn nút sửa, thì client2 ấn nút sửa trể hơn khoảng vài % giây thì vẫn sửa được chứ không có hiện lên msgbox. Nếu client2 đợi khoảng vài giây sau khi client1 bấm nút sửa thì mới hiện lên msgbox, hoặc client2 bấm nút refresh (form này mình có thiết kế nút refresh) thì sau đó bấm nút sửa sẽ hiện lên msgbox.
Câu lệnh để check trong bảng lock khi ấn nút sửa mình thiết kế như sau:
If dcount("manv" , "lock", "manv = ' " & me.txt1 & " ' " ) = 1 then
msgbox "thông báo đang được chỉnh sửa"
else
Thực hiện lệnh tiếp theo
Vậy các bạn cho minh hỏi có cách nào cho nó bắt dữ liệu ngay lập tức không, tức là không có độ trể như minh đề cập ở trên.
Và 1 vấn đề nữa là việc thêm nhân viên mới tránh bị trùng khóa chính, ý tưởng của mình là dùng unbound form, khi ấn lưu thì sử dụng lệnh dmax("manv","nhanvien") + 1 như vậy có đảm bảo ko. Nếu bạn nào có cách hay hơn thì giúp mình nhé.
Cho minh cám ơn bạn trước, chúc các bạn sức khỏe.