首页 > 解决方案 > ms access db 中的 SQL 语句调出 InputBox

问题描述

我有一个表格的 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 进行调试,它肯定来自这一行。这条线是我在获取值并用它更新特定表值时遇到的。如果这不是这样做的方法,任何朝着正确方向的推动将不胜感激。谢谢!

标签: sqlvbams-access

解决方案


首先,我建议使用ExecuteDAO.DatabaseDAO.QueryDef的)方法,而不是使用DoCmd.RunSQL. 这使调试变得更加容易(这里是一个包含更多信息的论坛帖子)。

此外,由于您似乎需要所有控件(、、和)中的值[Field_List][New_Value_Box]因此Current_Loan您应该对所有控件进行空检查。

正如@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

推荐阅读