現在、delphi4のservice pack3のデータベースoracle 8iを使って、プログラムを組んでいるのですが、検索条件のselect where like文が書き方が分からなく、うまく機能しません。また、その中の変数の型の定義についてもわからないところがあるので、お手数ですが、教えていただけないでしょうか(初心者なので、詳しくお願い致します)?
selectlike文は、フォーム上に入力した文字・値が含まれる住所を抽出したいと考えています。
また、別項目で年齢(テーブルではage int型)があるんですけれでも、delphiの中で、paramsを使ってint型の変数を使い、pramas[2].AsInteger := s3とするとエラーが出てしまします(もちろん、strToIntで型を一致させています)。しかし、string型で処理しようとすると問題なくできます。データベース上のテーブルではint型なのでdelphi上でstring型で処理すると何らかの不具合が出てきそうなのですが、理解に苦しんでいます。よろしくお願いいたします。
私が書いているselect where like文
var
s1 : String;
s2 : String;
begin
s1 := ed_NAME.Text;
s2 := ed_ADDRESS.Text;
with query 1 do
begin
close;
with SQL do
begin
if edNAME.Text <> '' then
begin
Clear;
ADD('Select * from TableA');
Add('Where ID = Value1')
prepare;
params[0].AsString := s1;
end
else if edADDRESS.Text <> '' then
begin
Clear;
ADD('Select * from TableA');
Add('Where ADDRESS like "% + edADDRESS + %" = Value2');
prepare;
params[1].AsString := s2;
end;
この後は省略
> Add('Where ADDRESS like "% + edADDRESS + %" = Value2');
ちょっと構文がおかしいですね。
実際SQLPlusで試してみましたか?
Select * from TableA
Where ADDRESS like '%東%'
だと、住所に東を含むレコードを選択します。
Likeに=は使いません。
デバッグでSQLに何が設定されているかチェックしてみてください。
毎回この様にSQL文を設定しているのなら、
Add('Where ADDRESS like ''% + edADDRESS.Text + %''');
edNAME.Textも同様に
Add('Where ID = ' + edNAME.Text);
でどうでしょうか?
この場合、パラメターは要りません。
Add('Where ID = ' + edNAME.Text);のところですが、たとえば、「大阪市堺町南1−3−4−6」という住所があった場合、ADD('where ADDRESS =' edADDRESS.Text);と作成すると、このフィールドに「堺町」と入力するとこの大阪市堺町南」が抽出されるのでしょうか?
すみません。年始はちょっとサーバーがメンテナンスに入ってしまって確認できないので HOtaさんの方法を実行できない状態にあります。ですので、サーバーが復旧したらすぐにプログラムが組めるよう、確認させていただきました。
>ADD('where ADDRESS =' edADDRESS.Text);と作成すると、
HOta さんが書かれた
> Add('Where ADDRESS like ''% + edADDRESS.Text + %''');
のほうでなくて??
igyさん、ご指摘ありがとうございます。
HOtaさん、見間違えをして、申し訳ございません。
サーバーが普及次第、さっそく確認してみます。
ただ、データーベースの種類で、ダブルクォーテーションでくくると、項目名と判断するものもあるようなので、注意してください。
うまく機能しました。みなさん、アドバイスありがとうございました。
ツイート | ![]() |