• Tạo thông báo theo điệu kiện của textbox
  • RE: Tạo thông báo theo điệu kiện của textbox

    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

    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ả...
  • RE: Tạo thông báo theo điệu kiện của textbox

    yamakashi2003 > 15-08-20, 04:35 PM

    (15-08-20, 02:47 PM)ongke0711 Đã viết:
    (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ả...
    Em làm được rồi, cảm ơn bác ạ.
    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 ạ
  • RE: Tạo thông báo theo điệu kiện của textbox

    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 ạ

    Nếu theo như cái file mẫu bạn mới gửi thì ở SubForm Load bạn chạy câu lệnh SQL: "UPDATE....". Đối với câu lệnh SQL này bạn chạy ở  đâu cũng được, đâu cần gán nó cho sự kiện của Subform. Khi MainForm Load thì chạy cập nhật Số lượng = 0 luôn.
    Còn bạn muốn gọi cái thủ tục (Sub) hay hàm ở Subform thì bạn phải thiết lập tầm vực của nó là Public thì mới gọi được.

        Call Forms.MainForm.SubForm.Form.Form_Load

    hoặc:

             Forms!MainForm!SubForm.Form.Form_Load


    Form_Load là thủ tục ở Subform: 

    Public Sub Form_Load ()
       ...
    End Sub
  • RE: Tạo thông báo theo điệu kiện của textbox

    yamakashi2003 > 16-08-20, 09:56 AM

    (15-08-20, 02:47 PM)ongke0711 Đã viết:
    (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ả...
    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
    Bác có cách nào giải quyết giúp em không ạ
  • RE: Tạo thông báo theo điệu kiện của textbox

    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

    Bạn đã tìm ra nguyên nhân rồi đó thì tìm cách khắc phục cái nguyên nhân đó đi.
    - txtSumSL đang là 20
    - Khi sửa lại thì sự kiện BeforeUpdate nó bắt rồi nên txtSumSL chưa được cập nhật với số lượng mới nên check bị lỗi.
    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.
    Bạn ngâm cứu tiếp đi.
  • RE: Tạo thông báo theo điệu kiện của textbox

    yamakashi2003 > 16-08-20, 08:12 PM

    (16-08-20, 11:33 AM)ongke0711 Đã viết: [quote="yamakashi2003" pid='47160' dateline='1597542988']
    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.
    Đâ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 021 021 021
    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
  • RE: Tạo thông báo theo điệu kiện của textbox

    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 021 021 021
    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



    Mã PHP:
    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