我一直在处理以下代码,当用户点击按钮保存并转到新记录时,Access找到设置位置使用的最高客户端ID,然后将其添加1。在保存记录并转到新记录之前。虽然通过其他错误工作,但我无法获得此行所需的过去错误对象。 “Me.ClientID = IIf(DMax(”[ClientID]“,”tClientinfo“,”[CorpsName] =“&”'defaultcorps'“)是Null,0,DMax(”[ClientID]“,”tClientinfo“, “[CorpsName] =”&“'defaultcorps'”))+ 1“
我越是看到类似的问题,我对代码的错误感到困惑。提前感谢大卫的任何建议
Private Sub Save_Record_Click()
'declare variables for default values
Dim defaultinterviewr As String
Dim defaultcorps As String
'Variables get their values
defaultinterviewr = Me.Interviewer.Value
defaultcorps = Me.Corps.Value
'Check to see if ClientID field is Blank.
If IsNull(Me.ClientID) Then
'Check that Corps field is filled in
If IsNull(Me.Corps) Then
MsgBox "Corps must be entered before saving record.", vbOKOnly
Me.Corps.SetFocus
'set client id base on corps by finding the highest id and adding 1 to that number
Else
Me.ClientID = IIf(DMax("[ClientID]", "tClientinfo", "[CorpsName]=" & "'defaultcorps'") Is Null, 0, DMax("[ClientID]", "tClientinfo", "[CorpsName]=" & "'defaultcorps'")) + 1
End If
End If
MsgBox "Done", vbOKOnly
'save record
'DoCmd.RunCommand acCmdSaveRecord
'Me.stateidnum1 = ""
'open new record
'DoCmd.GoToRecord , , acNewRec
'set field default value
'Me.Interviewer.Value = defaultinterviewr
'Me.Corps.Value = defaultcorps
'Me.Child_Subform.Form.AllowAdditions = True
End Sub
答案 0 :(得分:0)
我认为你需要先弄清楚你的DMAX()语句是否正确产生了结果。接下来我看到的可能是你的主要罪魁祸首是你在VBA中使用Expression IIf()。您正在使用的IIf()表达式将在查询或文本框中工作,但VBA具有您在其前面的行中正确使用的If语句块。
我实际上会使用Nz函数进一步简化它,如下所示:
更新根据您在下面的评论,我重新审视了您的整体代码并注意到" defaultcorps"是一个变量,而不是我原本以为你试图过滤的值。您将变量包装在引号中。我的更新答案应该适合你。
Me.ClientID = (Nz(DMax("[ClientID]", "tClientinfo", "[CorpsName]= '" & defaultcorps & "'"),0)+1)