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

增加查詢條件(SQL)

答題得分者是:st33chen
snowisdark
一般會員


發表:3
回覆:8
積分:2
註冊:2009-03-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-04-20 16:27:21 IP:140.125.xxx.xxx 訂閱
操作環境:delphi 7   資料庫:paradox7

我有多個欄位
每個欄位對應一個combobox

查詢按鈕 on click 事件
query1.open;
query1.sql.clear;
query1.sql.add('select 欄位A,欄位B,欄位C from 資料表 where 欄位A="' combobox1.text "' and 欄位B="' combobox2.text "' and 欄位C="' combobox3.text "' group by 欄位A);
query1.open;

我想要的是
if combobox1.text='不限' then ........就不加入這條查詢條件

query1.open;
query1.sql.clear;
query1.sql.add(select 欄位A,欄位B,欄位C from 資料表 where 欄位B='" combobox2.text "' and 欄位C="' combobox3.text "'');
query1.open;

combobox2 跟3 也是

請問該怎麼讓他隨著combobox的下拉選項 而改變搜尋條件呢?@@
編輯記錄
snowisdark 重新編輯於 2009-04-20 16:28:19, 註解 無‧
snowisdark 重新編輯於 2009-04-20 16:28:51, 註解 無‧
snowisdark 重新編輯於 2009-04-20 16:32:18, 註解 無‧
老大仔
尊榮會員


發表:78
回覆:837
積分:1088
註冊:2006-07-06

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-04-20 16:45:50 IP:59.114.xxx.xxx 未訂閱
可以把查詢的功能改寫在每個ComboboxOnChange
然後在OnChange中開始下判斷

if Combobox1.txt = '不限' then...<以下語法如同你的"不加入這條查詢條件">
else...<以下語法就是你一開始講的一般的查詢>

然後Combobox2和Combobox3也是如同這樣的做法即可
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-04-20 16:50:08 IP:118.168.xxx.xxx 未訂閱
您好,

設一個字串變數 wstr
wstr := '';
if combobox1.text<>'不限' then wstr := wstr ' and 欄位A="' combobox1.text "'';
if combobox2.text<>'不限' then wstr := wstr ' and 欄位B="' combobox2.text "'';
...
然後
// 把 and 開頭的句子換成 where 開頭 才可以加到 select 子句後面.
if wstr<>'' then wstr := stringreplace(wstr, ' and ', ' where ', []); // 只會換第一個
...
query1.sql.add('select 欄位A,欄位B,欄位C from 資料表' wstr ' group by 欄位A');
...
參考一下

------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2009-04-21 14:43:19, 註解 無‧
snowisdark
一般會員


發表:3
回覆:8
積分:2
註冊:2009-03-29

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-04-21 14:22:13 IP:140.125.xxx.xxx 訂閱
成功了!
非常感謝^^
另外 wstr:=stringreplace(wstr, 'and' , ' where' , []) 這段看不懂@@
大俠可否解說一下



===================引 用 st33chen 文 章===================
您好,

設一個字串變數 wstr
wstr := '';
if combobox1.text<>'不限' then wstr := wstr ' and 欄位A="' combobox1.text "'';
if combobox2.text<>'不限' then wstr := wstr ' and 欄位B="' combobox2.text "'';
...
然後
if wstr<>'' then wstr := stringreplace(wstr, ' and ', ' where ', []); // 只會換第一個
...
query1.sql.add('select 欄位A,欄位B,欄位C from 資料表' wstr ' group by 欄位A');
...
參考一下

snowisdark
一般會員


發表:3
回覆:8
積分:2
註冊:2009-03-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-04-21 15:13:49 IP:140.125.xxx.xxx 訂閱
請問如何把下面這段 加進去 
我怎麼加都顯示 錯誤 token:and

var
wstr:string:
date1,date2:TDate;
begin
wstr := '';
if combobox1.text<>'不限' then wstr := wstr ' and 欄位A="' combobox1.text "'';
if combobox2.text<>'不限' then wstr := wstr ' and 欄位B="' combobox2.text "'';
if wstr<>'' then wstr := stringreplace(wstr, ' and ', ' where ', []);

date1:=DateTimePicker1.Date ;
date2:=DateTimePicker2.Date;
with query1 do
begin
close;
sql.Clear;
sql.Add('SELECT * FROM 資料表);
sql.Add(' wstr ' and (日期起>=:rq1)and (日期迄<=:rq2)');
end;
Query1.Params [0].DataType :=ftdate;
Query1.Params [0].Value :=date1;
Query1.Params [1].DataType :=ftdate;
Query1.Params [1].Value :=date2;
Query1.Active :=true;


===================引 用 st33chen 文 章===================
您好,

設一個字串變數 wstr
wstr := '';
if combobox1.text<>'不限' then wstr := wstr ' and 欄位A="' combobox1.text "'';
if combobox2.text<>'不限' then wstr := wstr ' and 欄位B="' combobox2.text "'';
...
然後
// 把 and 開頭的句子換成 where 開頭 才可以加到 select 子句後面.
if wstr<>'' then wstr := stringreplace(wstr, ' and ', ' where ', []); // 只會換第一個
...
query1.sql.add('select 欄位A,欄位B,欄位C from 資料表' wstr ' group by 欄位A');
...
參考一下

st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-04-22 11:41:25 IP:122.116.xxx.xxx 未訂閱

===================引 用 snowisdark 文 章===================
請問如何把下面這段 加進去 -----> 請看這個顏色的部份
我怎麼加都顯示 錯誤 token:and -----> 是不是當 wstr 為 空字串時造成的 ?

var
wstr:string:
date1,date2:TDate;
begin
wstr := ' where (日期起>=:rq1) and (日期迄<=:rq2)';
if combobox1.text<>'不限' then wstr := wstr ' and 欄位A="' combobox1.text "'';
if combobox2.text<>'不限' then wstr := wstr ' and 欄位B="' combobox2.text "'';
// if wstr<>'' then wstr := stringreplace(wstr, ' and ', ' where ', []); <--- 這樣改的話, 這句變成多餘的

date1:=DateTimePicker1.Date ;
date2:=DateTimePicker2.Date;
with query1 do
begin
close;
sql.Clear;
sql.Add('SELECT * FROM 資料表);
// sql.Add(' wstr ' and (日期起>=:rq1)and (日期迄<=:rq2)'); <--- 調到前面去
sql.add(wstr);
end;
Query1.Params [0].DataType :=ftdate;
Query1.Params [0].Value :=date1;
Query1.Params [1].DataType :=ftdate;
Query1.Params [1].Value :=date2;
Query1.Active :=true;
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
系統時間:2024-05-19 13:03:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!