(22-05-20, 12:59 PM)ongke0711 Đã viết: (22-05-20, 10:13 AM)yamakashi2003 Đã viết: Vấn đề này bác hiểu sai rồi, trc chính bác chỉ e dùng BE và FE, nhưng e hỏi cách 1 file acces mở nếu bỏ vào mạng lan vì trc đây e có nghịch linh tinh gì đó và 1 file chỉ 1 máy mở, máy khác mở sau bị báo lock, hoặc cũng có thể do IT cty em cài về mạng lan nên nó báo thế chứ k phải do em cài access
Muốn thực hiện khoá file cũng có thể được thông qua mấy cái thủ thuật, tôi chưa làm cách này bao giờ vì không có nhu cầu.
- Có 1 table lưu thông tin số người đang mở ứng dụng. Ví dụ: table có 1 field [UserOnline]
- Khi mở ứng dụng thường sẽ kiểm tra cái table với field [UserOnline] xem =1 hay = 0, nếu = 0 thì tiếp tục mở, còn = 1 thì Docmd.Quit.
- Khi người dùng mở được ứng dụng, sẽ Update [UserOnline]=1.
- Khi người dùng thoát được ứng dụng, sẽ Update [UserOnline]=0.
Thủ thuật field UserOnline phải đưa giá trị của field này lên form login và hạn chế rất lớn cho việc sử dụng chương trình. chỉ có một người mở được chương trình, thì tất cả sẽ không sử dụng được ngoài người đó. Tùy theo trường hợp có thể xử lý:
Xử lý form nhập liệu: Đây cũng là phương pháp không chính thống giống như field UserOnline đưa vào field login, nhưng không giống như vậy mà đưa vào table của form nhâp liệu. Khi mở form nếu chưa có ai mở thì sẽ update field UserOnline bằng tên user, khi đóng form đúng user thì nó sẽ update là rỗng. Khi user đầu tiên mở form sẽ có đầy đủ quyền với tất cả record của table, các user mở form sau chỉ có quyền xem. Xử lý cách nầy hơi phức tạp, do sẽ có nhiều máy đươc mở nên phải có nhiều field user 1,2,3,4... và code thay đổi giá trị user của các field để chuyển quyền ưu tiên về field user đầu tiên, nếu chưa có kinh nghiêm viết code rất dễ bị rối.
Phương pháp chính thống: Chiến lược khóa mẫu tin đúng bài Microsoft: (Chỉ sử dụng với Form có record source) thiết đặt RecordLock
1/ No Locks: Dữ liệu không được khóa cho đến khi form thử ghi một thay đổi record cùng lúc một user khác tác động lên cùng 1 record, do No Locks nên cả 2 đều có quyền sửa đổi record. Khi người thứ nhất sửa và lưu lại record thì không có gì xảy ra, nhưng người thứ 2 sửa và lưu lại thì sẽ xuất hiện thông báo write conflict với 3 chọn lựa: save record (lưu theo người thứ 2), Copy to cclipboard (lưu thay đổi người thứ 2 vào bộ nhớ đệm hiển thị sự thay đổi của người thứ nhất), Drop Changes (bỏ qua sự thay đổi của người thứ 2). Lý thuyết là vậy nhưng tôi đã có một chương trình chấm thi võ thuật (thi biểu diễn quyền) với 5 giám khảo, tất nhiên record có tên thí sinh điểm GK1, điểm GK2, điểm GK3... và 5 giám khảo cùng update record trên field điểm riêng của mình. kết quả sau khi hiện thông báo write conflict, mấy cái máy đứng luôn cuối cùng đành chấm bằng cách giơ bảng điểm và chỉ cho một thư ký nhập điểm.
2/ All Records: Cơ chế này khi user đầu tiên mở form ra thì user đó toàn quyền với record source. Những user mở ra sau đó sẽ thấy tất cả record bị khóa và chỉ được xem.
3/ Editted Record: Tại một thời điểm chỉ cho phép duy nhất môt user toàn quyền với record, những user khác chỉ có quyền xem. Ví dụ một form lý lịch sinh viên. user thứ nhất làm việc với record sinh viên A, user thứ 2 khi chuyển đên sinh viên A sẽ thấy record bị khóa nên chỉ được xem khi chuyển đến sinh viên B sẽ thấy không khóa và có toàn quyền với record này. Trong lúc đó user thứ nhất di chuyển đến sinh viên B thì sẽ thấy record này bị khóa vì user thư 2 đã chiếm quyền trước
Editted Record: không khóa 1 record mà sẽ khóa 1 trang record, Single Form 1 trang record là 1 record, Continuous Forms và Datasheet Form một trang record là tất cả cá record hiển thị trên form của user chiếm quyền.
Chế độ khóa record hiển thị trên phần Record Selector: Không có gì là record tự do, Hình tam giác mũi nhọn quay về phía record Current Record có toàn quyền xử lý (sửa, xóa), hinh tròn có gạch chéo record đã bị user khác khóa.