将Access 2007前端与SQL Server 2008 r2后端一起使用。我有记录可以勾选为“患者看见”。如果患者看到'是真的然后删除不应该发生。相反,如果患者看到'是错误的删除记录是允许的。到目前为止我所拥有的是:
Set db = CurrentDb
Set rs = db.OpenRecordset("select PatientSeen,PatientLogID from PatientLog where PatientLogID = " & Me.PatientLogID, dbOpenDynaset, dbSeeChanges)
test = rs!PatientLogID
If MsgBox("Are you sure you want to delete record?", vbYesNo, "Delete Record") = vbYes Then
If rs!PatientSeen = False Then
strSQL = "UPDATE [PatientLog] " _
& "Set IsDeleted = 1 " _
& "Where PatientLogID = " & Me.PatientLogID
'View evaluated statement in Immediate window.
Debug.Print strSQL
DoCmd.SetWarnings False
DoCmd.RunSQL strSQL
ElseIf rs!PatientSeen = True Then
MsgBox ("Patient already seen, cannot delete")
Me.AllowDeletions = False
'Me.Undo
End If
Else
Me.Undo
Exit Sub
End If
患者看到假的工作正常。它将IsDeleted更新为1以获得正确的记录。但是,如果患者看到的是True,则会弹出msgbox(患者已经看过......),但记录仍然会从表中完全删除而不是。如果我在最初的问题上点击否,确实要删除'。它不是只退出sub而是删除记录。
我仍然是相对较新的Access和构建后端SQL,但在多年的Excel报告中非常熟悉VBA。任何建议都非常赞赏。
答案 0 :(得分:1)
行Me.AllowDeletions = False
不会阻止OnDelete事件中正在进行的删除,它只是将表单属性AllowDeletions更改为No(这将阻止在完成此记录后删除其他记录)。
要停止在OnDelete事件中删除当前记录,只需添加行Cancel = True
即可。退出OnDelete时Cancel参数的状态(False进入)确定是否提交了删除。