ongke0711 > 15-08-20, 02:47 PM
(15-08-20, 01:25 PM)yamakashi2003 Đã viết: Em test rồi bác, giả sử subform có 3 record
code này 1 hạn chế là nếu em nhập ở record 1 mà sô lượng là 22, sau đó em không nhập nữa thì nó sẽ không thông báo,
Nếu em nhập tiếp soluong ở record 2 nó mới thông báo
yamakashi2003 > 15-08-20, 04:35 PM
(15-08-20, 02:47 PM)ongke0711 Đã viết:Em làm được rồi, cảm ơn bác ạ.(15-08-20, 01:25 PM)yamakashi2003 Đã viết: Em test rồi bác, giả sử subform có 3 record
code này 1 hạn chế là nếu em nhập ở record 1 mà sô lượng là 22, sau đó em không nhập nữa thì nó sẽ không thông báo,
Nếu em nhập tiếp soluong ở record 2 nó mới thông báo
Sợ bạn luôn. Đưa cần câu, lưỡi câu rồi, giờ phải câu cá luôn.
Code nó hạn chế là do bạn chưa làm kỹ, chưa tìm hiểu kỹ.
Sự kiện BeforeUpdate là nó sẽ kiểmm tra điều kiện gì đó thoã mới cho lưu dữ liệu.
Vậy: khi bạn nhập số lượng vô -> nó chưa lưu dữ liệu thì cái textbox tổng nó chưa cập nhật số vậy làm sao nó so sánh với điều kiện >20 được -> phải + thêm số vừa gõ vào textbox số lượng với textbox Tổng.
If (Me.txtSoLuong + Me.txtSumSL) > 20 Then
Msgbox "Vượt.
Cancel = True
End If
Code trên của tôi có tham số Cancel = True bạn lượt bỏ nó đâu mất rồi?? Bạn phải tìm hiểu ý nghĩa của tham số rồi xem có nên bỏ hay không.
Cancel = True có nghĩa là: Sau khi gõ số vào [SoLuong] -> bạn bấm Enter, Tab hoặc phím mũi tên xuống, click chuột qua dòng khác thì Cancel có nhiệm vụ kéo lại, huỷ thao tác đó, vẫn giữ rịt con trỏ tạo textbox số lượng đến khi nào bạn gõ số lượng thoã điều kiện thì thôi.
Bạn tự test và tự rút ra cách thức hoạt động của con trỏ, của dữ liệu khi thao tác trên Form đi. Khi đó bạn mới hiểu để sử dụng các sự kiện trên Form cho đúng, hiệu quả...
ongke0711 > 15-08-20, 05:00 PM
(15-08-20, 04:35 PM)yamakashi2003 Đã viết: Bác cho em hỏi giả sử trong subform có 1 đoạn code dài em để trong sự kiện onload,....
Thì trên main form có cách nào gọi đoạn code trong sự kiện onload ở subform ra cho nhanh không ạ.
Vì em dò thử thì thấy lúc gõ trên main form: Me.SubForm.Form.OnLoad
nhưng không biết gõ như thế nào tiếp ạ
yamakashi2003 > 16-08-20, 09:56 AM
(15-08-20, 02:47 PM)ongke0711 Đã viết:Bác ơi em lại găp 1 lỗi phát sinh ạ,(15-08-20, 01:25 PM)yamakashi2003 Đã viết: Em test rồi bác, giả sử subform có 3 record
code này 1 hạn chế là nếu em nhập ở record 1 mà sô lượng là 22, sau đó em không nhập nữa thì nó sẽ không thông báo,
Nếu em nhập tiếp soluong ở record 2 nó mới thông báo
Sợ bạn luôn. Đưa cần câu, lưỡi câu rồi, giờ phải câu cá luôn.
Code nó hạn chế là do bạn chưa làm kỹ, chưa tìm hiểu kỹ.
Sự kiện BeforeUpdate là nó sẽ kiểmm tra điều kiện gì đó thoã mới cho lưu dữ liệu.
Vậy: khi bạn nhập số lượng vô -> nó chưa lưu dữ liệu thì cái textbox tổng nó chưa cập nhật số vậy làm sao nó so sánh với điều kiện >20 được -> phải + thêm số vừa gõ vào textbox số lượng với textbox Tổng.
If (Me.txtSoLuong + Me.txtSumSL) > 20 Then
Msgbox "Vượt.
Cancel = True
End If
Code trên của tôi có tham số Cancel = True bạn lượt bỏ nó đâu mất rồi?? Bạn phải tìm hiểu ý nghĩa của tham số rồi xem có nên bỏ hay không.
Cancel = True có nghĩa là: Sau khi gõ số vào [SoLuong] -> bạn bấm Enter, Tab hoặc phím mũi tên xuống, click chuột qua dòng khác thì Cancel có nhiệm vụ kéo lại, huỷ thao tác đó, vẫn giữ rịt con trỏ tạo textbox số lượng đến khi nào bạn gõ số lượng thoã điều kiện thì thôi.
Bạn tự test và tự rút ra cách thức hoạt động của con trỏ, của dữ liệu khi thao tác trên Form đi. Khi đó bạn mới hiểu để sử dụng các sự kiện trên Form cho đúng, hiệu quả...
ongke0711 > 16-08-20, 11:33 AM
(16-08-20, 09:56 AM)yamakashi2003 Đã viết: Bác ơi em lại găp 1 lỗi phát sinh ạ,
Ví dụ có 2 record mà ở record 1 soluong = 10, record 2 soluong = 10
thi txtsumsl =20 và lúc này thì em sẽ không thể chỉnh sửa được soluong ở các record do nó hiểu là 20 + 1 (hoặc bất kì số dương nào khác) thì lớn hơn 20
yamakashi2003 > 16-08-20, 08:12 PM
(16-08-20, 11:33 AM)ongke0711 Đã viết: [quote="yamakashi2003" pid='47160' dateline='1597542988']Đây là vấn đề mà em ngâm cứu từ lúc lập topic mà chưa ra bác ạ,
Vậy làm sao khi nhập số lượng thì txtSumSL sẽ được cập nhật tức thì rồi mới thực hiện thao tác kiểm tra.
ongke0711 > 16-08-20, 08:57 PM
(16-08-20, 08:12 PM)yamakashi2003 Đã viết: Đây là vấn đề mà em ngâm cứu từ lúc lập topic mà chưa ra bác ạ,
ở txtSumSL phần control source: = sum[soluong]
và em test thì cái lệnh này luôn chạy sau cùng mỗi khi record được cập nhật
em để dòng lệnh txtSumSL = sum(soluong) ở đầu sự kiện before update thì nó báo lỗi dòng này, hình như VBA access không có hàm sum phải không bác
Option Compare Database
Option Explicit
Dim oldval As Double
Private Sub SoLuong_BeforeUpdate(Cancel As Integer)
If (Me.txtTongSoLuong - oldval + Me.SoLuong) > 20 Then
MsgBox "vuot qua so luong 20"
Cancel = True
End If
End Sub
Private Sub SoLuong_Change()
oldval = Me.SoLuong.OldValue
End Sub