【问题标题】:Access Update QueryDef Parameters not found未找到访问更新 QueryDef 参数
【发布时间】:2019-07-15 20:24:54
【问题描述】:

我正在尝试使用 QueryDef 创建两个查询。

这个插入查询完美运行,我可以分配参数:

Dim qryAddPackage As String: qryAddPackage = "" & _
    "INSERT INTO `RMF_tblPackages` " & _
    "(`SystemID`, `DoD`, `DateCreated`, `LastModified`, `LastUpdatedBy`) " & _
    "VALUES ([SystemID], [DoD], NOW(), NOW(), [UID])"

With CurrentDb.CreateQueryDef(vbNullString, qryAddPackage)
    .Parameters!SystemID.Value = cbbSystems.Value
    .Parameters!DoD.Value = Me.txtDoD.Value
    .Parameters!UID.Value = strGetUserID()
    .Execute
End With

但是,在这个更新查询中,我只能访问 WHERE 语句中的参数 UID:

Dim qryUpdatePkg As String: qryUpdatePkg = "" & _
"UPDATE `RMF_tblPackages` " & _
"SET " & _
    "`SystemID` = [SystemID], `DoD` = [DoD], `LastModified` = NOW(), `LastUpdatedBy` = [UID] " & _
" WHERE `PackageID` = [PackageID]"

With CurrentDb.CreateQueryDef(vbNullString, qryUpdatePkg)
    .Parameters("SystemID").Value = cbbSystems.Value
    .Parameters!DoD.Value = Me.txtDoD.Value
    .Parameters!UID.Value = strGetUserID()
    .Parameters!PackageID.Value = Me.lbxPackages.Value
    .Execute dbSeeChanges
End With

在尝试分配参数的每一行中,它只是说参数的名称不在集合中。

我试过这样分配它们:

.Parameters("PackageID").Value = Me.lbxPackages.Value

也一样,但这也不起作用。

我尝试使用一些数据运行更新查询,它运行良好,因此查询正常。

.Params.count 返回 1,因为它只识别一个参数。

关于为什么更新查询无法识别参数的任何其他想法?

【问题讨论】:

  • 这个 SQL 看起来像 MySQL 语法,而不是 Access SQL。

标签: sql vba ms-access query-parameters


【解决方案1】:

使用[ ] 引用标识符。在 Access 中,反引号无效(与 MySQL 不同)。此外,列名和参数名使用相同的引号字符,因此您必须为参数选择不同的名称。仅当名称与保留字或函数名称(如DateFromByOrder 等)冲突时,才需要引用标识符。

Dim qryUpdatePkg As String

qryUpdatePkg = "UPDATE RMF_tblPackages " & _
"SET " & _
  "SystemID = prmSystemID, DoD = prmDoD, LastModified = Now(), LastUpdatedBy = prmUID " & _
" WHERE PackageID = prmPackageID"

With CurrentDb.CreateQueryDef(vbNullString, qryUpdatePkg)
    .Parameters("prmSystemID").Value = cbbSystems.Value
    .Parameters!prmDoD.Value = Me.txtDoD.Value
    .Parameters!prmUID.Value = strGetUserID()
    .Parameters!prmPackageID.Value = Me.lbxPackages.Value
    .Execute dbSeeChanges
End With

在第一个查询中进行相同的更改。

【讨论】:

  • 希望您不介意,我将“转义”更正为“引用标识符”术语; “逃跑”更多地与例如在字符串文字中加倍单引号字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 2013-01-25
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多