huymcsa > 05-02-16, 01:44 PM
ongke0711 > 07-02-16, 02:48 AM
huymcsa > 07-02-16, 04:19 PM
(07-02-16, 02:48 AM)ongke0711 Đã viết: Việc chọn tên thiết bị và lưu mã thiết bị chỉ là 1 thủ thuật hiển thị trong combobox thôi bạn à (thao tác trong Properties).
- Nguyên tắc combo box chỉ lưu cột chỉ mục (field index) như mã thiết bị.
- Khi bạn thiết kế thường Row source sẽ là Select Query có 2 cột (Mã thiết bị, tên thiết bị).
- Mặc định Bound Column của combobox sẽ là 1 (tức lấy 1 cột đầu tiên để lưu giá trị).
- Để chỉ hiển thị tên thiết bị thì cột đầu tiên [Mã thiết bị] bạn set độ rộng =0, [Tên thiết bị] bạn set độ rộng tuỳ ý đủ để hiển thị. Vd: Column widths: 0";1".
(Nhớ set Column count:2)
Về file thiết kế của bạn, bạn sử dụng Multi Value Fields (MVFs) cho cột [Mã thiết bị] ở tblBanGiaoThietBi và khi click chọn ở combobox Mã thiết bị thì bạn sẽ chọn được nhiều giá trị trong cái list xổ xuống của combobox. Cái MVFs này theo tôi thì không nên dùng vì sẽ rất phức tạp sau này khi code cho nó và khi bạn muốn truy vấn (Query) theo từng [Mã thiết bị] cũng rất khó khăn. Cái này cũng sẽ làm cho CSDL của bạn cũng không còn chuẩn hoá khi tạo các Relationship giữa các table.
MVFs này chỉ có từ Access 2007 trở đi và nó cũng không được hỗ trợ từ các hệ thống CSLD khác như MySQL, SQL server v.v...Do vậy sau này bạn mà muốn nâng cấp lên hệ CSDL khác cũng không được nhé.
Theo tôi hiểu ý đồ của bạn thì muốn hiển thị tất cả các thiết bị trong cùng 1 ô (cột) cho gọn. Vậy bạn nên làm ở trong phần báo cáo (Report) thôi, phần table bạn phải lưu cho chuẩn, mỗi mã thiết bị cho mượn là 1 dòng. Về gộp mã thiết bị trong report, thực ra theo tôi cũng không phải cách hay cho việc báo cáo, theo dõi, cứ liệt kê ra từng dòng là dễ kiểm tra nhất.
ongke0711 > 07-02-16, 06:57 PM
SELECT tblBanGiaoThietBi.NgayGiao, tblBanGiaoThietBi.MATB, tblDSThietBi.TenTB
FROM tblDSThietBi RIGHT JOIN tblBanGiaoThietBi ON tblDSThietBi.MATB = tblBanGiaoThietBi.MATB.Value;
huymcsa > 08-02-16, 04:33 PM
(07-02-16, 06:57 PM)ongke0711 Đã viết: Về việc in báo cáo có tên thiết bị, nó đơn giản chỉ là chọn Select Query làm Record source cho báo cáo là được rồi. Select query có join giữa 2 table: tblBanGiaoThietBi, tblDSThietBi thông qua [MaTB], lấy thêm cột tên thiết bị. Trong báo cáo (report) thì chỉ cần sử dụng textbox có control source là [TenTB], không cần mã TB nữa.
Ví dụ:
Về việc nhập liệu 1 người mượn nhiều thiết bị thì nó cũng đơn giản, không cần phải nhập nhiều lần, nhiều phiếu đâu bạn. Ví dụ giống như bạn nhập đơn hàng bán cho 1 khách hàng, họ mua nhiều mặt hàng nhưng cũng chỉ nhập 1 lần rồi xuất ra 1 phiếu mua hàng gồm nhiều mã thôi.Mã PHP:SELECT tblBanGiaoThietBi.NgayGiao, tblBanGiaoThietBi.MATB, tblDSThietBi.TenTB
FROM tblDSThietBi RIGHT JOIN tblBanGiaoThietBi ON tblDSThietBi.MATB = tblBanGiaoThietBi.MATB.Value;
Tôi chỉnh sửa cái form trong file của bạn các phần cơ bản nhất, các phần bẫy lỗi, tự động tạo mã v.v..bạn tự nghiên cứu thêm nhé.
File demo: http://www.mediafire.com/download/z9udzn...d%29.accdb
huymcsa > 08-02-16, 04:57 PM
(08-02-16, 04:33 PM)huymcsa Đã viết:(07-02-16, 06:57 PM)ongke0711 Đã viết: Về việc in báo cáo có tên thiết bị, nó đơn giản chỉ là chọn Select Query làm Record source cho báo cáo là được rồi. Select query có join giữa 2 table: tblBanGiaoThietBi, tblDSThietBi thông qua [MaTB], lấy thêm cột tên thiết bị. Trong báo cáo (report) thì chỉ cần sử dụng textbox có control source là [TenTB], không cần mã TB nữa.
Ví dụ:
Về việc nhập liệu 1 người mượn nhiều thiết bị thì nó cũng đơn giản, không cần phải nhập nhiều lần, nhiều phiếu đâu bạn. Ví dụ giống như bạn nhập đơn hàng bán cho 1 khách hàng, họ mua nhiều mặt hàng nhưng cũng chỉ nhập 1 lần rồi xuất ra 1 phiếu mua hàng gồm nhiều mã thôi.Mã PHP:SELECT tblBanGiaoThietBi.NgayGiao, tblBanGiaoThietBi.MATB, tblDSThietBi.TenTB
FROM tblDSThietBi RIGHT JOIN tblBanGiaoThietBi ON tblDSThietBi.MATB = tblBanGiaoThietBi.MATB.Value;
Tôi chỉnh sửa cái form trong file của bạn các phần cơ bản nhất, các phần bẫy lỗi, tự động tạo mã v.v..bạn tự nghiên cứu thêm nhé.
File demo: http://www.mediafire.com/download/z9udzn...d%29.accdb
Cám ơn bạn rất nhiều ....
mình đang tham khảo file của bạn gửi....có gì mong bạn giúp đỡ thêm...
Năm mới chúc bạn có thật nhiều hạnh phúc, sức khỏe và thành đạt trong cuộc sống nha...
Cám ơn bạn rất nhiều
ongke0711 > 08-02-16, 06:42 PM
huymcsa > 08-02-16, 10:23 PM
ongke0711 > 10-02-16, 06:54 PM
huymcsa > 12-02-16, 02:57 PM
(08-02-16, 06:42 PM)ongke0711 Đã viết: Phần liên kết khoanh màu đỏ là các table mặc định của hệ thống, là table ẩn, khi bạn Show Hidden Objects và Show System Objects thì nó sẽ hiện ra. Bạn không cần quan tâm, có thể remove nó khỏi relationship cũng được, mặc định bạn không thể xóa nó được đâu.
(10-02-16, 06:54 PM)ongke0711 Đã viết: Theo như ứng dụng của bạn, cái form bàn giao/ hoàn trả thiết bị là quan trọng nhất trong toàn bộ ứng dụng. Do vậy bạn cần phân tích kỹ một chút các nghiệp vụ, thao tác phát sinh cho nghiệp vụ này mới thiết kế được table, form đáp ứng đúng, đủ yêu cầu. Điều này trách sau này bị bế tắc khi thực hiện các query, report không ra vì CSDL không đáp ứng được.- Mình muốn làm là: 1 người có thể mượn 1 lúc nhiều thiết bị nhưng.... trả 1 lúc toàn bộ thiết bị mượn (trong 1 phiếu bàn giao) và cũng có thể trả lắc nhắc từng thiết bị..
Trước hết bạn cần trả lời một số câu hỏi liên quan đến cái form "Bàn giao thiết bị" như sau:
- 1 người có thể mượn 1 lúc nhiều thiết bị nhưng có trả 1 lúc toàn bộ thiết bị mượn (trong 1 phiếu bàn giao) hay có thể trả lắc nhắc từng thiết bi? Trường hợp trả lắc nhắc có thể phát sinh vì: có vài thiết bị vẫn cần dùng nên trả sau; hoặc do có người cần gấp một vài TB nên phải linh động thu hồi trước còn mấy TB còn lại trả sau cũng được v.v.. ==> trả lời câu này vì nếu trả lắc nhắc bạn sẽ phải thiết kế lại table và form nhập liệu bàn giao.
- Form bàn giao có kết hợp làm form trả thiết bị luôn không?
- ...
Đối với cái file của bạn hiện tại, bạn muốn sau khi nhập xong sẽ chạy 2 cái query update "cho mượn" và "đã trả" cập nhật vào tblDSThietBi (trường [DaMuon]).
Cái Select query [Thiết bị đã trả] của bạn gặp vấn đề sau: Query dựa vào điều kiện [NgayTra] Not Is Null để lọc các TB đã trả => Vậy ví dụ: thiết bị TBHT1 đã mượn lần 1 và đã trả, sau đó mượn tiếp lần 2 và chưa trả ([NgayTra]= Is Null) --> sau khi chạy query sẽ hiển thị TBHT1 trong danh sách đã trả vì có 1 dòng của lần mượn thứ nhất thỏa điều kiện bạn đưa ra là [NgayTra] = Not Is Null ==> cập nhật vào table thiết bị này đã trả là sai. Đó là lý do vì sao khi bạn chạy Update query nó cập nhật hết.
Bài toán là làm sao tìm ra các TB đã trả thực sự để cập nhật. Bạn ngâm cứu tiếp nhé...
Còn về vấn đề trả thiết bị lắc nhắc bạn phải làm lại form có tùy chọn trả cho từng dòng thiết bị và table cũng sẽ thiết kế đi theo kiểu này.
Bạn mày mò tiếp nếu không ra thì hỏi tiếp nhé.