ms access db中的SQL语句打开InputBox
我有VBA表格 我试图在表单的文本框中获取信息,并更新表中的特定字段。(还没有弄清楚如何正确地做到这一点) 这行代码是我当前的尝试,但我得到了意想不到的行为 程序在此之后不会继续执行ms access db中的SQL语句打开InputBox,sql,vba,ms-access,Sql,Vba,Ms Access,我有VBA表格 我试图在表单的文本框中获取信息,并更新表中的特定字段。(还没有弄清楚如何正确地做到这一点) 这行代码是我当前的尝试,但我得到了意想不到的行为 程序在此之后不会继续执行 If (Not IsNull([New_Value_Box].Value)) Then DoCmd.RunSQL "Update [Export_NDC_Certification] Set " & [Field_List].Value & " = " & [New_Va
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进行调试,它肯定来自这一行。这一行是我在获取值并用它更新特定表值时遇到的。如果这不是解决问题的方法,那么朝着正确的方向努力,我们将不胜感激。谢谢大家! 首先,我建议使用
Execute
方法(或),而不是使用DoCmd.RunSQL
。这使得调试更容易(有更多信息)
此外,由于您似乎需要所有控件中的值([Field\u List]
,[New\u Value\u Box]
,以及Current\u 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
检查请求Access执行的
UPDATE
语句。使用Debug.Print
将其打印到即时窗口。然后Ctrl+g将带您到那里。如果您无法发现该语句的问题,请将其复制并粘贴到您的问题中。我猜以下内容可能是一个问题,但可能不是唯一的问题:Set“&[Field\u List].Value&=“
谢谢你,汉斯普。这完全是我传递的字段列表值。它们与对应表中的值没有正确的关联。我的答案非常类似,只是我使用了参数,直到我意识到字段列表是控件中的一个值。是的,参数化查询也是我的第一个想法。我的WAG是Set“&[Field\u List]。value&=”“
产生设置当前贷款=
并且该字段在表中不存在。。。因此出现了“缺少参数”的症状。必须查找WAG代表什么…:)哈哈,在我回答之前,我没有看到这些更新。这是关于合并DAO.database的好建议。是的,在代码的前面有输入过滤和错误检查。我的问题是[Field_List]。值与表值没有正确关联。我没有用正确的引号将这些术语封装在SQL语句中。