VBA代码不会从表单输入更新表字段

时间:2015-02-06 19:55:33

标签: vba access-vba

我正在尝试构建一个表单,以根据表单中的客户输入更新表中的字段。表单有一个条件字段,用于搜索匹配的条目,然后是更新字段以更新另一个表字段。我的问题是,当我从表单中引用字段时,我无法使更新生效。这是代码:

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变量。

2 个答案:

答案 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的建议让我得到了答案。我正在处理的数据库正在对链接数据库进行更改。无论如何,与我没想到的另一张桌子有关系。这导致了密钥违规。