MS Access VBA调用子在第一次通过时有效,但在第二次不起作用

问题描述 投票:0回答:2

我撞墙了,我完全茫然。

所以我在MS Access中有一个表格。在其中,我有一个文本框和一个按钮。当我在文本框中输入数字,然后单击按钮时,它将打开一个公共子目录,然后运行一些查询,更新数据库,显示文本框,然后清除文本框。这一切都完美地工作。

我的问题是尝试通过在文本框中单击Enter来执行完全相同的操作。最奇怪的是,在我打开表格后,代码可以正常工作,但是所有后续尝试都会产生以下错误,直到我关闭表格并重新打开它:

Data type mismatch in criteria expression.

为了我的一生,我无法弄清楚为什么它第一次做到了我想要的,然后分崩离析。

这里是完整的VBA代码供参考:

    Option Compare Database
Public Sub Cut_Update()

    On Error GoTo Cut_Update_Err

        DoCmd.OpenQuery "UPDATE_WIP_Cut", acViewNormal, acEdit
        DoCmd.OpenQuery "UPDATE_LastRun", acViewNormal, acEdit

        MsgBox "Database Updated"
        [Forms]![Portal_02_Cut]![WO_Num].Value = ""
Cut_Update_Exit:
        Exit Sub

Cut_Update_Err:
        MsgBox Error$
        Resume Cut_Update_Exit

End Sub
'------------------------------------------------------------
' Return in Textbox
'
'------------------------------------------------------------
Private Sub WO_Num_KeyUp(KeyCode As Integer, Shift As Integer)
    If KeyCode = 13 Then
        Call Cut_Update
        Me.Refresh
    End If
End Sub
'------------------------------------------------------------
' Command2_Click
'
'------------------------------------------------------------
Private Sub Command2_Click()
    Call Cut_Update
End Sub
sql ms-access access-vba
2个回答
0
投票

我唯一的猜测是更新正在尝试使用非数字值进行更新。让我知道

       Option Compare Database 
       Public Sub Cut_Update()

                On Error GoTo Cut_Update_Err

                '' Make sure it is numeric
                If IsNumeric([WO_Num].Value) Then

                    DoCmd.OpenQuery "UPDATE_WIP_Cut", acViewNormal, acEdit
                    DoCmd.OpenQuery "UPDATE_LastRun", acViewNormal, acEdit

                    MsgBox "Database Updated"
                    [Forms]![Portal_02_Cut]![WO_Num].Value = ""

                End If

            Cut_Update_Exit:
                    Exit Sub

            Cut_Update_Err:
                    MsgBox Error$
                    Resume Cut_Update_Exit

     End Sub 
'------------------------------------------------------------ ' Return in Textbox ' 
'------------------------------------------------------------ 
Private Sub WO_Num_KeyUp(KeyCode As Integer, Shift As Integer)
                If KeyCode = 13 Then
                    Call Cut_Update
                    Me.Refresh
                End If 
End Sub 
'------------------------------------------------------------ ' Command2_Click ' 
'------------------------------------------------------------ 
        Private Sub Command2_Click()
                Call Cut_Update 
        End Sub

0
投票

您在两次调用之间的唯一操作是:

[Forms]![Portal_02_Cut]![WO_Num].Value = ""

因此,请尝试:

[Forms]![Portal_02_Cut]![WO_Num].Text = ""

或:

[Forms]![Portal_02_Cut]![WO_Num].Value = Null
© www.soinside.com 2019 - 2024. All rights reserved.