Значения Querydef.Parameters исчезают после установки свойства Querydef.SQL с предложением PARAMETERS - PullRequest
1 голос
/ 24 мая 2019

У меня есть таблица, в которую я импортирую данные из внешнего источника, обновляю существующие значения, если запись присутствует, и вставляю новую строку, если ее нет. Для этой цели я использую параметризованный запрос, и, конечно, я хотел бы повторно использовать определения параметров и их значения для обоих случаев.

Что я вижу, так это то, что если я устанавливаю свойство 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 Ответ

1 голос
/ 24 мая 2019

После сброса SQL он становится двумя разными запросами.Таким образом, параметры должны быть назначены снова.

...