我有用于表格的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进行调试了,它肯定来自这一行。这是我在获取值并使用它更新特定表值时遇到的问题。如果这不是做到这一点的方法,那么朝正确方向的任何推动将不胜感激。谢谢!
答案 0 :(得分:1)
首先,我建议使用DAO.Database或DAO.QueryDef的Execute
方法,而不要使用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