0

显示的错误的确切措辞是“运行时错误:您作为查询参数输入的表达式产生了这个错误:”然后给出“ ThisCode

Function GetCageFileNumber(ThisCode As String) As Integer
    
    Dim sSQL As String
    
    If IsError(DLookup("[Sequence]", "CageSequence", "[CageCode] = " & ThisCode)) Then GoTo NewCage
    
    GetCageFileNumber = DLookup("[Sequence]", "CageSequence", "[CageCode] = " & ThisCode) + 1
    
    sSQL = "UPDATE CageSequence SET [Sequence] = " & GetCageFileNumber & " WHERE [CageCode] = " & ThisCode
    
    dbs.Execute sSQL, dbFailOnError

    Exit Function

NewCage:
    
    GetCageFileNumber = 1
    
    sSQL = "INSERT INTO CageSequence (" & ThisCode & " , 1)"

    dbs.Execute sSQL, dbFailOnError

End Function

这确实是一个问题——如何捕获DLookup运行时错误?我已经尝试了一些变化,但到目前为止没有任何错误!我已将其设置为产生错误。" ThisCode" 不包含在表 " CageSequence" 中。我需要捕获这个运行时错误(2471),以便能够进入“ NewCage:”以便能够将“ ThisCode”添加到“ CageSequence”表中。

4

1 回答 1

0

我从来没有找到缺乏错误捕获的原因。我怀疑如果 Dlookup 正在查找的值在表中不存在,则会发生无法捕获的错误。这只是一个怀疑,我无法确认是否是这种情况。最后,我围绕问题进行了编码,如下所示:-

Function FindCageFileNumber(ThisCode As String) As Integer

Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT * FROM CageSequence")
    
FindCageFileNumber = -1

rs.MoveFirst

Do Until rs.EOF = True
    
    If rs!CageCode = ThisCode Then
        FindCageFileNumber = rs!Sequence + 1
        rs.Edit
        rs!Sequence = FindCageFileNumber
        rs.Update
        Exit Do
    End If
    
    rs.MoveNext
Loop

If FindCageFileNumber = -1 Then
    rs.AddNew
    rs!CageCode = ThisCode
    rs!Sequence = 1
    rs.Update
    FindCageFileNumber = 1
End If

rs.Close
Set rs = Nothing

End Function
于 2020-08-12T10:50:16.030 回答