无法弄清楚如何修复空错误

时间:2016-01-19 21:59:56

标签: vba ms-access access-vba

对于我的表单,几乎所有纸质表单都应带有您输入一个字段的ID。但是,一些表单将没有ID,我想根据输入信息的用户在不同的字段中生成ID号。

我想要它做的是创建一个4位数字,其中第一个数字来自字段usernum,最后3个数字只是顺序计数。

第一次按下按钮时,usernum字段中还没有任何内容,我认为这可能是我的运行时错误的原因?

下面是我的代码和错误行

Private Sub Command100_Click()
'on click of button InsightId is generated
Me.idnum = NewInsightID()
End Sub

Public Function NewInsightID() As Long


Dim lngNextID As Long

'Find highest  ID in the test table and add 1
lngNextID = (Me.usernum * 1000) + DMax([idnum], "test", "usernum=" & Me.usernum) + 1
'ABOVE IS THE LINE WITH ERRORS

'Assign function the value of the Next ID
NewInsightID = lngNextID

End Function

我尝试过各种解决方法,但没有一种方法可以使用

以下是我尝试过但没有奏效的内容:

lngNextID = (Me.usernum * 1000) + 1 + NZ(DMax([idnum], "test", "usernum=" & Me.usernum),0)

lngNextID = (Me.usernum * 1000) + 1 + Nz(DMax([idnum], "test", "usernum=" & Nz(Me.usernum, 0)), 0)

lngNextID = (Me.usernum * 1000) + 1 + DMax([idnum], "test", "usernum=" & Nz(Me.usernum, 0))

编辑2: 好的,已经制定了流程。除了两件事之外还有它的工作 - 由于某种原因,它不会从001开始,只有002.之后,它会逐渐增加一个。 如果usernum为空,则主要是错误。再说一遍,我预计不会出现这种情况,但是当涉及到数据输入时,我认为最好假设最愚蠢的用户,而且因为我将在这个数据库使用时去度假我不知道想得到任何关于错误的电话。我正在尝试这样做,以便如果usernum为空,他们会收到一条消息,告诉他们错误并取消子,但由于某种原因它不起作用,然后在代码中我得到错误消息运行查询表达式'usernum ='中的时间错误3075缺少运算符。我假设做了一个消息框来解决问题,但我无法让消息框工作。

   Private Sub Command100_Click()
'on click of button InsightId is generated
If usernum = Null Then
    Beep
    MsgBox ("you cannot leave usernum blank")
    Cancel = True
Else: Me.idnum = NewInsightID()
End If
End Sub

Public Function NewInsightID() As Long


Dim lngNextID As Long


'Find highest  ID in the test table and add 1

   If DMax("idnum", "test", "usernum=" & Me.usernum) = Null Then
        lngNextID = (Me.usernum * 1000 + 1)
    Else:
        lngNextID = 1 + Nz(DMax("idnum", "test", "usernum=" & Me.usernum), Me.usernum * 1000 + 1)
    End If

'Assign function the value of the Next ID
NewInsightID = lngNextID

End Function

EDIT3: 啊啊我解决了它不可思议!!

Private Sub Command100_Click()
'on click of button InsightId is generated
If IsNull(Me.usernum) Then
    Beep
    MsgBox ("you cannot leave usernum blank")
    Cancel = True
Else: Me.idnum = NewInsightID()
End If
End Sub

Public Function NewInsightID() As Long


Dim lngNextID As Long


'Find highest  ID in the test table and add 1

   If DMax("idnum", "test", "usernum=" & Me.usernum) = Null Then
    lngNextID = (Me.usernum * 1000 + 1)
    Else:
    lngNextID = 1 + Nz(DMax("idnum", "test", "usernum=" & Me.usernum), Me.usernum * 1000)
    End If

    'Assign function the value of the Next ID
    NewInsightID = lngNextID

End Function

1 个答案:

答案 0 :(得分:0)

这个很接近:

lngNextID = (Me.usernum * 1000) + 1 + NZ(DMax([idnum], "test", "usernum=" & Me.usernum), 0)

DMax的第一个参数(fieldname或expression)也是一个字符串:

lngNextID = (Me.usernum * 1000) + 1 + NZ(DMax("idnum", "test", "usernum=" & Me.usernum), 0)