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