找不到访问更新 QueryDef 参数
Access Update QueryDef Parameters not found
我尝试使用 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
returns 1 如您所料,因为它只识别一个参数。
关于为什么该更新查询无法识别参数的任何其他想法?
使用 [ ]
来引用标识符。在 Access 中,反引号无效(与 MySQL 不同)。此外列名和参数名使用相同的引号,因此您必须为参数选择不同的名称。仅当名称与保留字或函数名称冲突时才需要引用标识符(如 Date
、From
、By
、Order
等)。
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
在第一个查询中进行相同的更改。
我尝试使用 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
returns 1 如您所料,因为它只识别一个参数。
关于为什么该更新查询无法识别参数的任何其他想法?
使用 [ ]
来引用标识符。在 Access 中,反引号无效(与 MySQL 不同)。此外列名和参数名使用相同的引号,因此您必须为参数选择不同的名称。仅当名称与保留字或函数名称冲突时才需要引用标识符(如 Date
、From
、By
、Order
等)。
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
在第一个查询中进行相同的更改。