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 поддерживает только позиционные параметры.

Так что именно ваш драйвер переводит именованные параметры в позиционные.

Другие вопросы по тегам