Lỗi Run-time error '2501'

Thảo luận trong 'Ứng dụng Access' bắt đầu bởi hoathanh815, 14 Tháng năm 2008.

4,638 lượt xem

  1. hoathanh815

    hoathanh815 Thành viên thân thiết

    Bài viết:
    123
    Đã được thích:
    2
    Nơi ở:
    Viet Nam
    Mình tạo 1 nút lệnh "Xoá" với cấu trúc như sau:
    Private Sub CMDXOA_Click()
    Dim DEM As Integer
    DEM = DCount("*", "KEKHAI_THANG", "MADV=FORMS!DON_VI!MADV")
    If DEM > 0 Then
    If MsgBox("DA CO DU LIEU " & vbNewLine & "BAN CO MUON XOA ?", 36, "THONG BAO") = 6 Then
    DoCmd.SetWarnings False
    DoCmd.RunSQL "DELETE * FROM KEKHAI_THANG WHERE MADV=FORMS!DON_VI!MADV"
    DoCmd.RunCommand acCmddeleteRecord
    DoCmd.SetWarnings True
    End If
    ElseIf DEM = 0 Then
    If MsgBox("KHONG CO DU LIEU " & vbNewLine & "BAN CO MUON XOA ?", 36, "THONG BAO") = 6 Then
    DoCmd.SetWarnings False
    DoCmd.RunCommand acCmddeleteRecord
    DoCmd.SetWarnings True
    End If
    End If
    LSTDV.Requery
    SANG_MO True
    End Sub

    Khi click nút xóa thì không xoá được, nó cứ báo lỗi Run-time error '2501' The RunComand action was canceled.
    Vậy là sao, các bạn có thể giúp mình được không?
     
    #1
  2. ketoanaccess

    ketoanaccess Thành viên sơ cấp

    Bài viết:
    14
    Đã được thích:
    0
    Nơi ở:
    saigon
    Có lẽ dòng lệnh:
    DoCmd.RunCommand acCmddeleteRecord
    là thừa, nên bỏ đi, vì đã xóa bằng SQL rồi.

    Nhóm lệnh

    ElseIf DEM = 0 Then
    If MsgBox("KHONG CO DU LIEU " & vbNewLine & "BAN CO MUON XOA ?", 36, "THONG BAO") = 6 Then
    DoCmd.SetWarnings False
    DoCmd.RunCommand acCmddeleteRecord
    DoCmd.SetWarnings True
    End If

    có lẽ cũng là thừa vì trường hợp này tìm không thấy mẫu tin nào hết thì không có gì phải xử lý, hỏi có muốn xóa để làm gì?
     
    #2
  3. hoathanh815

    hoathanh815 Thành viên thân thiết

    Bài viết:
    123
    Đã được thích:
    2
    Nơi ở:
    Viet Nam
    Lỗi Run-time error '2501;

    Mình đã bỏ dòng lệnh như bạn nói thì không báo gì nhưng nó cứ "trân" mình ra, chẳng có động thái gì hết. Cũng cảm ơn bạn có quan tâm đến câu hỏi của mình
     
    #3
  4. ketoanaccess

    ketoanaccess Thành viên sơ cấp

    Bài viết:
    14
    Đã được thích:
    0
    Nơi ở:
    saigon
    Nếu nó không báo gì thì có thể là nó đã xóa rồi, trường hợp này bấm nút lần nữa xem có thông báo không có dữ liệu hay không (nếu vẫn còn giữ ElseIf...) hoặc mở bảng gốc ra xem mẫu tin muốn xóa có còn không.
    Nếu kiểm lại thấy mẫu tin vẫn còn, tức là chưa xóa, thì xem lại các tên gọi trong đường dẫn vô ô MADV có đúng không.

    Tôi đã làm thử và thấy đúng. Nếu cần gởi mail tôi sẽ gởi lại thì dụ cụ thể.
     
    #4
  5. hoathanh815

    hoathanh815 Thành viên thân thiết

    Bài viết:
    123
    Đã được thích:
    2
    Nơi ở:
    Viet Nam
    #5
  6. tcyq_2006

    tcyq_2006 Thành viên sơ cấp

    Bài viết:
    4
    Đã được thích:
    0
    Nơi ở:
    Tp HCM
    #6
  7. hochoi1

    hochoi1 Thành viên sơ cấp

    Bài viết:
    8
    Đã được thích:
    1
    Nơi ở:
    kkk
    Bị sai dòng lệnh này:
    1. DEM = DCount("*", "KEKHAI_THANG", "MADV=FORMS!DON_VI!MADV")

    2. DoCmd.RunSQL "DELETE * FROM KEKHAI_THANG WHERE MADV=FORMS!DON_VI!MADV"

    *Sửa lại đúng như sau:
    1. DEM = DCount("thay vào đây tên trường cần", "KEKHAI_THANG", "MADV='" & FORMS!DON_VI!MADV & "'")
    2. DoCmd.RunSQL "DELETE * FROM KEKHAI_THANG WHERE MADV='" & FORMS!DON_VI!MADV & "'"
    + chú ý: dấu nháy đơn nếu là dữ liệu kiểu Text, nếu dữ liệu kiểu Number thì không cần đặt giá trị tìm vào trong nháy đơn
     
    Last edited: 17 Tháng chín 2009
    #7

Chia sẻ trang này