TTABLEの型とSQL

解決


LUKU  2010-01-17 01:01:22  No: 37050

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との型を一致させる方法はありますか?


放置ぷれいがお好き?  2010-01-17 01:10:04  No: 37051

前の質問をほったらかしにしたまま次の質問をしないように。


igy  2010-01-17 01:23:20  No: 37052

>SQL.ADD('WHERE PRODUCT_ID =''' + delphiPRODUCT_ID.TEXT + '''');
>のように指定した場合、TTABLEの型(数値型)とdelphiフォーム上の型(string型)とで不一致が生じています。

一致させるには、
SQL.ADD('WHERE PRODUCT_ID = ' + delphiPRODUCT_ID.TEXT);
とすれば、よいのでは?


LUKU  2010-01-17 01:25:43  No: 37053

すみません。TTABLEではなく、ただのDBにあるTABLEです。


DEKO  2010-01-17 04:22:53  No: 37054

こんにちは。

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);

のように、パラメータを使えば "レコードとオブジェクトの型の違い" に
悩まなくて済むようになります。

# 数値項目には数値、文字列項目には文字列で代入した方が
# 分り易いですからね。


DEKO  2010-01-17 04:24:16  No: 37055

訂正します。

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);


HOta  2010-01-17 05:39:18  No: 37056

実際のデーターベースは何でしょうか?データーベースによれば、その型がルーズなものもあります。
また、Delphiは型の検査が厳しいですが、このテーブルのPRODUCT_IDの型は何になっていますか?


LUKU  2010-01-18 01:12:26  No: 37057

DBはオラクルです。PRODUCT_IDの型はINT型です。オラクルは型は厳しいですか?

DEKOさんのやりかたは以前試したことがあります。ただ、今回は、パラメーターを使わずにできる方法(SQL.ADD('WHERE PRODUCT_ID =''' + delphiPRODUCT_ID.TEXT + ''''とった);を探していたため、お伺いしました。


HOta  2010-01-18 01:24:23  No: 37058

実際にSQL Plusで実行できる形式のSQL文を作れば良いだけではないですか?
その場合、
SQL.ADD('WHERE PRODUCT_ID = ' + delphiPRODUCT_ID.TEXT);
となります。


LUKU  2010-01-21 08:59:59  No: 37059

教えてもらった方法で解決しました。ありがとうございました。


LUKU  2010-01-21 09:00:55  No: 37060

解決チェック


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

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






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