ms Access db中的SQL语句调出InputBox

时间:2018-10-02 17:01:48

标签: sql vba ms-access

我有用于表格的VBA。

我正在尝试在表单上的文本框中获取信息,并更新表中的特定字段。 (尚未弄清楚如何正确执行此操作) 这行代码是我目前的尝试,但是我遇到了意外的行为

此后程序不再继续执行

   If (Not IsNull([New_Value_Box].Value)) Then
       DoCmd.RunSQL "Update [Export_NDC_Certification] Set " & [Field_List].Value & " = " & [New_Value_Box].Value & " WHERE SellerLoanIdentifier = " & Current_Loan
    End If

但是,确实会打开一个以Current_Loan值作为标题的输入框。它似乎对输入没有任何作用,也不执行任何其他代码。我已经使用MsgBox进行调试了,它肯定来自这一行。这是我在获取值并使用它更新特定表值时遇到的问题。如果这不是做到这一点的方法,那么朝正确方向的任何推动将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

首先,我建议使用DAO.DatabaseDAO.QueryDefExecute方法,而不要使用DoCmd.RunSQL。这样可以简化调试过程(here's a forum post并提供了更多信息)。

此外,由于似乎您所有控件([Field_List][New_Value_Box]Current_Loan)中都需要值,因此您应对所有这些控件进行null检查。

如@HansUp所指出的那样,您的实际SQL字符串可能会导致此问题,因此您可能希望将其存储在一个单独的变量中,然后可以将其输出到立即窗口。

话虽如此,修改后的代码可能看起来像这样:

Dim db As DAO.Database, qdf As DAO.QueryDef
Dim strSQL As String

If _
        IsNull([New_Value_Box].value) Or _
        IsNull([Field_List].value) Or _
        IsNull([Current_Loan].value) _
Then
    ' handle missing input
Else
    ' we know all required fields have values, so can proceed
    strSQL = _
            "UPDATE [Export_NDC_Certification " & _
            "SET " & [Field_List].value & "=" & [New_Value_Box].value & " " & _
            "WHERE SellerLoanIdentifier=" & Current_Loan

    Debug.Print strSQL

    Set db = CurrentDb
    Set qdf = db.CreateQueryDef("")
    qdf.SQL = strSQL
    qdf.Execute dbFailOnError
End If


' clean up DAO objects
Set qdf = Nothing: Set qdf = Nothing: Set db = Nothing