使用PARAMETERS子句设置Querydef.SQL属性后,Querydef.Parameters值消失

时间:2019-05-23 22:52:15

标签: access-vba

我有一个表,将从外部源导入数据,如果存在记录,则更新现有值,如果不存在,则插入新行。为此,我使用了参数化查询,当然,我想在两种情况下重用参数定义及其值。

我看到的是,如果我设置QueryDef的.SQL属性,然后定义参数值,则可以正常工作。但是,如果我以相反的方式进行操作(就像我想在执行插入操作的函数部分中所做的那样),则我为参数设置的值会消失,因此我必须再次为参数设置它们。投入工作;如果不这样做,则会出现错误“参数太少。预期为2”。

以下是相关代码:

Set qdef = db.CreateQueryDef("")

strSQLParams = "PARAMETERS [P1] Text(25), [P2] Text(25); "
strSQLBody = "UPDATE T1 SET [Field1] = [P1] WHERE [Field2] = [P2]; "

qdef.SQL = strSQLParams & strSQLBody
qdef.Parameters("[P1]").Value = element(key1)
qdef.Parameters("[P2]").Value = element(key2)
qdef.Execute

If qdef.RecordsAffected = 0 Then
    strSQLBody = "INSERT INTO T1 ([Field1], [Field2]) VALUES ([P1], [P2]); "
    qdef.SQL = strSQLParams & strSQLBody

    '!!! if I don't set these again, I get an error "Too few parameters"
    qdef.Parameters("[P1]").Value = element(key1)
    qdef.Parameters("[P2]").Value = element(key2)
    qdef.Execute

Else
End If
Set qdef = Nothing

这是什么原因?除了上述以外,还有其他解决方法吗?再次设置参数值?

1 个答案:

答案 0 :(得分:1)

重置SQL后,它变成两个不同的查询。因此,必须再次分配参数。