1

Delphi で StoredProc コンポーネントを使用し ParamByname('ParamName').Clearている場合、NULL 値を送信できます。

しかし、クエリ コンポーネントを使用する場合、どのように NULL 値を渡すことができますか?

with Query do
begin
 SQL.ADD('exec d_upd_calc'+Quoted(EditCalc.Text));
end

上記のシナリオでは、編集ボックスが空白の場合に NULL を送信したいと考えています。

Delphi 2010、Sybase で Unidac を使用しています。

4

2 に答える 2

2

クエリでも、パラメーターを操作できます。

Query.SQL.Text := 'exec d_upd_calc :myparam';
Query.Prepare;
Query.ParamByName('myparam').Clear;

引用符を処理してはならず、SQL インジェクションによるセキュリティ リークを回避してはならないため、完全な文字列を作成するよりもパラメータを使用する方が適切です。

于 2011-11-22T17:13:44.523 に答える
1

Advantage DB では、次のようなことを行います。

var
  sqlText: string;

with Query do
begin
  if EditCalc.Text = '' then
    sqlText := 'exec d_upd_calc NULL' else
    sqlText := 'exec d_upd_calc '+Quoted(EditCalc.Text);
  SQL.ADD(sqlText);
end;

キーワードもある場合、NULLこれは機能するはずです。

QuotedSQL インジェクションを防ぐために危険なユーザー入力を削除/エスケープしますか? もしそうなら、それは良いことです。そうでない場合は、そうすべきです。

于 2011-11-22T17:09:26.143 に答える