Vba 如何在表中允许记录之前测试多个条件?
可获得以下资料:Vba 如何在表中允许记录之前测试多个条件?,vba,ms-access,criteria,Vba,Ms Access,Criteria,可获得以下资料: 一年有一节课 一节课有三个学期 这个学生将在学校呆三年 一名学生在1学期至1至3年级期间最多只能注册9门不同科目 学生将在另一个课程中升入另一个班级,并提供相同的科目。(我想需要再注册一次) 我已经拥有的 我有一个名为tblEnrolled的表,其中记录了注册情况 我有一张报名表 我希望在表中允许记录之前满足以下条件: 任何学生在一学期内注册的专业科目不得超过1个(要检查所选学生是否已在所选学期和所选课程中注册了所选科目) 任何学生在一学期内不得注册超过九(9)门不同科目 我到
Dim NewSubjectCode As String
Dim NewSubject As String
Dim stLinkCriteria As String
Dim strCriteria As String
Dim strMainCriteria As String
On Error GoTo Err
If IsNull(cboSession) Then
MsgBox "Please select SESSION to proceed.", vbInformation, "Required"
Me.cboSession.SetFocus
Exit Sub
End If
If IsNull(cboTerm) Then
MsgBox "Please select TERM to proceed.", vbInformation, "Required"
Me.cboTerm.SetFocus
Exit Sub
End If
If IsNull(cboSelectClass) Then
MsgBox "Please select CLASS to proceed.", vbInformation, "Required"
Me.cboSelectClass.SetFocus
Exit Sub
End If
If IsNull(cboName) Then
MsgBox "Please select STUDENT to proceed.", vbInformation, "Required"
Me.cboName.SetFocus
Exit Sub
End If
If IsNull(cboCode) Then
MsgBox "Please select SUBJECT to proceed.", vbInformation, "Required"
Me.cboCode.SetFocus
Exit Sub
End If
NewSubject = Me.txtSubjects.Value
NewSubjectCode = Me.cboCode.Column(0)
NewStudentID = Me.txtStudentID.Value
stLinkCriteria = "[SubjectCode] = " & "'" & NewSubjectCode & "'"
strCriteria = "[StudentID] = " & "'" & NewStudentID & "'"
strMainCriteria = stLinkCriteria & "And" & strCriteria
If Me.cboCode.Column(0) = DLookup("[SubjectCode]", "QueryEnrollmentDetails", strMainCriteria) Then
MsgBox "" & NewSubject & " is already selected for this student.", vbCritical, "Duplicate Subject"
Me.Undo
Me.cboCode.SetFocus
Me.txtStudentID = Me.txtID
Me.txtStudentName = Me.cboName
Me.txtStudentClass = Me.txtClass
Me.txtSession = Me.cboSession
Me.txtTerm = Me.cboTerm
Exit Sub
Else
DoCmd.RunCommand acCmdSaveRecord
DoCmd.GoToRecord , , acNewRec
Me.[SubformSubjects].Requery
Me.cboCode.SetFocus
Me.txtStudentID = Me.txtID
Me.txtStudentName = Me.cboName
Me.txtStudentClass = Me.txtClass
Me.txtSession = Me.cboSession
Me.txtTerm = Me.cboTerm
End If
Err:
Exit Sub
End Sub
非常感谢@David G您的要求:
第二个可以实现为从student=“&StudentName&“”中的科目中选择计数(*),然后检查计数是否小于或等于9。谢谢大家。后来,我通过使用多个条件检查此类记录是否存在来修复它 保存按钮的点击事件如下所示:
Private Sub cmdEnroll_Click()
Dim NewSubjectCode As String
Dim NewSubject As String
Dim strStudent As String
Dim strSubject As String
Dim strTerm As String
Dim strSession As String
Dim strClass As String
Dim StudentCheck As String
Dim SubjectCheck As String
Dim TermCheck As String
Dim SessionCheck As String
Dim SubjectCodeCheck As String
Dim strCriteria As String
Dim ClassCheck As String
On Error GoTo Err
If IsNull(cboSession) Then
MsgBox "Please select Session to proceed.", vbExclamation, "Subjects Enrollment"
Me.cboSession.SetFocus
Exit Sub
End If
If IsNull(cboTerm) Then
MsgBox "Please select Term to proceed.", vbExclamation, "Subjects Enrollment"
Me.cboTerm.SetFocus
Exit Sub
End If
If IsNull(cboSelectClass) Then
MsgBox "Please select Class to proceed.", vbExclamation, "Subjects Enrollment"
Me.cboSelectClass.SetFocus
Exit Sub
End If
If IsNull(cboName) Then
MsgBox "Please select Student to proceed.", vbExclamation, "Subjects Enrollment"
Me.cboName.SetFocus
Exit Sub
End If
If IsNull(cboCode) Then
MsgBox "Please select Subject to proceed.", vbExclamation, "Subjects Enrollment"
Me.cboCode.SetFocus
Exit Sub
End If
SubjectCheck = Me.txtSubjects.Value
SubjectCodeCheck = Me.cboCode.Column(0)
StudentCheck = Me.txtStudentID.Value
TermCheck = Me.cboTerm.Value
SessionCheck = Me.cboSession.Value
ClassCheck = Me.cboSelectClass.Value
strSubject = "[SubjectCode] = " & "'" & SubjectCodeCheck & "'"
strStudent = "[StudentID] = " & "'" & StudentCheck & "'"
strTerm = "[Term] = " & "'" & TermCheck & "'"
strSession = "[Session] = " & "'" & SessionCheck & "'"
strClass = "[StudentClass] = " & "'" & ClassCheck & "'"
strCriteria = strStudent & "And" & strSubject & "And" & strTerm & "And" & strSession & "And" & strClass
If IsNull(DLookup("[StudentID]", "QueryEnrollmentDetails", strCriteria)) Then
CurrentDb.Execute "INSERT INTO tblEnrolled(StudentID,StudentName,StudentClass,SubjectCode,SubjectName,Session,Term) " & _
" VALUES('" & Me.txtID & "','" & Me.cboName & "','" & Me.cboSelectClass & "','" & _
Me.cboCode & "','" & Me.txtSubjects & "','" & Me.cboSession & "','" & Me.cboTerm & "')"
Me.[SubformSubjects].Requery
Me.cboCode.SetFocus
Me.txtStudentID = Me.txtID
Me.txtStudentName = Me.cboName
Me.txtStudentClass = Me.txtClass
Me.txtSession = Me.cboSession
Me.txtTerm = Me.cboTerm
Exit Sub
Else
MsgBox "" & SubjectCheck & " is already selected for this student.", vbCritical, "Duplicate Subject"
Me.Undo
Me.cboCode.SetFocus
Me.txtStudentID = Me.txtID
Me.txtStudentName = Me.cboName
Me.txtStudentClass = Me.txtClass
Me.txtSession = Me.cboSession
Me.txtTerm = Me.cboTerm
End If
Exit_Command:
Exit Sub
Err:
MsgBox Err.Description, vbCritical, "Error"
Resume Exit_Command
End Sub
有几种方法可以实现此类限制/检查。如何输入数据?这决定了需要执行检查的方式。是否要使用VBA/SQL/表定义?如果是的话,你试过什么了吗?如果是,请发布您的代码/尝试。谢谢您的帮助。我想在Access中使用VBA。我使用表单将数据输入到表中。因此,您需要在表单后面的VBA中进行一些检查。你做过一些调查吗?你试过密码吗?如果是这样,请在你的问题中发布。再次感谢David G。请问我如何在这里发布代码?我是新来的。编辑你的问题(小“编辑”按钮)并复制粘贴你的代码。然后选择您的代码并使用功能区顶部的“代码”按钮。我感谢您的帮助。然而,我不清楚你的建议。我的观点是,我有一个带有两个组合框的表单。我想检查我在这些组合框上选择的组合是否不会导致我的表中出现重复记录。因此,我需要一个VBA代码在保存记录之前进行检查。谢谢,如果您正确定义了表的主键,againIt将不会导致重复条目!这就是主键的全部思想——查找概念。尝试插入副本时,保存将失败。请参阅示例