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

Vba 使用Parameters子句设置Querydef.SQL属性后,Querydef.Parameters值消失,vba,ms-access,Vba,Ms Access,我有一个从外部源导入数据的表,如果记录存在,则更新现有值,如果不存在,则插入新行。为此,我使用了一个参数化查询,当然我希望在这两种情况下都重用参数定义及其值 我看到的是,如果我设置QueryDef的.SQL属性,然后定义参数值,它就可以正常工作。但是如果我用另一种方法(就像我在函数中插入的部分所做的那样),我为参数设置的值就会消失,因此我必须再次设置它们,插入才能工作;如果不这样做,则会出现错误“参数太少。应为2。” 以下是相关的代码: Set qdef = db.CreateQueryDef(

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

我看到的是,如果我设置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

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

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