ms-access - 为什么 DoCmd.SetParameter 'expression' 参数需要控件的名称,而不是值?
问题描述
的文档DoCmd.SetParameter
说:
expression. SetParameter( _Name_, _Expression_ )
expression A variable that represents a DoCmd object.
Parameters
Name Required/Optional Data type Description
Name Required Variant The name of the parameter. The name must
match the name of the parameter
expected by the BrowseTo, OpenForm,
OpenQuery, OpenReport, or RunDataMacro method.
Expression Required Variant An expression that evaluates to a value to
assign to the parameter.
但是当我尝试这个时:
DoCmd.SetParameter "sAction", "UPDATE"
我收到错误消息
Run-time error '2482':
Vendor Compliance System cannot find the name 'UPDATE' you entered in the expression.
所以我用文本框“sAction”创建了一个名为“frmTEMP”的表单,然后尝试了这个,它有效:
DoCmd.SetParameter "sAction", "forms!frmTEMP!sAction"
所以我的问题是,为什么 DoCmd.SetParameter 'expression' 参数需要控件的名称,而不是值?由于我手边没有打开的表单,我该如何为 SetParameter 提供一个值呢?
解决方案
June7 提供了一个答案,解决了我的问题。谢谢!
所以,这是我的代码:
Public Sub sendEvent_ValueChange(RecordID As Long, TableID As String,
ValueID As String, newVal As Variant, oldVal As Variant)
DoCmd.SetParameter "sTable", TableID
DoCmd.SetParameter "sField", ValueID
DoCmd.SetParameter "sAction", "UPDATE"
DoCmd.SetParameter "recordID", RecordID
DoCmd.SetParameter "value_Old", oldVal
DoCmd.SetParameter "value_New", newVal
DoCmd.RunDataMacro "ChangeLog.AddLog"
End Sub
这个 sub 的想法是,当用户修改一个未绑定的控件时,afterUpdate 事件将调用它来将表/源名称、字段名称、旧值和新值发送到“ChangeLog”表。“AddLog”是该表上的一个命名数据宏,它检查数据类型(布尔型、长整型、字符串等)并将数据放入正确类型的字段中。
问题是它正在查找“SetParameter”命令的第二个参数作为打开表单上控件的名称,而不仅仅是一个值。要将其解释为一个值,它必须用引号括起来,例如
DoCmd.SetParameter "sTable", "'" & TableID & "'"
DoCmd.SetParameter "sAction", "'UPDATE'"
等等
推荐阅读
- gdb - gdb 可以打印全局变量的历史吗?
- javascript - AWS SDK - 如何创建一个 lambda 函数以从用户池中列出组?
- r - 尝试为 NLP 生成频率不会产生真正的错误
- typescript - 打字稿通用索引类型
- javascript - javascript 小书签可以从 excel 或 CSV 文件中读取吗
- r - 如何使用 unicode 箭头导出高分辨率 ggplot 图形
- python - 在 Python 中记录到文件
- reactjs - 如何监控 Firestore 中的管理员访问权限?
- teamcity - 有没有办法在 TeamCity 中查看模板列表?
- python - 无头时如何使美丽的汤4工作?