TTABLEの型とSQL

解決


LUKU  2010-01-16 16:01:22  No: 37050  IP: [192.*.*.*]

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-16 16:10:04  No: 37051  IP: [192.*.*.*]

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

編集 削除
igy  2010-01-16 16:23:20  No: 37052  IP: [192.*.*.*]

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

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

編集 削除
LUKU  2010-01-16 16:25:43  No: 37053  IP: [192.*.*.*]

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

編集 削除
DEKO  2010-01-16 19:22:53  No: 37054  IP: [192.*.*.*]

こんにちは。

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-16 19:24:16  No: 37055  IP: [192.*.*.*]

訂正します。

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-16 20:39:18  No: 37056  IP: [192.*.*.*]

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

編集 削除
LUKU  2010-01-17 16:12:26  No: 37057  IP: [192.*.*.*]

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

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

編集 削除
HOta  2010-01-17 16:24:23  No: 37058  IP: [192.*.*.*]

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

編集 削除
LUKU  2010-01-20 23:59:59  No: 37059  IP: [192.*.*.*]

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

編集 削除
LUKU  2010-01-21 00:00:55  No: 37060  IP: [192.*.*.*]

解決チェック

編集 削除