У меня есть таблица, в которую я импортирую данные из внешнего источника, обновляю существующие значения, если запись присутствует, и вставляю новую строку, если ее нет. Для этой цели я использую параметризованный запрос, и, конечно, я хотел бы повторно использовать определения параметров и их значения для обоих случаев.
Что я вижу, так это то, что если я устанавливаю свойство 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
В чем причина этого? И есть ли другой обходной путь, кроме как, как указано выше, для повторной установки значений параметров?