Delphi XE3 FireDACのParamByNameについて

解決


ひろし  2014-06-04 16:14:11  No: 46380

Delphi XE3のFireDACのTADQueryを使用しています。
下記のようなコードを実行すると、レコードが取得できませんでした。
ちなみに、DBはSQL Server 2008 R2 Standardを使用しています。

※TADQueryをフォームに貼り名前をQueryとします。

begin
  Query.SQL.Text:='SELECT * FROM AAA WHERE BBB=:BBB';
  Query.ParamByName('BBB').AsString:='';
  Query.Open;
  if not Query.Eof then
    ShowMessage('データあり')
  else
    ShowMessage('データなし);
  Query.Close;
end;

実際にフィールドBBBにはNULLではなく長さ0の文字列としてレコードが存在します。

  Query.ParamByName('BBB').AsString:='';

  Query.ParamByName('BBB').AsString:=' ';
と半角スペース1文字入れるとレコードが取得できます。

実際は、パラメータに渡す値は変数で渡していますので、
値を渡すたびに事前チェックが必要で不便です。

Query.ParamByName('BBB').AsString:='';

としてレコードを取得する手段はないでしょうか?
ご存知の方がいらっしゃいましたら教えてください。


au  2014-06-04 17:53:49  No: 46381

TADQuery.FormatOptions.StrsEmpty2Nullの値はどうなってますか?
これがTrueに設定されてるとパラメータとかに空文字があった場合にNULLに置換されるみたいですけど。

ttp://docwiki.embarcadero.com/Libraries/XE6/ja/FireDAC.Stan.Option.TFDFormatOptions.StrsEmpty2Null


ひろし  2014-06-04 21:55:30  No: 46382

プロパティ見たところtrueになっていました
falseにして試したらレコードの取得が出来ました

ありがとうございます!!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加