Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Hỏi] Lỗi khi kiểm tra điều kiện trong BeforUpdate bằng ADODB.
#1
tmtien261 một đoạn code kiểm tra Mã hàng và số lượng tồn trước khi Update vào tblXuathangban bằng ADODB. Cứ mỗi lần Update vào thì báo lỗi như hình sau. Báo xong vẫn Update vào table bình thường. Mình gà mờ mới ngâm cứu ADODB nên không biết lỗi là do nguyên nhân gì ? NHờ các Pro chỉ giúp cách gỡ. Cảm ơn nhiều !
1. Đoạn code:
Mã:
Private Sub cboMahangban_BeforeUpdate(Cancel As Integer)
On Error GoTo Loi_Err
    
    Call OpenMyConnection
        Dim rs As ADODB.Recordset
        Set rs = New ADODB.Recordset
    With rs
        Set .ActiveConnection = MyConn
        .Source = "SELECT Soluongton FROM tblHanghoa where Mahang='" & Me.cboMahangban & "'"
        .LockType = adLockOptimistic
        .CursorType = adOpenKeyset
        .Open
    End With
        Dim rs1 As ADODB.Recordset
        Set rs1 = New ADODB.Recordset
    With rs1
        Set .ActiveConnection = MyConn
        .Source = "SELECT Donvitinh, Soluongban FROM tblXuathangban_Chitiet_Tam where Mahang='" & Me.cboMahangban & "'"
        .LockType = adLockOptimistic
        .CursorType = adOpenKeyset
        .Open
    End With
        If rs.RecordCount < 0 Then
            MsgBox "Mã hàng này chưa có !"
            Cancel = True
            Exit Sub
        Else
            If rs!Soluongton <= 0 Then
                MsgBox "Loại hàng này đã hết !"
                Cancel = True
                SendKeys "{Esc}"
                Exit Sub
            Else
                If rs!Soluongton <= Nz(rs1!Soluongban, 0) Then
                    MsgBox "Loại hàng này chỉ còn lại: " & rs!Soluongton & " " & rs1!Donvitinh
                    Cancel = True
                    SendKeys "{Esc}"
                    Exit Sub
                End If
            End If
        End If
        rs.Close: rs1.Close
        Set rs = Nothing
        Set rs1 = Nothing
        Call CloseMyConnection
            
Loi_Exit:
    Exit Sub
Loi_Err:
    MsgBox "Err:" & Err.Number & " : " & Err.Description & " In: cboMahangban_BeforeUpdate of frmXuathangban !"
    Resume Loi_Exit
End Sub
2. Báo lỗi:
[img]Báo lỗi[/img]

(Err.N:-2147352567: Er.D: Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.)

Rất mong các Pro xem xét chỉ giáo cách gỡ. Cảm ơn nhiều !
Chữ ký của Minh Tiên -----------------------------------------------
Đường tuy ngắn, không đi không đến
Việc tuy nhỏ, không làm không nên.
                                           Tuân Tử
-----------------------------------------------
Reply
Những người đã cảm ơn
#2
tmtien261 thuộc đẳng cấp cao 007007
Nhờ các cao thủ khác thôi.
Chữ ký của khuuquytrung Không gì là bí mật cả (hãy cùng chia sẻ và nhận sẻ chia)
Reply
Những người đã cảm ơn
#3
Các Pro ơi ! Xin giành chút thời gian chỉ giúp nguyên nhân báo lỗi như trên là do thiếu lệnh gì hay sai jj ? tmtien261 đã hỏi bác Mail, bác goo nhưng vẫn không tìm được nguyên nhân.
Cảm ơn các Pro nhiều !
Chữ ký của Minh Tiên -----------------------------------------------
Đường tuy ngắn, không đi không đến
Việc tuy nhỏ, không làm không nên.
                                           Tuân Tử
-----------------------------------------------
Reply
Những người đã cảm ơn
#4
Thấy bác bảo update vào table bình thường vậy bỏ lệnh on error goto Loi_Err
Reply
Những người đã cảm ơn
#5
Mình đã bỏ Loi_Err, xong vẫn xuất hiện thông báo như hình vẽ.
Thanks !
Chữ ký của Minh Tiên -----------------------------------------------
Đường tuy ngắn, không đi không đến
Việc tuy nhỏ, không làm không nên.
                                           Tuân Tử
-----------------------------------------------
Reply
Những người đã cảm ơn
#6
Mình nghĩ lỗi ở câu này:
.Source = "SELECT Donvitinh, Soluongban FROM tblXuathangban_Chitiet_Tam where Mahang='" & Me.cboMahangban & "'"

Vì đây là trước khi update nên không thể tìm thấy record với DK trên

Sao bạn không so sánh trực tiếp với Soluongban nhập trên form nhỉ?

VD: If rs!Soluongton <= Me!txtSoluongban Then ....
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn
#7
Mình đã tìm ra nguyên nhân của lỗi này rồi.
Thực ra do trước khi kiểm tra "Soluongban" ở SubForm, nếu là Null thì "CT" ko hiểu sẽ phải thực hiện thế nào ?
Để khắc phục lỗi này, mình thêm đoạn code sau:
Mã:
... cũ
With rs1
        Set .ActiveConnection = MyConn
        .Source = "SELECT Donvitinh, Soluongban FROM tblXuathangban_Chitiet_Tam where Mahang='" & Me.cboMahangban & "'"
        .LockType = adLockOptimistic
        .CursorType = adOpenKeyset
        .Open
    End With
...> Bổ sung thêm:
Mã:
Dim vSoluongban As Integer
        If rs1.RecordCount > 0 Then
            vSoluongban = rs1!Soluongban
        Else
            vSoluongban = 0
        End If
Sau đó sửa câu:
Mã:
If rs!Soluongton <= Nz(rs1!Soluongban, 0) Then
Thành câu:
Mã:
If rs!Soluongton <= vSoluongban Then
Thế là chạy vi vu.

Không biết còn cách nào đang giỡn (Đơn giãn) hơn không ? Nhờ các Pro chỉ giáo giúp.
Cảm ơn các ACE nhiều !
Thân chào !
Chữ ký của Minh Tiên -----------------------------------------------
Đường tuy ngắn, không đi không đến
Việc tuy nhỏ, không làm không nên.
                                           Tuân Tử
-----------------------------------------------
Reply
Những người đã cảm ơn
#8
Dò tìm theo điều kiện mà MatTroiNguQuen đã chỉ dẫn là nhanh nhất và gọn nhất, ít xảy ra lỗi
Thân mến
Chữ ký của Xuân Thanh Trăm năm trước thì ta chưa gặp
Trăm năm sau biết gặp được không?
Cuộc đời sắc sắc không không
Thì thôi ta cứ hết lòng vì nhau
ღღღღღTài sản của Xuân Thanh (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#9
(22-11-13, 04:31 PM)tmtien261 Đã viết: ....
Thế là chạy vi vu.

Không biết còn cách nào đang giỡn (Đơn giãn) hơn không ? Nhờ các Pro chỉ giáo giúp.
Cảm ơn các ACE nhiều !
Thân chào !

Mình không biết bạn xây dựng thuật toán cho đề án như thế nào nên phân vân ko biết góp ý ra sao nhưng chỉ xét thủ tục bạn viết cho sự kiện trên vẫn có chỗ không ổn:
-Câu này lấy về một tập hợp các bản ghi có Mahang='" & Me.cboMahangban & "'" :
rs1.Source = "SELECT Donvitinh, Soluongban FROM tblXuathangban_Chitiet_Tam where Mahang='" & Me.cboMahangban & "'"

- Câu này luôn trả về giá trị Soluongban của bản ghi đầu tiên tìm được:
(...) <= rs1!Soluongban

=> Nếu muốn lấy tổng Soluongban có Mahang='" & Me.cboMahangban & "'" trong bảng tblXuathangban_Chitiet_Tam thì mình nghĩ câu SELECT nên viết như sau:
Mã:
rs1.Source = "SELECT Donvitinh, sum(Soluongban) as Soluongban  FROM tblXuathangban_Chitiet_Tam where Mahang='" & Me.cboMahangban & "' GROUP BY Donvitinh"

Không biết mình góp ý vậy có đúng với ý của bạn khi viết thủ tục này không, có gì sai bạn bỏ qua nhé! 015
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn
#10
(23-11-13, 11:57 AM)Xuân Thanh Đã viết: Dò tìm theo điều kiện mà MatTroiNguQuen đã chỉ dẫn...

MatTroiNguQuen quả thực không dám "chỉ dẫn" 020
Chỉ là góp chút ý kiến nho nhỏ thui, "trong thì tối ngoài thì sáng mà"
Mình còn phải học hỏi ở ACE trên diễn đàn rất nhiều!
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Tạo Menu dạng TreeView bằng Query (không dùng ActiveX) ongke0711 4 269 06-12-16, 09:16 PM
Bài mới nhất: toancvp
  [Help] Cập nhật combobox 2 từ combobox 1 (dữ liệu ở nhiều bảng) votinh.tq 6 209 22-11-16, 11:34 PM
Bài mới nhất: votinh.tq
  Lọc có điều kiện ở listbox phiacuoiconduong 2 98 18-11-16, 06:40 PM
Bài mới nhất: ongke0711
  [Help] Giúp đỡ về cách xóa nội dung trong một field nam8384 2 120 17-10-16, 08:43 PM
Bài mới nhất: toancvp
  [Hỏi] Sử dụng chuột giữa trong subform là report. toancvp 10 362 12-10-16, 01:01 AM
Bài mới nhất: toancvp

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ơ