• Câu lệnh If then trong điều kiện có sử dụng hàm and
  • Câu lệnh If then trong điều kiện có sử dụng hàm and

    leehoang2011 > 17-07-21, 06:36 PM

    Em có bảng Chi đoàn (năm học, mã chi đoàn). Năm học và mã chi đoàn là khóa chính
    Thực hiện chức năng thêm, sau đó bấm lưu để lưu lại
    Trong chức năng lưu em có viết câu lệnh kiểm tra năm học và mã chi đoàn có hay chưa. Nếu có báo nhập lại, ngược lại thì lưu
    VD: Nhập Năm học 2019-2020 , mã chi đoàn 10A7
          Nếu nhập tiếp 2019-2020, mã chi đoàn 10A8 thì lưu, nhưng nếu nhập 2019-2020, mã chi đoàn 10A7 thì báo nhập lại
    Nhờ các anh em chỉ giùm em câu lệnh And trong If viết như vậy sai như thế nào

    Private Sub Luu_Click()
    If IsNull(Namhoc) = True Then
        MsgBox "Ban phai nhap nam hoc"
        Namhoc.SetFocus
    Exit Sub
    End If
    If IsNull(Macd) = True Then
        MsgBox "Ban phai nhap ma chi doan"
        Macd.SetFocus
    Else
    If (DCount("Macd", "ChiDoan", "Macd='" & Macd & "'") = 1) And (DCount("Namhoc", "ChiDoan", "Namhoc='" & Namhoc & "'") = 1) Then
            MsgBox "Trong nam hoc ma chi doan da co. Vui long nhap lai"
            Macd.SetFocus
    Else
    DoCmd.RunCommand acCmdSaveRecord
    ListCD.Requery
    End If
    End If
    End Sub
  • RE: Xin cho em hỏi

    ongke0711 > 17-07-21, 07:21 PM

    Bạn sửa tiêu đề bài viết lại, nội dung súc tích phản ánh đúng yêu cầu cần hỏi để những người sau có nhu cầu giống bạn sẽ dễ dàng tìm kiếm.
    Tiêu đề sai qui định sẽ bị đưa vào box Vi phạm đó.
    Sửa luôn bài cũ.
  • RE: Câu lệnh If then trong điều kiện có sử dụng hàm and

    tungthoi15 > 17-07-21, 10:08 PM

    (17-07-21, 06:36 PM)leehoang2011 Đã viết: ...
    Else
    If (DCount("Macd", "ChiDoan", "Macd='" & Macd & "'") = 1) And (DCount("Namhoc", "ChiDoan", "Namhoc='" & Namhoc & "'") = 1) Then
            MsgBox "Trong nam hoc ma chi doan da co. Vui long nhap lai"
            Macd.SetFocus
    Else
    DoCmd.RunCommand acCmdSaveRecord
    ListCD.Requery
    End If
    End If
    End Sub

    Sao lại có 2 từ khóa "Else" trong đoạn thế này.
    Theo mình nghĩ phần trên phải sửa lại là:

    ElseIf (DCount("Macd", "ChiDoan", "Macd='" & Macd & "'") = 1) And (DCount("Namhoc", "ChiDoan", "Namhoc='" & Namhoc & "'") = 1) Then
  • RE: Câu lệnh If then trong điều kiện có sử dụng hàm and

    cpucloi > 17-07-21, 10:38 PM

    Phân tích thôi, để bạn tự sửa, có nhiều cách để làm lắm:

    Mã:
    If (DCount("Macd", "ChiDoan", "Macd='" & Macd & "'") = 1) And (DCount("Namhoc", "ChiDoan", "Namhoc='" & Namhoc & "'") = 1) Then
            MsgBox "Trong nam hoc ma chi doan da co. Vui long nhap lai"
            Macd.SetFocus


    Nếu đã nhập Năm học thì kết quả của DCount("namhoc" .... sao bằng 1 được?

    Nên gộp 2 điều kiện vào 1 DCount ??????
  • RE: Câu lệnh If then trong điều kiện có sử dụng hàm and

    tranthanhan1962 > 17-07-21, 11:23 PM

    Có rất nhiều bạn làm chuyện dư thừa với cái nút Lưu trong form access. Tôi xin nhắc lại sau khi nhập đầy ̣đủ dữ liệu cho các field của 1 record, chỉ cần con trỏ di chuyển ra khỏi record đó là record sẽ được save mà không cần 1 lệnh nào khác.
    Để buột 1 field phải có giá trị trong 1 record ví dụ năm học và mã chi đoàn, chỉ cần xử lý Validation Rule <của các file tương ứng trong chế độ design của table hoặc properties Data các textbox có control source tương ứng>: Is Not Null <Không được trống>. Tôi bảo đảm các bạn không bao giờ di chuyển trỏ chuột rời khỏi record đó được ngoại trừ tắt máy hoặc ctrl + Alt + Del ... Nếu các bạn chưa gõ giá trị vào các field của record đó. Còn ̣để báo lỗi khì gõ câu cảnh báo vào Validation Text: Ví dụ: Bạn phải nhập mã chi đoàn. Sau khi xử lý xong khi bạn nhập đầy đủ dữ liệu cho 1 record chẳng cần phải lưu, record sẽ tự lưu khi con trỏ rời khỏi record đó.
  • RE: Câu lệnh If then trong điều kiện có sử dụng hàm and

    ongke0711 > 17-07-21, 11:30 PM

    Code trên chỗ "Else" không sai, sai ở chỗ IF DCount....
    Ngoài cái lỗi mà bạn Cpuloi đã để cập, 2 mệnh đề DCount chẳng có ràng buộc gì với nhau cho dù cả 2 có trả về là True cả nhưng không có nghĩa là nó trùng Nam + MaCD.
    Vd: 
    Nam  | MaCD
    --------------
    1920   10A8   
    2021   10A7      

    ==> 1920    10A7 chưa có
    ==> 2 cái DCount sẽ trả về True

    Không cần dùng code chi mất công. Tận dụng Primary Key trong Table ràng buộc nó.
    Quét chọn cùng lúc 2 field [NamHoc] và [MaCD] -> chọn Primary Key. Khi đó Access sẽ xét nếu 1 cặp NamHoc và MaCD có rồi, nếu nhập nữa sẽ báo trùng dữ liệu. Khi đó chỉ cần bẫy lỗi 3022 là được rồi.
  • RE: Câu lệnh If then trong điều kiện có sử dụng hàm and

    doandinhtam > 19-07-21, 06:38 PM

    bạn thêm code sau vào event afterupdate của field macd 
    Mã:
    Private Sub Macd_AfterUpdate()
    If DCount("[Macd]", "Chidoan", "[Macd] =  Macd.Value") > 0 and DCount("[Namhoc]", "Chidoan", "[Namhoc] =  Namhoc.Value") > 0 Then
    MsgBox "Trong nam hoc ma chi doan da co. Vui long nhap lai"
    Macd.SetFocus
    end if
    end sub
    như vậy khi bạn vừa nhập macd xong mà bấm đi nơi khác thì sẽ hiện thông báo và yêu cầu nhập lại, khỏi cần thêm code vào cài nút lưu.
    Còn nếu không muốn tự động lưu thì thêm code sau vào event beforeupdate của subform
    Mã:
    Private Sub Form_BeforeUpdate(Cancel As Integer)
       On Error GoTo BeforeUpdate_Error
       If Me.Dirty Then
        'if record has been changed the dirty property
        'is set to true Display message to save the record
          If MsgBox("Co luu thay doi khong?", _
          vbYesNo + vbQuestion, "Save Changes") = vbNo Then
             Me.Undo
          End If
    End If
    BeforeUpdate_Exit:
       Exit Sub
    BeforeUpdate_Error:
       MsgBox Err.Description
       Resume BeforeUpdate_Exit
    End Sub