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:='';
としてレコードを取得する手段はないでしょうか?
ご存知の方がいらっしゃいましたら教えてください。
TADQuery.FormatOptions.StrsEmpty2Nullの値はどうなってますか?
これがTrueに設定されてるとパラメータとかに空文字があった場合にNULLに置換されるみたいですけど。
ttp://docwiki.embarcadero.com/Libraries/XE6/ja/FireDAC.Stan.Option.TFDFormatOptions.StrsEmpty2Null
プロパティ見たところtrueになっていました
falseにして試したらレコードの取得が出来ました
ありがとうございます!!
ツイート | ![]() |