Delphi 2010, UIB, Firebird: повторяющиеся имена параметров
Я использую Delphi 2010 и UIB для доступа к базе данных Firebird.
Я пытаюсь запустить запрос
SELECT
RECID
FROM TABLE
WHERE ((:DX = '') OR (DX=:DX))
AND ((:POSTCODE='') OR (POSTCODE=:POSTCODE))
Обратите внимание, что я использую каждый именованный параметр дважды в операторе.
Когда я готовлю его в TUIBQuery, я получаю ParamCount=2 и два параметра с именем DX. Когда я отслеживаю код, я вижу, как TSQLParams.Parse проходит через мой SQL и вызывает AddFieldA четыре раза. Я вижу, что дубликаты распознаются и добавляются в конец FXSQLDA, но FParamCount не увеличивается.
В качестве временного исправления я добавил такой инкремент, и теперь я получаю (DX, DX, POSTCODE, POSTCODE) в качестве списка параметров. Такого рода работы.
Вопросы:
- Поддерживается ли Firebird вид повторного использования параметров, который я пытаюсь использовать?
- По UIB?
- Является ли мое исправление жизнеспособным?
- Есть ли лучшие исправления?
1 ответ
Сам Firebird не поддерживает именованные параметры в динамическом SQL (он поддерживает процедурный SQL). Firebird поддерживает только позиционные параметры.
Так что именно ваш драйвер переводит именованные параметры в позиционные.