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

SQL語法

尚未結案
avalokita
一般會員


發表:29
回覆:35
積分:12
註冊:2003-09-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-21 15:26:26 IP:203.70.xxx.xxx 未訂閱
請教一個SQL的查詢問題: 若有語法如下, Select * from Tabel where 性別=sex and 年級=degree and 科系=Major 上面有三個變數sex,degree,和Major 其中sex={F,M},degree={1,2,3,4},major={A,B,C,D,E} 這語法可讓我們找到符合Sex=F,degree=3,major=C的資料.. 可是若我們想找到所有一年級男生的資料,不限科系的話, 則Major變數的值要如何設,才能得到我們想要的資料... 意即讓此語法,只藉由參數的設定... 而能有等同如下命令的效力... Select * from Tabel where 性別=sex and 年級=degree
cxg
中階會員


發表:116
回覆:192
積分:76
註冊:2004-02-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-21 15:45:50 IP:61.237.xxx.xxx 未訂閱
可以改成 Select * from Tabel where 性別=sex and 年級=degree and 科系 IN (A,B,C,D,E)
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-06-21 16:00:27 IP:210.65.xxx.xxx 未訂閱
Hi avalokita,    
SQL Command:
Select  *
from    Tabel
where   (sex = :p_sex or :p_sex is null)
and     (degree = :p_degree or :p_degree is null)
and     (Major = :p_major or :p_major is null)    程式碼:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Query1.Close;
  Query1.ParamByName('p_sex').Value := Edit1.Text;
  Query1.ParamByName('p_degree').Value := Edit2.Text;
  Query1.ParamByName('p_major').Value := Edit3.Text;
  Query1.Open;
end;
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
avalokita
一般會員


發表:29
回覆:35
積分:12
註冊:2003-09-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-06-21 23:03:59 IP:211.74.xxx.xxx 未訂閱
引言: Hi avalokita,
SQL Command:
Select  *
from    Tabel
where   (sex = :p_sex or :p_sex is null)
and     (degree = :p_degree or :p_degree is null)
and     (Major = :p_major or :p_major is null)    程式碼:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Query1.Close;
  Query1.ParamByName('p_sex').Value := Edit1.Text;
  Query1.ParamByName('p_degree').Value := Edit2.Text;
  Query1.ParamByName('p_major').Value := Edit3.Text;
  Query1.Open;
end;
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ---------------------------------- < face="Verdana, Arial, Helvetica"> 謝謝Fisherman的回覆! 可是我還是有一些疑問, 就是如何將值傳給變數,使它得到我們想要的效果呢? 如命題所示, Query1.ParamByName('p_sex').Value := Edit1.Text; Query1.ParamByName('p_degree').Value := Edit2.Text; Query1.ParamByName('p_major').Value := Edit3.Text; 我們可設為Edit1.Text:=F;Edit2.Text:=1; 那Edit3.Text:=?? 才可得到不限科系的效果呢?
avalokita
一般會員


發表:29
回覆:35
積分:12
註冊:2003-09-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-06-21 23:10:01 IP:211.74.xxx.xxx 未訂閱
引言: 可以改成 Select * from Tabel where 性別=sex and 年級=degree and 科系 IN (A,B,C,D,E)
謝謝cxg的答覆! 您的語法我還得再試試,才知道是否能得到效果? 可是怎麼沒有看到科系的變數呢? 是不是這樣一來的話,就不能再找 性別=F,年級=1,科系=B的資料了呢??
avalokita
一般會員


發表:29
回覆:35
積分:12
註冊:2003-09-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-06-21 23:17:40 IP:211.74.xxx.xxx 未訂閱
[quote] [quote] Hi avalokita,    
SQL Command:
Select  *
from    Tabel
where   (sex = :p_sex or :p_sex is null)
and     (degree = :p_degree or :p_degree is null)
and     (Major = :p_major or :p_major is null)    程式碼:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Query1.Close;
  Query1.ParamByName('p_sex').Value := Edit1.Text;
  Query1.ParamByName('p_degree').Value := Edit2.Text;
  Query1.ParamByName('p_major').Value :=Edit3.Text;
  Query1.Open;
end;
關於
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-06-21 23:35:39 IP:220.134.xxx.xxx 未訂閱
procedure TForm1.Button1Click(Sender: TObject);
var SQLStr:String;
begin
  SQLStr:='Select  * from    Tabel WHERE 1=1 ";
  If Edit1.Text<>'' then
  SQLStr:=SQLStr   ' AND SEX ='   Edit1.text;
  If Edit2.Text<>'' then
  SQLStr:=SQLStr   ' AND degree ='   Edit2.text;
  If Edit3.Text<>'' then
  SQLStr:=SQLStr   ' AND Major ='   Edit3.text;
  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add(SQLStr);
  Query1.Open;
end;
TRY TRY SEE
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-06-23 12:58:00 IP:210.65.xxx.xxx 未訂閱
Hi avalokita,    
引言: 謝謝Fisherman的回覆! 可是我還是有一些疑問, 就是如何將值傳給變數,使它得到我們想要的效果呢? 如命題所示, Query1.ParamByName('p_sex').Value := Edit1.Text; Query1.ParamByName('p_degree').Value := Edit2.Text; Query1.ParamByName('p_major').Value := Edit3.Text; 我們可設為Edit1.Text:=F;Edit2.Text:=1; 那Edit3.Text:=?? 才可得到不限科系的效果呢?
將 edit3.text 的值清空試試看 或不行則改用以下方法再試試:
SQL Command:
Select  *
from    Tabel
where   (sex = :p_sex or :p_sex = '')
and     (degree = :p_degree or :p_degree = '')
and     (Major = :p_major or :p_major = '')    程式碼:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Query1.Close;
  Query1.ParamByName('p_sex').AsString := Edit1.Text;
  Query1.ParamByName('p_degree').AsString := Edit2.Text;
  Query1.ParamByName('p_major').AsString := Edit3.Text;
  Query1.Open;
end;
ps:事實上,這兩種方法我用 BDE 試過都可行 ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
系統時間:2024-07-07 4:07:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!