DELPHI5で、データベースにあるTTABLEの1つの項目PRODUCT_IDの型が数値型であるとき、SQLのSELECT/UPDATE/INSERT文のWHEREで、SQL.ADD('WHERE PRODUCT_ID =''' + delphiPRODUCT_ID.TEXT + '''');
のように指定した場合、TTABLEの型(数値型)とdelphiフォーム上の型(string型)とで不一致が生じています。ただ、現在のところ、SELECT/UPDATE/INSERT処理は正常にできています。ただ、以前参考書でdelphiの型は、厳しいということを読んだのですが、'''+delphiPRODUCT_ID.TEXT +'''');の部分は、数値型に一度変えるべきでしょうか?また、そうだとしたら、PARAMSなどの変数を使うやり方ではなく、このままWHEREの部分に何か型を返還させるものを書いて、TTABLEとの型を一致させる方法はありますか?
前の質問をほったらかしにしたまま次の質問をしないように。
>SQL.ADD('WHERE PRODUCT_ID =''' + delphiPRODUCT_ID.TEXT + '''');
>のように指定した場合、TTABLEの型(数値型)とdelphiフォーム上の型(string型)とで不一致が生じています。
一致させるには、
SQL.ADD('WHERE PRODUCT_ID = ' + delphiPRODUCT_ID.TEXT);
とすれば、よいのでは?
すみません。TTABLEではなく、ただのDBにあるTABLEです。
こんにちは。
SQL.ADD('WHERE PRODUCT_ID = :_PRODUCT_ID');
SQL.ParamByName('_PRODUCT_ID').AsInteger := StrToIntDef(delphiPRODUCT_ID.Text, 0);
ADOQuery なら、
SQL.Parameters.ParamByName('_PRODUCT_ID').Value := StrToIntDef(delphiPRODUCT_ID.Text, 0);
のように、パラメータを使えば "レコードとオブジェクトの型の違い" に
悩まなくて済むようになります。
# 数値項目には数値、文字列項目には文字列で代入した方が
# 分り易いですからね。
訂正します。
QRY.SQL.ADD('WHERE PRODUCT_ID = :_PRODUCT_ID');
QRY.ParamByName('_PRODUCT_ID').AsInteger := StrToIntDef(delphiPRODUCT_ID.Text, 0);
ADOQuery なら、
QRY.SQL.ADD('WHERE PRODUCT_ID = :_PRODUCT_ID');
QRY.Parameters.ParamByName('_PRODUCT_ID').Value := StrToIntDef(delphiPRODUCT_ID.Text, 0);
実際のデーターベースは何でしょうか?データーベースによれば、その型がルーズなものもあります。
また、Delphiは型の検査が厳しいですが、このテーブルのPRODUCT_IDの型は何になっていますか?
DBはオラクルです。PRODUCT_IDの型はINT型です。オラクルは型は厳しいですか?
DEKOさんのやりかたは以前試したことがあります。ただ、今回は、パラメーターを使わずにできる方法(SQL.ADD('WHERE PRODUCT_ID =''' + delphiPRODUCT_ID.TEXT + ''''とった);を探していたため、お伺いしました。
実際にSQL Plusで実行できる形式のSQL文を作れば良いだけではないですか?
その場合、
SQL.ADD('WHERE PRODUCT_ID = ' + delphiPRODUCT_ID.TEXT);
となります。
教えてもらった方法で解決しました。ありがとうございました。
解決チェック
ツイート | ![]() |