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发生了意想不到的关系。那是导致密钥违规的原因。
我正在尝试构建一个表单,以根据表单中的客户输入更新 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发生了意想不到的关系。那是导致密钥违规的原因。