1

Delphi 2010 と UIB を使用して Firebird データベースにアクセスしています。

クエリを実行しようとしています

    SELECT
        RECID
    FROM TABLE
    WHERE ((:DX = '') OR (DX=:DX))
        AND ((:POSTCODE='') OR (POSTCODE=:POSTCODE))

ステートメントで名前付きパラメーターをそれぞれ 2 回使用していることに注意してください。

TUIBQuery で準備すると、ParamCount=2 と DX という名前の 2 つのパラメーターが得られます。コードをトレースすると、TSQLParams.Parse が my SQL を渡し、AddFieldA を 4 回呼び出していることがわかります。重複が認識され、FXSQLDA の末尾に追加されていることがわかりますが、FParamCount はインクリメントされていません。

一時的なばかげた修正として、このようなインクリメントを追加し、(DX、DX、POSTCODE、POSTCODE) をパラメーター リストとして取得するようになりました。そういう作品です。

質問:

  • 私が試みているパラメータの再利用は Firebird でサポートされていますか?
  • UIBで?
  • 私の修正は実行可能ですか?
  • より良い修正はありますか?
4

1 に答える 1

1

Firebird 自体は、動的 SQL で名前付きパラメーターをサポートしていません (手続き型 SQL ではサポートしています)。Firebird は位置パラメーターのみをサポートします。

したがって、名前付きパラメーターを位置パラメーターに変換するのはドライバーです。

于 2014-02-23T20:11:48.090 に答える