線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:950
推到 Plurk!
推到 Facebook!

元件ADOQuery1要接收一段SQL文~如果是不固定條件值~

尚未結案
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-06 16:17:38 IP:61.221.xxx.xxx 未訂閱
請問各位~    元件ADOQuery1要接收一段SQL文~ 其中有個欄位資料是不固定~ 它是由Memo來作取值的動作~ 比如~ 2301 233 234    sele pc001,pc002... from A where pc002 like '2301' or pc002 like '233' or pc002 like '234' 紅色標明這段描述該如何去作運用,另外是否要宣告陣列變數~ Memo1.Lines.Count Memo1.Lines.Strings[i] 但是如在 With ADOQuery1 do SQL.Clear; SQL.Add('....'); ... {此處設定if ...endif //似乎無法作執行動作} Opend; End 請問大家是否其他好的想法~謝謝 ^^
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-06 16:22:47 IP:218.170.xxx.xxx 未訂閱
    var tmpstr:string;
begin
  tmpstr:='sele pc001,pc002 from A ';
  With ADOQuery1 do
  begin
    close;
    SQL.Clear;
    SQL.Add(tmpstr);
    sql.add(' where  pc002 like ' quotedstr('2301*'));
    sql.add(' or  pc002 like ' quotedstr(233*'));
    Open 
  end;
End;    
發表人 - hahalin 於 2004/12/06 16:36:02
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-06 17:10:36 IP:61.221.xxx.xxx 未訂閱
Hi hahalin 您好~ Memo1所放入值為不固定~ 也許使用者只選一個或二個也或者不選呢~ 那該如何去設定這個部份~ 另外~ quotedstr()是什麼意思~ 謝謝~ ^^
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-06 17:23:59 IP:202.62.xxx.xxx 未訂閱
您好﹗    參考如下試試﹕
procedure TForm1.Button1Click(Sender: TObject);
Var
  I : Integer;
  Str : String;
begin
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('Select pc001, pc002, ... From TableName Where');
  For I:=0 to Memo1.Lines.Count-1 do
  begin
    Str := Memo1.Lines[0];
    ADOQuery1.SQL.Text := ADOQuery1.SQL.Text   ' Or pc002 = '   Str;
  end;
  ADOQuery1.Open;
end;
========================= 我是您的朋友﹐有您真好﹗ =========================
------
忻晟
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-06 17:27:23 IP:218.170.xxx.xxx 未訂閱
quotedstr : 字串前後加單引號
peterpcc
一般會員


發表:6
回覆:37
積分:13
註冊:2004-09-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-06 17:45:49 IP:221.239.xxx.xxx 未訂閱
SORRY! OR 這兒會出問題,我多補一項判定
procedure TForm1.Button1Click(Sender: TObject);
Var
  I : Integer;
  Str : String;
  v_First:boolean;
begin
  v_Start:=True;
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('Select pc001, pc002, ... From TableName Where');
  For I:=0 to Memo1.Lines.Count-1 do
  begin
    Str := Memo1.Lines[i];
    if not First then
      v_First:=False
    else
      ADOQuery1.SQL.Text := ADOQuery1.SQL.Text  ' or ';
    ADOQuery1.SQL.Text := ADOQuery1.SQL.Text   ' pc002 = '   Str;
  end;
  ADOQuery1.Open;
end;
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-12-07 10:25:49 IP:61.221.xxx.xxx 未訂閱
謝謝各位所提供資料~    因為這一段Sql文很長~是否有什麼方法可以秀Sql文~ 目前我試的方式是~利用meno來秀這些sql文~ Form1.Memo2.Text := ADOQuery1.SQL.Text; 請問這些是不是行不通呢~ 謝謝~ ^^
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-12-07 10:47:20 IP:218.174.xxx.xxx 未訂閱
引言: 目前我試的方式是~利用meno來秀這些sql文~ Form1.Memo2.Text := ADOQuery1.SQL.Text;
這是ok的呀... 或是adoquery.sql.savetofile 也是可以...
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-12-07 11:23:47 IP:202.62.xxx.xxx 未訂閱
您好﹗    一般的字串顯示皆可顯示SQL的Text內容﹐因為其都是String形態﹒ 如ShowMessage等亦可﹕ ShowMessage(ADOQuery1.SQL.Text);    ========================= 我是您的朋友﹐有您真好﹗ =========================
------
忻晟
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-12-07 16:56:54 IP:61.221.xxx.xxx 未訂閱
謝謝 peterpcc / hahalin / cashxin2002 所提供資料~ 想請問大家~ 相同ADOQuery1是否可以作刪除-> 新增(單筆) -> 新增(明細多筆) 每作一個處理後~再關閉~作開啟~ 或者是要建立多個ADOQuery~ 謝謝~ ^___^
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-12-07 17:03:11 IP:202.62.xxx.xxx 未訂閱
您好﹗    ADOQuery元件除了支援SQL語法之外﹐也可使用相同于ADOTable元件的Insert; Edit; Post; Delete等方法﹐使用方法亦相同于ADOTable﹒ 將資料集元件關閉后再開啟的目的在于從回端取得當前最新的資料內容﹐僅對于異動資料集元件的方法來講﹐在不涉及查詢的動作﹐應不必要﹒    ========================= 我是您的朋友﹐有您真好﹗ =========================
------
忻晟
likush
高階會員


發表:5
回覆:235
積分:103
註冊:2002-10-08

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-12-08 01:54:04 IP:220.134.xxx.xxx 未訂閱
提供個人淺見,依您的需求 用IN的方式是否會好處理呢??
Var
  I : Integer;
  WhereSQL : String;
begin
  For I:=0 to Memo1.Lines.Count-1 do
  begin
    If Trim(WhereSQL) <> '' Then WhereSQL := WHereSQL   ','
    WhereSQL := ''' Memo1.Lines[I] ''';    
  end;
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('Select pc001... From TableName Where Pc0002 In (' WhereSQL ' )');
  ADOQuery1.Open;
========================= 讀萬卷書~不如來K.TOP走一遭 =========================
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-12-08 10:43:59 IP:61.221.xxx.xxx 未訂閱
謝謝likush~ 我會試試看~ 請問cashxin2002一下~ 連續異動資料表格~就您所說的~將ADOQuery作關閉再開啟~ 但是試著似乎發生錯誤訊息~[ADOQuery2:Command Text does not return set] 另外,目前我需要去連續新增明細資料我該如何去作呢~ for I:=1 to 100 do With ADOQuery1 do begin CLOSE; OPEN; SQL.Clear; SQL.Add('Insert Into COPTD .....'); ExecSQL; end; 謝謝~ ^^
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-12-08 10:58:31 IP:202.62.xxx.xxx 未訂閱
您好﹗    ExecSQL之前﹐資料集元件要處于Close狀態﹒
for I:=1 to 100 do
  With ADOQuery1 do
    begin
      CLOSE;
      OPEN; //此句刪除
      SQL.Clear;
      SQL.Add('Insert Into COPTD .....');
      ExecSQL;
    end;
========================= 我是您的朋友﹐有您真好﹗ =========================
------
忻晟
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#15 引用回覆 回覆 發表時間:2004-12-08 13:05:23 IP:61.221.xxx.xxx 未訂閱
謝謝 cashxin2002 這個部份己解決~ 麻煩您~
系統時間:2024-06-29 5:54:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!