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

    yamakashi2003 > 14-08-20, 10:19 PM

    Em chào các bác ạ,
    Các bác cho em hỏi giả sử em có 1 textbox trên main form có control source: =[SF_subform].[Form]![txtTongSoLuong]
    tức là em gán cho nó bằng giá trị tổng số lượng: txtTongSoLuong ở  sub form
    Và em tiến hành nhập vào cột số lượng ở subform thì ở textbox sẽ tính tổng lại cho em
    Vậy làm sao để khi giá trị ở textbox >20 thì hiện thông báo msgbox "so luong toi da", mà không dùng tới event của các đối tượng khác ạ
    Em xin cảm ơn ạ
  • RE: Tạo thông báo theo điệu kiện của textbox

    ongke0711 > 15-08-20, 12:04 AM

    (14-08-20, 10:19 PM)yamakashi2003 Đã viết: khi giá trị ở textbox >20 thì hiện thông báo msgbox "so luong toi da", mà không dùng tới event của các đối tượng khác ạ

    Bạn cập nhật giá trị textbox này ở sự kiện nào thì thêm code vô kiểm tra >20 không rồi hiện thông báo.
    Ví dụ sau khi refresh thì check giá trị luôn.
  • RE: Tạo thông báo theo điệu kiện của textbox

    yamakashi2003 > 15-08-20, 12:56 AM

    (15-08-20, 12:04 AM)ongke0711 Đã viết:
    (14-08-20, 10:19 PM)yamakashi2003 Đã viết: khi giá trị ở textbox >20 thì hiện thông báo msgbox "so luong toi da", mà không dùng tới event của các đối tượng khác ạ

    Bạn cập nhật giá trị textbox này ở sự kiện nào thì thêm code vô kiểm tra >20 không rồi hiện thông báo.
    Ví dụ sau khi refresh thì check giá trị luôn.
    Textbox thì em tạo trên main form và gán cho nó bằng giá trị ô textTongSoLuong ở sub form mà bác,
    Còn việc nhập số lượng thì em nhập trực tiếp vào subform, không thông qua sự kiện
    Ý em là muốn khi tổng số lượng nó lớn hơn 20 thì sẽ có thông báo msgbox, nhưng em lại không muốn phải tạo button
    mà muốn hỏi liệu có cách nào để tự textbox check được gia trị của nó trên 20 thì nó báo không ạ
  • RE: Tạo thông báo theo điệu kiện của textbox

    yamakashi2003 > 15-08-20, 01:06 AM

    (15-08-20, 12:04 AM)ongke0711 Đã viết:
    (14-08-20, 10:19 PM)yamakashi2003 Đã viết: khi giá trị ở textbox >20 thì hiện thông báo msgbox "so luong toi da", mà không dùng tới event của các đối tượng khác ạ

    Bạn cập nhật giá trị textbox này ở sự kiện nào thì thêm code vô kiểm tra >20 không rồi hiện thông báo.
    Ví dụ sau khi refresh thì check giá trị luôn.
    Tiện bác cho em hỏi nếu em tạo form dạng main - sub
    thì trên sự kiện onload của của subform có đoạn code:
    Private Sub Form_Load()
    Dim rs As dao.Recordset
    Set rs = CurrentDb.OpenRecordset("select * from T_QUA")
    If Not (rs.EOF And rs.BOF) Then
    rs.MoveFirst
        Do While Not rs.EOF
                rs.Edit
                    rs!SoLuong = 0
                rs.Update
                rs.MoveNext
        Loop
    End If
    rs.Close
    Set rs = Nothing
    End Sub

    Mục đích để cho mỗi khi mở form main lên thì textbox soluong ở form sub sẽ bằng 0
    Vậy trong quá trình sử dụng, em muốn gán cho textbox soluong = 0 thì ngoài cách sử dụng lại đoạn code trên, có câu lệnh nào ngắn gọn hơn hoặc vận dụng luôn đoạn code trên không ạ
    ví dụ: me.subform.form.reload,.... (em ví dụ thôi ạ, còn em thử test thì không được)
  • RE: Tạo thông báo theo điệu kiện của textbox

    ongke0711 > 15-08-20, 09:17 AM

    (15-08-20, 12:56 AM)yamakashi2003 Đã viết: Textbox thì em tạo trên main form và gán cho nó bằng giá trị ô textTongSoLuong ở sub form mà bác,
    Còn việc nhập số lượng thì em nhập trực tiếp vào subform, không thông qua sự kiện
    Ý em là muốn khi tổng số lượng nó lớn hơn 20 thì sẽ có thông báo msgbox, nhưng em lại không muốn phải tạo button
    mà muốn hỏi liệu có cách nào để tự textbox check được gia trị của nó trên 20 thì nó báo không ạ

    Mỗi hoạt động trên Form đều có sự kiện cho nó chứ đâu phải không không mà nó hoạt động.
    Khi bạn nhập số lượng vào textbox [txtSoLuong] ở SubForm thì nó sẽ nhảy số lượng Tổng ([txtSumSL]) đúng không?
    Vậy sự kiện của việc nhập liệu là: BeforeUpdate, AfterUpdate, Exit --> dựa vào sự kiện này mà kiểm tra.
    Vd: 
    Private Sub txtSoLuong_BeforeUpdate (Cancel As Integer)
        If Me.txtSumSL >20 Then
             Msgbox "Vuot qua so luong qui dinh (=20).
             Cancel = True
        End If
    End Sub

    Còn về việc reset số lượng về = 0 mỗi khi mở Form thì thay vì dùng vòng lặp cho mất thời gian bạn có thể dùng Update Query hoặc dùng câu lệnh Update SQL trong code VBA nó nhanh hơn.
    - Dùng code:

    Private Sub Form_Load ()
          currentDb.Execute "UPDATE T_QUA SET [SoLuong] = 0", dbFailOnError
          Me.sfmNhap.Requery
    End Sub
  • RE: Tạo thông báo theo điệu kiện của textbox

    Xuân Thanh > 15-08-20, 11:31 AM

    1/ Việc tạo Msgbox theo ongke0711 hướng dẫn
    2/ Việc để txtSL trở về giá trị = 0 chưa hiểu lắm. Chẳng lẽ bạn không lưu giá trị này trong table? SubForm có lấy nguồn từ table không? Cẩn thận vấn đề này
    3/ SubForm lấy nguồn từ table T_QUA. Nếu muốn Reset giá trị này về 0 cách đơn giản nhất là xóa hết dữ liệu trong T_QUA mỗi khi đóng form. Cách Update của ongke0711 cũng không có tác dụng vì khi SoLuong = 0 thì table T_QUA cũng trở lên vô nghĩa
    4/ Code khi đóng form

    Mã:
    Private Sub Form_Close()
         CurrentDb.Execute "Delete * From T_QUA"
         DoCmd.Close
    End Sub
  • RE: Tạo thông báo theo điệu kiện của textbox

    yamakashi2003 > 15-08-20, 12:13 PM

    (15-08-20, 11:31 AM)Xuân Thanh Đã viết: 1/ Việc tạo Msgbox theo ongke0711 hướng dẫn
    2/ Việc để txtSL trở về giá trị = 0 chưa hiểu lắm. Chẳng lẽ bạn không lưu giá trị này trong table? SubForm có lấy nguồn từ table không? Cẩn thận vấn đề này
    3/ SubForm lấy nguồn từ table T_QUA. Nếu muốn Reset giá trị này về 0 cách đơn giản nhất là xóa hết dữ liệu trong T_QUA mỗi khi đóng form. Cách Update của ongke0711 cũng không có tác dụng vì khi SoLuong = 0 thì table T_QUA cũng trở lên vô nghĩa
    4/ Code khi đóng form

    Mã:
    Private Sub Form_Close()
         CurrentDb.Execute "Delete * From T_QUA"
         DoCmd.Close
    End Sub
    Trước em dùng listbox để làm danh sách quà, mà sau này em chuyển sang subform để cho nó dễ format và chỉnh được cột số lượng theo ý muốn. Mục đích của em là các cột khác ở subform này như tên sản phẩm dữ nguyên, chỉ có sô lượng là tùy em nhập thôi. Nên em muốn sau khi thao tác xong thì số lượng sẽ trả về 0 bác ạ
  • RE: Tạo thông báo theo điệu kiện của textbox

    yamakashi2003 > 15-08-20, 12:25 PM

    Mỗi hoạt động trên Form đều có sự kiện cho nó chứ đâu phải không không mà nó hoạt động.
    Khi bạn nhập số lượng vào textbox [txtSoLuong] ở SubForm thì nó sẽ nhảy số lượng Tổng ([txtSumSL]) đúng không?
    Vậy sự kiện của việc nhập liệu là: BeforeUpdate, AfterUpdate, Exit --> dựa vào sự kiện này mà kiểm tra.
    Vd: 
    Private Sub txtSoLuong_BeforeUpdate (Cancel As Integer)
        If Me.txtSumSL >20 Then
             Msgbox "Vuot qua so luong qui dinh (=20).
             Cancel = True
        End If
    End Sub
    [/quote]
    code này 1 hạn chế là nếu em nhập ở record 1 mà sô lượng là 22, sau đó em k nhập nữa thì nó sẽ không thông báo,
    với trường hợp AfterUpdate, Exit cũng có hạn chế như vậy, tức là phải thao tác với textbox soluong ở record kế tiếp,
    sự kiện on exit em test  nếu ở record 1 mà soluong = 22 thì nó sẽ k báo do nó xảy ra trước khi form cập nhật số lượng vào số lượng tổng [txtSumSL]
    Liệu có code nào viết cho sự kiện mà khi form cập nhật xong số lượng tổng txtsumSL rồi nó mới chạy và thông báo không bác,
    Em bỏ đoạn code trên của bác vào sự kiện on dirty của form mà không được ạ
    Private Sub Form_Dirty(Cancel As Integer)
    If Me.Dirty Then


        If Me.txtSumSL >20 Then

             Msgbox "Vuot qua so luong qui dinh (=20).

             Cancel = True

        End If

    end if
    End Sub

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

    ongke0711 > 15-08-20, 12:36 PM

    Bạn không thấy code tôi viết ở trên là BeforeUpdate à.
  • RE: Tạo thông báo theo điệu kiện của textbox

    yamakashi2003 > 15-08-20, 01:25 PM

    (15-08-20, 12:36 PM)ongke0711 Đã viết: Bạn không thấy code tôi viết ở trên là BeforeUpdate à.
    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
    Em gửi link file test ạ
    http://www.mediafire.com/file/kv5cj4l4sa...accdb/file