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

VBA code will not update table field from form input

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

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 的值,并且它是从表单中正确更新的。

我很确定我引用的表单字段不正确,但我尝试了各种其他方法,none 其中更新了 table。

如果我尝试以下代码,正确的字段会更新,但它不是来自表单的条目:

'this updates the correct fields
db.Execute "UPDATE [IO Data] SET [io data].x_nam = 'BRKRCMD'" & _
    "WHERE [IO Data].tagname Like 'bkr7*';"

所以我的问题似乎在于我如何引用 uoX_NAM 变量。

每当您执行在代码中动态构造的 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*';

此外,您可以通过引用控件的值而不是文本 属性 更直接地设置变量而无需 SetFocus。由于 Value 是默认值 属性,您甚至可以省略 .Value 并仅引用控件名称:

uiTAGNAME = Forms![Prefill Xmtr Data]!TxtCPointTagname
uoX_NAM = Forms![Prefill Xmtr Data]!TxtQTransmitter

首先,感谢您的帮助,Pteranodon 的建议使我找到了答案。我正在使用的数据库正在链接数据库中进行更改。反正和另外一个table发生了意想不到的关系。那是导致密钥违规的原因。