Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Help] Mong moi người giúp mình tạo form
#11
(12-02-16, 02:57 PM)huymcsa Đã viết:
(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.
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é... 007  
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é.
- 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ườ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ậy Không biết là mình phải thiết kế lại bảng như thế nào...mình chưa có kinh nghiệm nên mong bạn hướng dẫn cho mình...
Mình chân thành cám ơn...
mình đã thử một số cách tự mình nghĩ ra nhưng ko được....mong các ban giúp đỡ
Chữ ký của huymcsa Xin chào, mình là huymcsa, Tham gia http://thuthuataccess.com/forum từ ngày 23-09 -11.
Reply
Những người đã cảm ơn
#12
Theo tôi, trình tự của nghiệp vụ bàn giao/ hoàn trả như sau:
- Mở form Phiếu bàn giao (như cái form bạn đã làm) để nhập số phiếu bàn giao, người giao, người nhận, ngày giao, mục đích sử dụng và chi tiết các thiết bị nào bàn giao, số lượng, hiện trạng của thiết bị đó khi giao. Form này chỉ có nút [Lưu & Thêm], [Lưu & Đóng], [Đóng]
- Khi hoàn trả thiết bị, bạn chọn phiếu bàn giao nào cần làm thủ tục hoàn trả. Sau đó bạn nhập ngày hoàn trả, trong bảng chi tiết các thiết bị trong phiếu bàn giao bạn click chọn [Returned] cho thiết bị nào trả, không trả thì để trống, hiện trạng thiết bị trả. Form này có các nút như: [Lưu & Thêm], [Lưu & Đóng], [Đóng].
- 2 form này cũng có nhiều điểm chung nên có thể gộp lại thiết kế trong cũng 1 form, tùy nghiệp vụ Giao hay Trả sẽ hiển thị (visible=true) các control tương ứng (vd: form hoàn trả sẽ hiển thị control [NgayTra], nếu bàn giao sẽ ẩn control này đi). Code cho các nút lệnh cũng sẽ theo tương ứng từng loại form. Hiên tại nếu khó quá thì bạn làm 2 form riêng biệt cho dễ.

Về thiết kế table, cũng không thay đổi gì nhiều.
1. tblPhieuBanGiaoTB: thêm field [HienTrangTra] dạng combobox, Row source type: Value list, Row source: 1;Đã hoàn trả;2;Chưa hoàn trả;3;Hoàn trả chưa hết. Field này có mục đích là sau này khi bạn click chọn hoàn trả các thiết bị sẽ chạy query xem nếu trả hết sẽ gán [HienTrangTra]=1, trả 1 phần thiết bị sẽ gán = 3 ... ==> Bạn có thể theo dõi phiếu bàn giao nào đã trả, phiếu nào còn v.v..
2. tblPhieuBanGiaoTB_chitiet: thêm field [HoanTra]- yes/no. Field này dùng để click chọn khi trả thiết bị tương ứng.

Nói thêm về tạo mã số phiếu tự động. Bạn có thể để cho máy tự gán mã số phiếu theo dạng: ngày - tháng - năm - giờ - phút - tên nhân viên nhận [ddmmyyyyhhmmTenNV]. Khi bạn thay đổi người nhận bàn giao sẽ tự động tạo mã trên.
Vd: 
Private Sub NguoiNhan_Click ()
   Me.txtMaSoPhieu=Format(Date(),"ddmmyyyyhhmm" & Me.cboNguoiNhan
End Sub

Các nút lệnh Lưu, Đóng, bạn nghiên cứu thêm đi nhé.
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#13
(13-02-16, 02:02 PM)ongke0711 Đã viết: Theo tôi, trình tự của nghiệp vụ bàn giao/ hoàn trả như sau:
- Mở form Phiếu bàn giao (như cái form bạn đã làm) để nhập số phiếu bàn giao, người giao, người nhận, ngày giao, mục đích sử dụng và chi tiết các thiết bị nào bàn giao, số lượng, hiện trạng của thiết bị đó khi giao. Form này chỉ có nút [Lưu & Thêm], [Lưu & Đóng], [Đóng]
- Khi hoàn trả thiết bị, bạn chọn phiếu bàn giao nào cần làm thủ tục hoàn trả. Sau đó bạn nhập ngày hoàn trả, trong bảng chi tiết các thiết bị trong phiếu bàn giao bạn click chọn [Returned] cho thiết bị nào trả, không trả thì để trống, hiện trạng thiết bị trả. Form này có các nút như: [Lưu & Thêm], [Lưu & Đóng], [Đóng].
- 2 form này cũng có nhiều điểm chung nên có thể gộp lại thiết kế trong cũng 1 form, tùy nghiệp vụ Giao hay Trả sẽ hiển thị (visible=true) các control tương ứng (vd: form hoàn trả sẽ hiển thị control [NgayTra], nếu bàn giao sẽ ẩn control này đi). Code cho các nút lệnh cũng sẽ theo tương ứng từng loại form. Hiên tại nếu khó quá thì bạn làm 2 form riêng biệt cho dễ.

Về thiết kế table, cũng không thay đổi gì nhiều.
1. tblPhieuBanGiaoTB: thêm field [HienTrangTra] dạng combobox, Row source type: Value list, Row source: 1;Đã hoàn trả;2;Chưa hoàn trả;3;Hoàn trả chưa hết. Field này có mục đích là sau này khi bạn click chọn hoàn trả các thiết bị sẽ chạy query xem nếu trả hết sẽ gán [HienTrangTra]=1, trả 1 phần thiết bị sẽ gán = 3 ... ==> Bạn có thể theo dõi phiếu bàn giao nào đã trả, phiếu nào còn v.v..
2. tblPhieuBanGiaoTB_chitiet: thêm field [HoanTra]- yes/no. Field này dùng để click chọn khi trả thiết bị tương ứng.

Nói thêm về tạo mã số phiếu tự động. Bạn có thể để cho máy tự gán mã số phiếu theo dạng: ngày - tháng - năm - giờ - phút - tên nhân viên nhận [ddmmyyyyhhmmTenNV]. Khi bạn thay đổi người nhận bàn giao sẽ tự động tạo mã trên.
Vd: 
Private Sub NguoiNhan_Click ()
   Me.txtMaSoPhieu=Format(Date(),"ddmmyyyyhhmm" & Me.cboNguoiNhan
End Sub

Các nút lệnh Lưu, Đóng, bạn nghiên cứu thêm đi nhé.

Cám ơn bạn đã hướng dẫn.... mình đã chỉnh sửa lại theo những gì bạn hướng dẫn....
Nhưng phần nhận và trả thiết bị mình ko chỉnh được... ngoài ra các tên thiết bị hiện trên Forms đều là mã của thiết bị chứ không phải hiện tên mình đã chỉnh như bạn hướng dẫn cho column widths là 0";1" cũng không (được nó mất luôn cột đó)...
Mình có gửi kèm file bạn xem giúp mình với nha....
Cám ơn bạn rất nhiều
http://upfile.vn/xwIQMaXCukBt/thietbihie...accdb.html
Chữ ký của huymcsa Xin chào, mình là huymcsa, Tham gia http://thuthuataccess.com/forum từ ngày 23-09 -11.
Reply
Những người đã cảm ơn
#14
Hướng dẫn bạn làm tiếp nhé. Nếu tôi làm thì cũng nhanh thôi nhưng bạn sẽ không nghiệm ra những vấn đề khi thiết kế ứng dụng này.
Làm cái Form "Bàn giao thiết bị" trước đã. Giải quyết vụ [Mã thiết bị] không hiển thị.
- Theo tôi để dễ theo dõi bạn nên có cái form gọi là List các "Phiếu Bàn Giao" đã phát sinh. Tổng hợp thông tin cơ bản của  Phiếu bàn giao TB như: Mã phiếu, ngày, người giao/nhận, mục đích sử dụng, ngày hứa hẹn hoàn trả. Tại sao có Form này? là form cũng cấp thông tin theo dõi cơ bản ban đầu để bạn có cái nhìn tổng quát sau đó khi bạn cần xem chi tiết  "phiếu bàn giao" nào thì chọn nó (Double-click) rồi mở form chi tiết phiếu bàn giao đó lên xem. Form chi tiết Phiếu bàn giao sẽ là cái form [BanGiaoThietBiNhap] mà bạn đang làm.
- Form [BanGiaoThietBiNhap] bạn đang làm bị lỗi không hiển thị mã hay tên thiết bị là do bạn thiết lập Row source cho cái combobox MaTB không phù hợp. Row source cho combobox bạn đang làm là cái Query [Danh dau thiet bi] tức là chỉ lấy những thiết bị nào chưa bị đánh dấu [Đã mượn] ==> khi mở 1 "Phiếu bàn giao" cũ lên, nó có chi tiết những [MaTB] đã cho mượn (đã đánh dấu rồi) vậy thì làm sao nó có trong Row source của cái combobox [MaTB] mà bạn thiết lập để mà hiển thị.
Giải pháp:
- Đổi Row source của combobox [MaTB] là toàn bộ danh sách các thiết bị hiện có (không cần tính tới cột [Đã mượn] hay chưa.
- Khi click [Tạo mới] form [BanGiaoThietBiNhap] để nhập phiếu bàn giao mới thì lúc đó viết code để thay đổi Row source cho combobox [MaTB] thành cái Query [Danh dau thiet bi] của bạn. Hiện tại nút [Tạo mới] bạn dùng macro để GoToNewRecord thì hạn chế là không viết code xử lý thêm các nhiệm vụ khác được.
Code cho nút [Tạo mới] như sau:
Mã PHP:
Private Sub Command10_Click()
 
   Dim strSQL As String
   strSQL 
"SELECT tblDSThietBi.MATB, tblDSThietBi.TenTB, tblDSThietBi.DaSD " _
           
"FROM tblDSThietBi WHERE (((tblDSThietBi.DaSD)=No));"
   DoCmd.GoToRecord , , acNewRec
   Me
.tblBanGiaoThietBi.Form!MATB.RowSource strSQL
End Sub 

- Bạn phải chuẩn hóa lại cách đặt tên form, subform để khi viết code nhanh hơn và không bị sai tên. Như code ở trên tôi dựa thực tế vào cái form của bạn, nhìn vô khó nhận biết đâu là tên subform, đâu là combobox hay textbox, code cho nút lệnh gì vì chỉ có tên là [Command10]. Chịu khó chính xác ngay từ đầu để dễ hơn về sau.
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn huymcsa
#15
(15-02-16, 01:11 AM)ongke0711 Đã viết: Hướng dẫn bạn làm tiếp nhé. Nếu tôi làm thì cũng nhanh thôi nhưng bạn sẽ không nghiệm ra những vấn đề khi thiết kế ứng dụng này.
Làm cái Form "Bàn giao thiết bị" trước đã. Giải quyết vụ [Mã thiết bị] không hiển thị.
- Theo tôi để dễ theo dõi bạn nên có cái form gọi là List các "Phiếu Bàn Giao" đã phát sinh. Tổng hợp thông tin cơ bản của  Phiếu bàn giao TB như: Mã phiếu, ngày, người giao/nhận, mục đích sử dụng, ngày hứa hẹn hoàn trả. Tại sao có Form này? là form cũng cấp thông tin theo dõi cơ bản ban đầu để bạn có cái nhìn tổng quát sau đó khi bạn cần xem chi tiết  "phiếu bàn giao" nào thì chọn nó (Double-click) rồi mở form chi tiết phiếu bàn giao đó lên xem. Form chi tiết Phiếu bàn giao sẽ là cái form [BanGiaoThietBiNhap] mà bạn đang làm.
- Form [BanGiaoThietBiNhap] bạn đang làm bị lỗi không hiển thị mã hay tên thiết bị là do bạn thiết lập Row source cho cái combobox MaTB không phù hợp. Row source cho combobox bạn đang làm là cái Query [Danh dau thiet bi] tức là chỉ lấy những thiết bị nào chưa bị đánh dấu [Đã mượn] ==> khi mở 1 "Phiếu bàn giao" cũ lên, nó có chi tiết những [MaTB] đã cho mượn (đã đánh dấu rồi) vậy thì làm sao nó có trong Row source của cái combobox [MaTB] mà bạn thiết lập để mà hiển thị.
Giải pháp:
- Đổi Row source của combobox [MaTB] là toàn bộ danh sách các thiết bị hiện có (không cần tính tới cột [Đã mượn] hay chưa.
- Khi click [Tạo mới] form [BanGiaoThietBiNhap] để nhập phiếu bàn giao mới thì lúc đó viết code để thay đổi Row source cho combobox [MaTB] thành cái Query [Danh dau thiet bi] của bạn. Hiện tại nút [Tạo mới] bạn dùng macro để GoToNewRecord thì hạn chế là không viết code xử lý thêm các nhiệm vụ khác được.
Code cho nút [Tạo mới] như sau:
Mã PHP:
Private Sub Command10_Click()
   Dim strSQL As String
   strSQL 
"SELECT tblDSThietBi.MATB, tblDSThietBi.TenTB, tblDSThietBi.DaSD " _
           
"FROM tblDSThietBi WHERE (((tblDSThietBi.DaSD)=No));"
   DoCmd.GoToRecord , , acNewRec
   Me
.tblBanGiaoThietBi.Form!MATB.RowSource strSQL
End Sub 

- Bạn phải chuẩn hóa lại cách đặt tên form, subform để khi viết code nhanh hơn và không bị sai tên. Như code ở trên tôi dựa thực tế vào cái form của bạn, nhìn vô khó nhận biết đâu là tên subform, đâu là combobox hay textbox, code cho nút lệnh gì vì chỉ có tên là [Command10]. Chịu khó chính xác ngay từ đầu để dễ hơn về sau.
Cám ơn bạn đã giúp mình...
Mình đã làm theo những gì bạn hướng dẫn...là:
- Làm thêm 1  form "Phiếu Bàn Giao" khi Double-click sẽ mở form chi tiết phiếu bàn giao[BanGiaoThietBiNhap] 
- Sửa lại nút "Tạo mới " trong Form BanGiaoThietBiNhap..
Còn việc trả thiết bị sẽ làm như thế nào ?...mong bạn hướng dẫn giúp mình....
Mình cám ơn...
http://upfile.vn/7kjmukBtxgIg/thietbihie...accdb.html
Chữ ký của huymcsa Xin chào, mình là huymcsa, Tham gia http://thuthuataccess.com/forum từ ngày 23-09 -11.
Reply
Những người đã cảm ơn
#16
(15-02-16, 06:23 PM)huymcsa Đã viết:
(15-02-16, 01:11 AM)ongke0711 Đã viết: Hướng dẫn bạn làm tiếp nhé. Nếu tôi làm thì cũng nhanh thôi nhưng bạn sẽ không nghiệm ra những vấn đề khi thiết kế ứng dụng này.
Làm cái Form "Bàn giao thiết bị" trước đã. Giải quyết vụ [Mã thiết bị] không hiển thị.
- Theo tôi để dễ theo dõi bạn nên có cái form gọi là List các "Phiếu Bàn Giao" đã phát sinh. Tổng hợp thông tin cơ bản của  Phiếu bàn giao TB như: Mã phiếu, ngày, người giao/nhận, mục đích sử dụng, ngày hứa hẹn hoàn trả. Tại sao có Form này? là form cũng cấp thông tin theo dõi cơ bản ban đầu để bạn có cái nhìn tổng quát sau đó khi bạn cần xem chi tiết  "phiếu bàn giao" nào thì chọn nó (Double-click) rồi mở form chi tiết phiếu bàn giao đó lên xem. Form chi tiết Phiếu bàn giao sẽ là cái form [BanGiaoThietBiNhap] mà bạn đang làm.
- Form [BanGiaoThietBiNhap] bạn đang làm bị lỗi không hiển thị mã hay tên thiết bị là do bạn thiết lập Row source cho cái combobox MaTB không phù hợp. Row source cho combobox bạn đang làm là cái Query [Danh dau thiet bi] tức là chỉ lấy những thiết bị nào chưa bị đánh dấu [Đã mượn] ==> khi mở 1 "Phiếu bàn giao" cũ lên, nó có chi tiết những [MaTB] đã cho mượn (đã đánh dấu rồi) vậy thì làm sao nó có trong Row source của cái combobox [MaTB] mà bạn thiết lập để mà hiển thị.
Giải pháp:
- Đổi Row source của combobox [MaTB] là toàn bộ danh sách các thiết bị hiện có (không cần tính tới cột [Đã mượn] hay chưa.
- Khi click [Tạo mới] form [BanGiaoThietBiNhap] để nhập phiếu bàn giao mới thì lúc đó viết code để thay đổi Row source cho combobox [MaTB] thành cái Query [Danh dau thiet bi] của bạn. Hiện tại nút [Tạo mới] bạn dùng macro để GoToNewRecord thì hạn chế là không viết code xử lý thêm các nhiệm vụ khác được.
Code cho nút [Tạo mới] như sau:
Mã PHP:
Private Sub Command10_Click()
   Dim strSQL As String
   strSQL 
"SELECT tblDSThietBi.MATB, tblDSThietBi.TenTB, tblDSThietBi.DaSD " _
           
"FROM tblDSThietBi WHERE (((tblDSThietBi.DaSD)=No));"
   DoCmd.GoToRecord , , acNewRec
   Me
.tblBanGiaoThietBi.Form!MATB.RowSource strSQL
End Sub 

- Bạn phải chuẩn hóa lại cách đặt tên form, subform để khi viết code nhanh hơn và không bị sai tên. Như code ở trên tôi dựa thực tế vào cái form của bạn, nhìn vô khó nhận biết đâu là tên subform, đâu là combobox hay textbox, code cho nút lệnh gì vì chỉ có tên là [Command10]. Chịu khó chính xác ngay từ đầu để dễ hơn về sau.
Cám ơn bạn đã giúp mình...
Mình đã làm theo những gì bạn hướng dẫn...là:
- Làm thêm 1  form "Phiếu Bàn Giao" khi Double-click sẽ mở form chi tiết phiếu bàn giao[BanGiaoThietBiNhap] 
- Sửa lại nút "Tạo mới " trong Form BanGiaoThietBiNhap..
Còn việc trả thiết bị sẽ làm như thế nào ?...mong bạn hướng dẫn giúp mình....
Mình cám ơn...
http://upfile.vn/7kjmukBtxgIg/thietbihie...accdb.html

Mong bạn hướng dẫn tiếp mình phần "Trả thiệt bị"....cám ơn bạn rất nhiều...
Chữ ký của huymcsa Xin chào, mình là huymcsa, Tham gia http://thuthuataccess.com/forum từ ngày 23-09 -11.
Reply
Những người đã cảm ơn
#17
Sorry là hơi lu bu nên trả lời chậm.
Tôi thấy bạn có làm 2 cái form "Trả thiết bị" 1 cái là trả cho toàn bộ "phiếu đã bàn giao", 1 form là cho trả thiết bị lắc nhắc. Thực ra chỉ cần 1 form là được rồi.
Form "Trả thiết bị" sẽ có nút "Select All" để chọn tất cả thiết bị trong phiếu để hoàn trả hoặc chủ động click chọn thiết bi nào cần trả trong Subform chi tiết.
Khi bấm "Lưu" sẽ:
- Chạy query kiểm tra xem các thiết bị trong "Phiếu bàn giao" được trả hết hay chưa để cập nhật vào hiện trạng của phiếu bàn giao: [Đã hoàn trả], [Hoàn trả chưa hết], [Chưa hoàn trả].
- Query update ngày trả vào cột [ngày trả] của từng dòng thiết bị. Để theo dõi vì ngày trả của những thiết bị sẽ khác nhau nếu trả từng phần.
- Giải phóng hiện trạng [Đã mượn] của thiết bị trong tblDSThietBi.
- Cập nhật tình trạng thiết bị khi hoàn trả vào tblDSThietBi.
Cái tblPhieuBanGiaoTB sẽ có thêm field [HienTrangTra] gồm 3 giá trị: [Đã hoàn trả], [Hoàn trả chưa hết], [Chưa hoàn trả]. 
Form Danh sách phiếu bàn giao sẽ có thêm phần lọc DS theo hiện trạng trên. Thêm nút [Hoàn Trả] (khi con trỏ chuột đang nằm ở dòng nào sẽ mở form Hoàn trả của Phiếu bàn giao đó).
Tôi nghĩ chỉ như vậy cũng đủ theo dõi rồi. Sau đó là các báo cáo theo dõi theo phiếu, theo nhân viên, theo hiện trạng v.v...

Code cho nút lệnh [Select All] hoặc dùng checkbox cũng được.
VD: Field để click chọn hoàn trả chi tiết từng dòng thiết bị là field [HoanTra] và nằm ở Subform

Mã PHP:
Private Sub cmdSelectAll_Click()

   Dim rs As DAO.Recordset
   Set rs 
Me.Ten Subform.Form.RecordsetClone
   If rs
.RecordCount 0 Then
       rs
.MoveFirst
   End 
If
   Do While Not rs.EOF
       rs
.Edit
       If rs
![HoanTra] = True Then
           rs
![HoanTra] = False
           Me
.cmdSelectAll.Caption "Select All"
       Else
           rs
![HoanTra] = True
           Me
.cmdSelectAll.Caption "Deselect All"
       End If
   rs.Update
   rs
.MoveNext
   Loop

   rs
.Close
   Set rs 
Nothing
End Sub 
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn huymcsa
#18
(18-02-16, 01:02 AM)ongke0711 Đã viết: Sorry là hơi lu bu nên trả lời chậm.
Tôi thấy bạn có làm 2 cái form "Trả thiết bị" 1 cái là trả cho toàn bộ "phiếu đã bàn giao", 1 form là cho trả thiết bị lắc nhắc. Thực ra chỉ cần 1 form là được rồi.
Form "Trả thiết bị" sẽ có nút "Select All" để chọn tất cả thiết bị trong phiếu để hoàn trả hoặc chủ động click chọn thiết bi nào cần trả trong Subform chi tiết.
Khi bấm "Lưu" sẽ:
- Chạy query kiểm tra xem các thiết bị trong "Phiếu bàn giao" được trả hết hay chưa để cập nhật vào hiện trạng của phiếu bàn giao: [Đã hoàn trả], [Hoàn trả chưa hết], [Chưa hoàn trả].
- Query update ngày trả vào cột [ngày trả] của từng dòng thiết bị. Để theo dõi vì ngày trả của những thiết bị sẽ khác nhau nếu trả từng phần.
- Giải phóng hiện trạng [Đã mượn] của thiết bị trong tblDSThietBi.
- Cập nhật tình trạng thiết bị khi hoàn trả vào tblDSThietBi.
Cái tblPhieuBanGiaoTB sẽ có thêm field [HienTrangTra] gồm 3 giá trị: [Đã hoàn trả], [Hoàn trả chưa hết], [Chưa hoàn trả]. 
Form Danh sách phiếu bàn giao sẽ có thêm phần lọc DS theo hiện trạng trên. Thêm nút [Hoàn Trả] (khi con trỏ chuột đang nằm ở dòng nào sẽ mở form Hoàn trả của Phiếu bàn giao đó).
Tôi nghĩ chỉ như vậy cũng đủ theo dõi rồi. Sau đó là các báo cáo theo dõi theo phiếu, theo nhân viên, theo hiện trạng v.v...

Code cho nút lệnh [Select All] hoặc dùng checkbox cũng được.
VD: Field để click chọn hoàn trả chi tiết từng dòng thiết bị là field [HoanTra] và nằm ở Subform

Mã PHP:
Private Sub cmdSelectAll_Click()

   Dim rs As DAO.Recordset
   Set rs 
Me.Ten Subform.Form.RecordsetClone
   If rs
.RecordCount 0 Then
       rs
.MoveFirst
   End 
If
   Do While Not rs.EOF
       rs
.Edit
       If rs
![HoanTra] = True Then
           rs
![HoanTra] = False
           Me
.cmdSelectAll.Caption "Select All"
       Else
           rs
![HoanTra] = True
           Me
.cmdSelectAll.Caption "Deselect All"
       End If
   rs.Update
   rs
.MoveNext
   Loop

   rs
.Close
   Set rs 
Nothing
End Sub 
cám ơn bạn đã dành thời gian quý giá của bạn để giúp hướng dẫn mình....mình rất cám ơn bạn...
Do mình mới làm nên có nhiều vấn đề bạn nói mình không hiểu...bạn có thể nói chậm hơn ko...
Như là tạo nút "Select all" trên form "Tra thiet bi" và thêm dòng code của bạn vào là xong mục chọn trả hết các thiết bị phải ko?..còn chọn trả từng thiết bị thì sao...? mình ko hiểu ở chổ này...Còn các query update,  field [HienTrangTra],  Giải phóng hiện trạng [Đã mượn] ...bạn có thể hướng dẫn mình chi tiết một chút ko..?
Mình cám ơn bạn rất nhiều
Chữ ký của huymcsa Xin chào, mình là huymcsa, Tham gia http://thuthuataccess.com/forum từ ngày 23-09 -11.
Reply
Những người đã cảm ơn
#19
(12-02-16, 02:57 PM)huymcsa Đã viết:
(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.
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é... 007  
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é.
- 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ườ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ậy Không biết là mình phải thiết kế lại bảng như thế nào...mình chưa có kinh nghiệm nên mong bạn hướng dẫn cho mình...
Mình chân thành cám ơn...
mong bạn hướng dẫn thêm cho mình...mình cám ơn
Chữ ký của huymcsa Xin chào, mình là huymcsa, Tham gia http://thuthuataccess.com/forum từ ngày 23-09 -11.
Reply
Những người đã cảm ơn
#20
Bạn xem file đính kèm.
Tôi đã chỉnh sửa phần quan trọng và cơ bản cái form "Trả thiết bị" của bạn, chủ yếu là qui trình xử lý của nút [Lưu].
Về cơ bản tôi nghĩ form nhập liệu và xử lý như vậy cũng đủ cho bạn chạy các báo cáo khi cần.
Bây giờ bạn ngâm cứu các query trong đó và cái qui trình xử lý như thế nào, chỉnh thêm một số hạng mục nhỏ trong các form cho hoàn chỉnh. Nhập liệu mẫu để kiểm tra xem lỗi gì phát sinh vì tôi cũng chưa có thời gian test kỹ.
Có gì không hiểu cứ hỏi tiếp nhé.
Link file:http://www.mediafire.com/download/f6n50c...etBi.accdb
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn huymcsa


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Tự động hiện Form khi loading hết thời gian ChiMai 1 34 02-12-16, 08:59 PM
Bài mới nhất: ongke0711
Photo [Hỏi] Mở Form trên access 2007 báo lỗi jason 5 186 22-11-16, 09:23 AM
Bài mới nhất: jason
  Query hiện lên trên form? feeling 4 162 09-11-16, 09:49 PM
Bài mới nhất: toancvp
  [Help] Chỉnh giúp Form thống kê hoanghai902 2 123 28-10-16, 06:15 PM
Bài mới nhất: hoanghai902
  [Help] Dòng chữ chạy trên form báo đến ngày sinh nhật tronghieu9792 1 121 20-10-16, 09:30 AM
Bài mới nhất: lamvankhanh

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ