我有一个表,将从外部源导入数据,如果存在记录,则更新现有值,如果不存在,则插入新行。为此,我使用了参数化查询,当然,我想在两种情况下重用参数定义及其值。
我看到的是,如果我设置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
这是什么原因?除了上述以外,还有其他解决方法吗?再次设置参数值?
答案 0 :(得分:1)
重置SQL后,它变成两个不同的查询。因此,必须再次分配参数。