select like文の書き方

解決


りな  2010-01-01 22:44:13  No: 36592

現在、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;
   この後は省略


HOta  2010-01-02 01:14:46  No: 36593

> 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);
でどうでしょうか?
この場合、パラメターは要りません。


りな  2010-01-02 04:06:18  No: 36594

Add('Where ID = ' + edNAME.Text);のところですが、たとえば、「大阪市堺町南1−3−4−6」という住所があった場合、ADD('where ADDRESS ='  edADDRESS.Text);と作成すると、このフィールドに「堺町」と入力するとこの大阪市堺町南」が抽出されるのでしょうか?

すみません。年始はちょっとサーバーがメンテナンスに入ってしまって確認できないので HOtaさんの方法を実行できない状態にあります。ですので、サーバーが復旧したらすぐにプログラムが組めるよう、確認させていただきました。


igy  2010-01-03 00:03:33  No: 36595

>ADD('where ADDRESS ='  edADDRESS.Text);と作成すると、

HOta さんが書かれた

>  Add('Where ADDRESS like ''% + edADDRESS.Text + %''');

のほうでなくて??


りな  2010-01-03 00:49:41  No: 36596

igyさん、ご指摘ありがとうございます。

HOtaさん、見間違えをして、申し訳ございません。

サーバーが普及次第、さっそく確認してみます。


HOta  2010-01-04 20:42:20  No: 36597

ただ、データーベースの種類で、ダブルクォーテーションでくくると、項目名と判断するものもあるようなので、注意してください。


りな  2010-01-05 08:56:21  No: 36598

うまく機能しました。みなさん、アドバイスありがとうございました。


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

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






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