toancvp > 06-07-16, 09:19 AM
(05-07-16, 10:27 PM)maidinhdan Đã viết: * Chưa chắc code báo lỗi ngay đoạn màu vàng là do đoạn đó đâu nhé bạn .
Để ý phần in tôi In đậm và gạch dưới.
=> Vậy tại sao bạn lại dùm hàm Dcount mà không phải là làm Dlookup.
Như mình đã nói phía trên: sẽ mắc 2 lỗi phía trên.
Làm gì có chuyện gán biến a= msgbox, rồi nếu biến a=1: là thế nào? Giải thích dùm đi.
Rồi mình viết code chuẩn cho, vì thế mình mới yêu cầu bạn phát biểu bằng lời để mình viết cho. Phát biểu lại xem. ( đừng nhìn vào code phát biểu của mình phía trên vì mình chỉ dịch ra từ code của bạn, mà code đó không xài được đâu)
Tại sao tôi phải hỏi đi hỏi lại, dài dòng lê thê với bạn như vậy. Vì nó sẽ giúp bạn nhớ code này mãi mãi.
toancvp > 06-07-16, 11:21 AM
(06-07-16, 08:52 AM)zinzin8x Đã viết: http://www.mediafire.com/download/9qpiil...%29.mdbđây mình trả hang cho cậu.
cậu sai ở chỗ này: Nếu lấy 3 ô textbox mà làm điều kiện check, trong đó textbox có dùng control souce là 1 trường thì không dùng Dcount mà dùng Dlookup như bạn Hân nói.
Còn nếu ko dùng control souce thì bạn cho vào apter update với nội dung như này là OK nhé:
If DCount("[MaNV]", "Tbl_0_NhanVien", "[MaNV]=txtThuKho") = 0 Then
a = MsgBox("Ma nhan vien nay chua duoc dang ky!", vbOKOnly, "THONG BAO")
If a = 1 Then
Me.txtThuKho = Null
End If
End If
Me.Refresh ' dể xóa cái label hiện tên nhân viên nếu mã NV sai
txtKeToanTruong.SetFocus ' ép nó nhảy đến vị trí khác
Me.txtThuKho.SetFocus ' kéo nó về với textbox mình cần.
Mình đã xem file của bạn lỗi do cả mấy textbox kiểm tra đều dùng có control souce là 1 trường trong table. hãy xóa hết nó đi và làm code như trên là OK nhé.
Đấy là mình ép cho bài đúng theo code của bạn thôi. chứ xài hàm dlookup là chuẩn đẹp trai hơn cả về ý nghĩa cũng như logic hơn bạn nhé.
http://www.mediafire.com/download/9qpiil...NEW%29.mdb
maidinhdan > 06-07-16, 11:34 AM
(06-07-16, 09:19 AM)toancvp Đã viết: Em xin giải thích code của em ạ
- Em dùng Dcount vì thực tế là em dịch ra theo "nếu txtThuKho không nằm trong danh sách mã nhân viên", do em nghĩ vậy nên em dùng dcount luôn mà chưa từng nghĩ là có thể dùng dlookup bác ạ,
- Còn vụ a = msgbox, thì em xin thú nhận là em chưa thật hiểu cách dùng msgbox, sau nhiều lần tự ý viết chỉnh thì em làm kiểu này mới thành công, nên cứ lần sau em lại làm kiểu này ,
Anh hướng dẫn thêm giúp em vụ này nhé.
Private Sub txtThuKho_AfterUpdate()
If DLookup("[MaNV]", "[Tbl_0_NhanVien]", "[MaNV]='" + Me.txtThuKho + "'") = Me.txtThuKho Then
Me.Ten3 = DLookup("[TenNV]", "[Tbl_0_NhanVien]", "[MaNV]='" + Me.txtThuKho + "'")
Else
MsgBox "Ma nhan vien nay chua duoc dang ky, nhap lai Ma Nhan vien!", vbInformation, "Thong bao"
Me.txtThuKho = ""
End If
End Sub
toancvp > 06-07-16, 12:13 PM
(06-07-16, 11:34 AM)maidinhdan Đã viết: Đây là code bạn cần nè:
Mã PHP:Private Sub txtThuKho_AfterUpdate()
If DLookup("[MaNV]", "[Tbl_0_NhanVien]", "[MaNV]='" + Me.txtThuKho + "'") = Me.txtThuKho Then
Me.Ten3 = DLookup("[TenNV]", "[Tbl_0_NhanVien]", "[MaNV]='" + Me.txtThuKho + "'")
Else
MsgBox "Ma nhan vien nay chua duoc dang ky, nhap lai Ma Nhan vien!", vbInformation, "Thong bao"
Me.txtThuKho = ""
End If
End Sub
Chú ý:
+ Với đoạn code này bạn vào textbox Ten3 xóa hàm và để ô nó rỗng luôn.
+ Thủ tục Me.txtThuKho.SetFocus không áp dụng được khi bạn đã nhảy đến ô khác, bạn phải bẩy đoạn code này trên ô nào không phải là txtThuKho. Nôm na là không thể tự SetFocus cho chính mình.
Gửi Demo để xem nè.
zinzin8x > 06-07-16, 12:31 PM
toancvp > 06-07-16, 12:36 PM
(06-07-16, 12:31 PM)zinzin8x Đã viết: Thôi close topic được rồi. bài toán đã có 2 phương án rồi nhé. Bạn cứ làm như vậy cho các textbox kiểm tra điều kiện khác là được. Còn cái control souce là nạp nguồn dữ liệu có sẵn là 1 trường của table hay query cho các textbox, việc nhập thông tin cho textbox này chính ghi, sửa thông tin cho table đó. Thế nhé close thôi.
maidinhdan > 06-07-16, 04:16 PM
(06-07-16, 12:13 PM)toancvp Đã viết:Mã PHP:Private Sub txtThuKho_AfterUpdate()End Sub
Hay quá , em nghĩ là em hiểu thêm được nhiều cái rồi bác ạ. Ban đầu em cũng định cho Ten3 vào VBA luôn, nhưng em sợ khi load form để xem nó sẽ ko hiện đc tên ấy ạ. Như thế nếu muốn nó hiện lên phải cho vào event load form hoặc curent form, em sợ làm thế nó sẽ đưa form từ dạng load thành dạng edit, mỗi lần mở form để xem là tương đương sửa form luôn. Em hiểu như thế có đúng ko bác?
toancvp > 06-07-16, 06:16 PM
maidinhdan > 07-07-16, 01:36 AM
(06-07-16, 06:16 PM)toancvp Đã viết:(06-07-16, 04:16 PM)maidinhdan Đã viết: Đưa vào sự kiện AfterUpdate của txtThuKho ạ.
Có, em hiểu ý bác mà, nhưng ý em là khi load form ấy ạ, nếu Ten3 mà chỉ có code cho after update của txtThuKho thì lúc form load nó có thể hiện lên ko bác? Mà để em thử xem ạ, hỏi nhiều cái vớ vẩn quá cũng ko nên .
Private Sub Form_Load()
If Me.txtThuKho <> "" Then
Me.Ten3 = DLookup("[TenNV]", "[Tbl_0_NhanVien]", "[MaNV]='" + Me.txtThuKho + "'")
End if
End Sub