我正在尝试构建一个表单,以根据表单中的客户输入更新表中的字段。表单有一个条件字段,用于搜索匹配的条目,然后是更新字段以更新另一个表字段。我的问题是,当我从表单中引用字段时,我无法使更新生效。这是代码:
Dim db As Database
Dim strSQL As String
Set db = CurrentDb
Dim uiTAGNAME As String
Dim uoX_NAM As String
Forms![Prefill Xmtr Data]!TxtCPointTagname.SetFocus
uiTAGNAME = Forms![Prefill Xmtr Data]!TxtCPointTagname.Text
Forms![Prefill Xmtr Data]!TxtQTransmitter.SetFocus
uoX_NAM = Forms![Prefill Xmtr Data]!TxtQTransmitter.Text
Debug.Print uiTAGNAME
Debug.Print uoX_NAM
'no error, but no update
db.Execute "UPDATE [IO Data] SET [io data].x_nam = ' uoX_NAM ' " & _
"WHERE [IO Data].tagname Like 'bkr7*';"
当我设置休息时,我可以查看uoX_NAM
的值,并从表单中正确更新。
我很确定我的表单字段引用不正确,但我尝试了其他各种方法,但都没有更新表格。
如果我尝试以下代码,正确的字段会更新,但它不是表单中的条目:
'this updates the correct fields
db.Execute "UPDATE [IO Data] SET [io data].x_nam = 'BRKRCMD'" & _
"WHERE [IO Data].tagname Like 'bkr7*';"
所以我的问题似乎在于我如何引用uoX_NAM
变量。
答案 0 :(得分:1)
每当你执行你在代码中动态构造的SQL时,请自己做这件事:将它存储在一个字符串中并在运行之前Debug.Print字符串。我看到您已宣布strSQL
,但您没有使用它!
'current code:
strSQL = "UPDATE [IO Data] SET [io data].x_nam = ' uoX_NAM ' " & _
"WHERE [IO Data].tagname Like 'bkr7*';"
Debug.Print strSQL
db.Execute strSQL
将打印并运行:
UPDATE [IO Data] SET [io data].x_nam = ' uoX_NAM ' WHERE [IO Data].tagname Like 'bkr7*';
您当前的代码更改会将字段设置为文字文本uoX_NAM
,就像您的第二个代码块将字段设置为文字文本BRKRCMD
一样。要插入变量的值而不是其名称,变量名必须在任何引号之外,并由&
连接,如下所示:
strSQL = "UPDATE [IO Data] SET [io data].x_nam = '" & uoX_NAM & "'" & _
"WHERE [IO Data].tagname Like 'bkr7*';"
Debug.Print strSQL
db.Execute strSQL
将打印并运行:
UPDATE [IO Data] SET [io data].x_nam = 'YOUR VALUE HERE' WHERE [IO Data].tagname Like 'bkr7*';
此外,您可以通过引用控件的值而不是Text属性来更直接地设置变量而不使用SetFocus
。由于Value是默认属性,因此您甚至可以省略.Value
并仅引用控件名称:
uiTAGNAME = Forms![Prefill Xmtr Data]!TxtCPointTagname
uoX_NAM = Forms![Prefill Xmtr Data]!TxtQTransmitter
答案 1 :(得分:0)
首先,感谢您的帮助,Pteranodon的建议让我得到了答案。我正在处理的数据库正在对链接数据库进行更改。无论如何,与我没想到的另一张桌子有关系。这导致了密钥违规。