Cách làm của anh hai2hai giống như cách em đang áp dụng tại cơ quan, nhưng MDBMS là Ms SQL Server trên AD luôn chứ không phải Access và em phân quyền từ Ms SQL Server/ AD. Phía client thì dùng Access làm UI để kết nối vào và thực hiện tất cả công việc trên đó. Chương trình như thế đúng là làm rất nhanh dễ bảo trì và nâng cấp.
Thanh Phong
Chuyện phân quyền, rồi chuyện đa người dùng ko chỉ đơn giản là thực hiện trên MS SQL mà phải thực hiện cả 2 (Data Layer and Business Layer).
Ví dụ:
Có 1 table như sau:
tb_T_Transaction {ID (
PK), TransNo, TransDate, TransType, ... Note}
Table đó chứa tất cả các giao dịch.
Bây giờ ta xét đến cùng 1 loại giao dịch: Ví dụ là 1 Purchase Order (tức: TransType = 'PO')
Vì ID là PK, nên khi tạo mới chứng từ, hoặc khi save chứng từ thì ID đó phải ko được trùng nhau. Nếu ở 2 màn hình cùng mở giao dịch, khi 1 bên save trước thì bên kia ID phải ko được trùng (Dĩ nhiên TransNo có thể ko trùng vì 2 bên cầm 2 chứng từ gốc khác nhau nên ta tạm bỏ qua chuyện trùng đó - mặc dù, chương trình vẫn phải check xem có duplicate hay ko).
Nếu cứ để thông báo mặc định là ID bị trùng thì tệ quá vì giao dịch là thực hiện liên tục, liên tục ở nhiều điểm cách xa nhau (thậm chí 1 nơi là Mỹ, 1 nơi là Nam phi)
Giờ ta lại xét đến vài trường hợp khác:
Giả sử khi phân quyền, có 2 "ông" ở 2 nơi khác nhau (1 ông đang ở cơ quan tại Nam Phi, một ông đang đi công tác bên Mỹ
) cùng có thể xem được 1 loại chứng từ (của cùng 1 đơn vị chứ ko phải của 2 đơn vị riêng biệt) (tức là họ có cùng 1 quyền như nhau). Giờ ta xem xét trường hợp cả 2 "ông" này cùng mở chứng từ có ID là 100 chẳng hạn. Cả 2 ông cùng sửa diễn giải của chứng từ. Dĩ nhiên, nếu ko để ý trường hợp này thì sẽ có 1 ông sửa "1 đằng", kết quả lại ra "1 nẻo" (mà thực chất là ông kia sửa - update sau).
Rồi ta lại xét tiếp, có 1 ông đang mở 1 mặt hàng có mã là "HH001", trong khi ông bên kia thực hiện lệnh "Delete" cái mặt hàng "HH001" đó (Cứ cho là Delete được đi vì HH đó chưa tham gia giao dịch nào cả).
Tiếp tục: Giờ ta lại nói về chuyện quy trách nhiệm, để xem ông nào sửa, ông nào xóa (Ví dụ có ông kế toán trước khi rời khỏi công ty làm "trò mèo" chẳng hạn - Vụ này ở VN là ko hiếm nhé
). Để khôi theo dõi (auditing) được "ông" nào, làm gì, tại thời điểm nào, thực hiện từ đâu (tracked by IP/location), sửa/xóa những dữ liệu nào (dữ liệu trước và sau thay đổi/xóa của từng lần) thì cần phải có 1 công cụ theo dõi vấn đề đó. Và món đó người ta gọi là Log Auditing (giống như Events Logging của Windows ấy). Món này thực hiện trực tiếp trên CSDL cho từng đối tượng để tránh sự truy cập trái phép trực tiếp vào CSDL mà ko thông qua phần mềm.
Sẽ còn nhiều trường hợp liên quan tới Multi-Concurrent Users mà ta sẽ thấy nó chẳng liên quan tới chuyện phân quyền trên MS SQL tý nào cả.