Mình là một Kỹ sư xây dựng đam mê lập trình và hiện đang mò mẫm học C#. Hiện tại em đang viết một tiện ích nhỏ quản lý trong lĩnh vực thi công xây dựng. Với ý tưởng được mô tả rút gọn như ở ví dụ sau (thực tế sẽ đồ sộ hơn như nói ra sợ bị rối):
- Bảng
tbNhansu:
+ ID: Số nhận dạng tên Kỹ sư
+ TenNS: Tên của các Kỹ sư trong công ty
+ Phong: Phòng ban công tác
+ Ghichu: Các ghi chú khác
-Bang
tbCongviec:
+ ID: Số nhận dạng công việc
+ TenCV: Tên của công việc
+ Lytrinh: Lý trình cho công việc
+ KLBV: Khối lượng bản vẽ
+ KLTC: Khối lượng thi công
+ ...
+ NhomNguoi: Số đại diện cho nhóm người
- 1069 = 2^(1-1) + 2^(3-1) + 2^(4-1) + 2^(6-1) + 2^(11-1): Tức các người trong tbNhansu có ID là 1, 3, 4, 6, 11 sẽ thực hiện.
- 8336 = 2^(5-1) + 2^(8-1) + 2^(14-1): Tức các người trong tbNhansu có ID là 5, 8, 14 sẽ thực hiện.
Trước đây nếu dùng thuần Access từ công việc chọn -> Đọc giá trị NhomNguoi -> Truy vấn qua Query qryNhansu sẽ có được danh sanh các người thực hiện
Query qryNhansu như sau:
Mã:
SELECT tbNhansu.* FROM tbNhansu WHERE (((NewXOR([Nhập giá trị đại diện cho nhóm người thực hiện:],[ID]))=True));
Và viết thêm Function trong VBA (Access)
Mã:
Function NewXOR(AssCode As Long, AssSelect As Byte) As Boolean
NewXOR = (AssCode Xor (2 ^ (AssSelect - 1))) < AssCode
End Function
Hiện tại: Mình viết trong C#, muốn truy vấn để hiển thị các giá trị trên lên 1 DataGridView (DataView) nhưng không được. Vì:
- Không biết cách dùng hàm trong Query trong C#
- RowFilter của DataView trong C# không hổ trợ toán tử ^ (Xor trong VBA)
Hỏi diễn đàn:
Cách tổ chức CSDL như trên có hợp lý chưa? Nếu chưa xin tư vấn cách tổ chức lại? Nếu rồi thì làm sao để truy vấn được cho Query?
Mình đính kèm thêm file mô tả thuận toán truy xuất những người được giao nhiệm vụ để mọi người dễ hiểu ý tưởng của mình hơn.
Rất mong nhận được sự giúp đỡ kịp thời từ cộng đồng!