2017-05-12 9 views
1

これはうまく動作します:SQLクエリパラメータ

Query = 'SELECT * from table_1 where code = :value; '; 

私はしかし、LIKEステートメントを使用しようとしていると、それはこの場合、パラメータ値を見つけることができなかったと述べている:

Query = 'SELECT * from table_1 where code LIKE ''%:value;%'''; 

Param := ADOQuery1.Parameters.ParamByName('value'); 
Param.DataType := ftString; 
Param.Value := 'bob'; 

引用符を無視するためにバックスラッシュを使用したかったのですが、ほとんどの言語で動作しますが、Delphiでは動作しません。

+1

値から ';'を削除するとどうなりますか?確かにそれはそれを捨てているものです。私はそれが有効なSQL構文だとは思わなかった。 **編集**実際には、私はあなたの問題を参照してください。パラメータを引用符で囲むことはできませんが、同時に '%'が必要です。代わりに、パラメータに渡す実際の値に '%'を含めます。 –

+0

それは働いた!ありがとう –

+0

どちらの部分がうまくいったのですか? –

答えて

5

パラメータは自動的に文字列の周りに引用符を置きます。したがって、そのような引用符をSQLクエリに含めることはできません。そのため、クエリでも%の構文を渡すことはできません。

代わりに、文を元のままにして(=LIKEと置き換えて)、代わりに%を渡してください。サイドノートでは

Query = 'SELECT * from table_1 where code LIKE :value'; 
Param := ADOQuery1.Parameters.ParamByName('value'); 
Param.DataType := ftString; 
Param.Value := '%bob%'; 

、このコードはもう少しエレガントだ...

ADOQuery1.Parameters.ParamValues['value']:= '%bob%'; 

それは文字列だということを教えする必要はありません。それは自動的に検出されます。

1

"それは文字列(Param.DataType)であることを伝える必要はなく、自動的に検出します。

一般に、それは真です。 実際には、.ParamCreate,.ResourceOptions.AssignedValue.rvParamCreate,.ResourceOptions.AssignedValue.rvDefaultParamType=falsedefaultParamDataTypeなどの一部のTConnectionプロパティに依存します。これらのプロパティが変更されていない場合、 これは自動的に検出されます

したがって、明示的な場合もあります。

関連する問題