全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:6255
推到 Plurk!
推到 Facebook!

請問一下TQUERY的FILTER用法

答題得分者是:P.D.
cursegold
一般會員


發表:16
回覆:36
積分:15
註冊:2006-08-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-02-21 11:46:00 IP:59.125.xxx.xxx 未訂閱
請問一下各位大大
我今天用TQUERY去查詢資料庫裡面的資料出來後,
想用filter去過濾所查出來的資料,
我知道filter可以像SQL的like查詢一樣例如QUERY1.Filter='AAA*'
表示找出QUERY1資料裡面有'AAA'開頭的資料
但是如果我今天想找出所有資料裡面有包含'AAA'字串的資料,
請問可以下QUERY1.Filter='*AAA*'嗎還是有別的方法呢,
因為客戶的狀況比較特別一定要用Filter想請各位大大一定要幫幫忙,
謝謝
------
蔡志全
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-02-21 12:08:31 IP:118.169.xxx.xxx 未訂閱
如果你想求得這樣的結果, 其實我會強烈建議你, 在你第一次QUERY的資料就把 'AAA'的搜尋加入到SQL 語法中, 使用 LIKE 就可以達成, 不要再分兩次, 尤其是使用 FILTER 是一筆筆過濾, 效能很差
但如果你非得分兩次, 而且要用FILTER 來做(其實 FILTER 能做的 SQL.text 都可以做),
我記得沒錯的話, filter =”欄位 ='AAA%”, 還是 ”欄位 =AAA*”
因為每一種資料庫都會有一點差異, 所以是 % 還是 * 可能要試
===================引 用 cursegold 文 章===================
請問一下各位大大
??? 我今天用TQUERY去查詢資料庫裡面的資料出來後,
??? 想用filter去過濾所查出來的資料,
??? 我知道filter可以像SQL的like查詢一樣例如QUERY1.Filter='AAA*'
??? 表示找出QUERY1資料裡面有'AAA'開頭的資料
??? 但是如果我今天想找出所有資料裡面有包含'AAA'字串的資料,
??? 請問可以下QUERY1.Filter='*AAA*'嗎還是有別的方法呢,
??? 因為客戶的狀況比較特別一定要用Filter想請各位大大一定要幫幫忙,
??? 謝謝
cursegold
一般會員


發表:16
回覆:36
積分:15
註冊:2006-08-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-02-21 20:23:17 IP:114.44.xxx.xxx 未訂閱
回PD大
因為某些原因不能用SQL語法的LIKE必須用FILTER來達成像SQL語法的 WHERE A欄位 like 'ªA%'
我只知道TQUERY可以達成QUERY1.Filter='A欄位= 'AAA*' '但是當我試QUERY1.Filter='A欄位= '*AAA*'他卻沒辦法達成像語法的'ªA%'
請問TQUERY有辦法做到嗎 如果有辦法該怎麼用呢 謝謝
===================引 用 P.D. 文 章===================
如果你想求得這樣的結果, 其實我會強烈建議你, 在你第一次QUERY的資料就把 'AAA'的搜尋加入到SQL 語法中, 使用 LIKE 就可以達成, 不要再分兩次, 尤其是使用 FILTER 是一筆筆過濾, 效能很差
但如果你非得分兩次, 而且要用FILTER 來做(其實 FILTER 能做的 SQL.text 都可以做),
我記得沒錯的話, filter =”欄位 ='AAA%”, 還是 ”欄位 =AAA*”
因為每一種資料庫都會有一點差異, 所以是 % 還是 * 可能要試

------
蔡志全
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-02-21 21:22:56 IP:118.169.xxx.xxx 未訂閱
filter:= ”欄位 = "%AAA%"  ”
另外, 個人很好奇, 什麼狀況下不能使用 sql 而要改用 filter 這類沒有效率的呢?
===================引 用 cursegold 文 章===================
回PD大
因為某些原因不能用SQL語法的LIKE必須用FILTER來達成像SQL語法的 WHERE A欄位 like 'ªA%'
我只知道TQUERY可以達成QUERY1.Filter='A欄位= 'AAA*' '但是當我試QUERY1.Filter='A欄位= '*AAA*'他卻沒辦法達成像語法的'ªA%'
請問TQUERY有辦法做到嗎 如果有辦法該怎麼用呢? 謝謝

編輯記錄
P.D. 重新編輯於 2011-02-21 06:24:28, 註解 無‧
cursegold
一般會員


發表:16
回覆:36
積分:15
註冊:2006-08-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2011-02-22 09:11:57 IP:59.125.xxx.xxx 未訂閱
P.D大這是有原因的其實這是做一個查詢作業給客戶用的當客戶下條件時我們就依據條件顯示他要的結果在下面DBGRID給他看
原本是直接用QUERY.SQL.ADD(SQL語法)然後QUERY.OPEN
但是客戶今天要求要在他條件欄位每輸入一個字就立即顯示結果,如果我是用SQL語法去做勢必要重新QUERY.OPEN
當客戶資料量一大在加上SQL裡面不只有一個TABLE就會在DBGRID重新顯示資料時會有幾秒的頓點,客戶無法接受
所以就設計此作業不能關閉當伊開此作業時就把全部資料查出來,這個動作可能會有十幾秒不過只有一開始客戶可以接受,
當他在條件欄位每下一個字我就用filter作資料篩選,這樣下方DBGIRD就完全不會有頓點的感覺會立即顯示資料,
今天原本有做filter='欄位='AAA*' '這個可以達到像SQL語法 where 欄位 like 'AAA%'
但是今天客戶也要希望可以達到像sql語法的 where 欄位 like 'ªA%'
這個我就不知道在filter要怎麼做了
因為我們系統是用delphi 5 BDE 的TQUERY
P.D.你說的方式filter:='欄位='ªA%' '我試過了好像不可以
他會查不出資料,請問真的是這個方法嗎 還是還要再設定甚麼呢 謝謝
===================引 用 P.D. 文 章===================
filter:= ”欄位 = "ªA%" ”
另外, 個人很好奇, 什麼狀況下不能使用 sql 而要改用 filter 這類沒有效率的呢?

------
蔡志全
t27
中階會員


發表:34
回覆:95
積分:90
註冊:2002-06-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2011-02-22 10:24:09 IP:61.224.xxx.xxx 訂閱
 語法是正確的.
以下語法經測試ok的
DataSet.Filtered := False;
cFilter := 'A_NO Like ''' '%' SearchEd.Text '%''';
DataSet.Filter := cFilter;
DataSet.Filtered := True;
DataSet.First;
cursegold
一般會員


發表:16
回覆:36
積分:15
註冊:2006-08-22

發送簡訊給我
#7 引用回覆 回覆 發表時間:2011-02-22 10:33:13 IP:59.125.xxx.xxx 未訂閱
T27大  請問一下你的DataSet是BDE的TQUERY嗎
因為我只要下like他就會出現'Operation not applicable'的訊息
而且用%他好像也沒效果我下
cFilter := 'A_NO = '''SearchEd.Text '*''';
這樣他才會有效果 但是只有後%的效果
我知道TADOQUERY可以用
cFilter := 'A_NO Like ''' '%' SearchEd.Text '%''';
但是BDE的TQEURY卻不行
請各位大大幫幫忙 謝謝
===================引 用 t27 文 章===================
語法是正確的.
以下語法經測試ok的
DataSet.Filtered := False;
cFilter := 'A_NO Like ''' '%' SearchEd.Text '%''';
DataSet.Filter := cFilter;
DataSet.Filtered := True;
DataSet.First;
------
蔡志全
編輯記錄
cursegold 重新編輯於 2011-02-21 19:56:47, 註解 無‧
t27
中階會員


發表:34
回覆:95
積分:90
註冊:2002-06-19

發送簡訊給我
#8 引用回覆 回覆 發表時間:2011-02-22 11:26:22 IP:61.224.xxx.xxx 訂閱
 對的.我是用TADOQUERY
請問你用哪種資料庫?
cursegold
一般會員


發表:16
回覆:36
積分:15
註冊:2006-08-22

發送簡訊給我
#9 引用回覆 回覆 發表時間:2011-02-22 14:41:44 IP:59.125.xxx.xxx 未訂閱
MS SQL 2005
===================引 用 t27 文 章===================
對的.我是用TADOQUERY
請問你用哪種資料庫?
------
蔡志全
cursegold
一般會員


發表:16
回覆:36
積分:15
註冊:2006-08-22

發送簡訊給我
#10 引用回覆 回覆 發表時間:2011-02-22 15:38:19 IP:59.125.xxx.xxx 未訂閱
請各位大大幫幫忙
還是BDE的TQUERY的FILTER對於這個問題真的是無解呢
------
蔡志全
cursegold
一般會員


發表:16
回覆:36
積分:15
註冊:2006-08-22

發送簡訊給我
#11 引用回覆 回覆 發表時間:2011-02-23 11:08:34 IP:59.125.xxx.xxx 未訂閱
謝謝各位大大的幫忙
我想到方法了
除了原本的 Filter='欄位='AAA*''以外在加上在此QUERY的EVENT
onFilterRecord去做判斷就可以達到像SQL語法Where 欄位 like 'ªA%'了
只要客戶在條件地方先打一個%我就在onFilterRecord去做判斷如果沒先打%
我就用原本的Filter='欄位='AAA*''這樣就可以達到了

------
蔡志全
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#12 引用回覆 回覆 發表時間:2011-02-23 21:07:44 IP:118.169.xxx.xxx 未訂閱
恭喜你啦
不過要提醒一點, onFilterRecord 比 Filter 的效能更差, 除非萬不得已, 否則我不會使用它
===================引 用 cursegold 文 章===================
謝謝各位大大的幫忙
??? 我想到方法了
??? 除了原本的 Filter='欄位='AAA*''以外在加上在此QUERY的EVENT
??? onFilterRecord去做判斷就可以達到像SQL語法Where 欄位 like 'ªA%'了
??? 只要客戶在條件地方先打一個%我就在onFilterRecord去做判斷如果沒先打%
??? 我就用原本的Filter='欄位='AAA*''這樣就可以達到了

cursegold
一般會員


發表:16
回覆:36
積分:15
註冊:2006-08-22

發送簡訊給我
#13 引用回覆 回覆 發表時間:2011-02-24 15:55:28 IP:59.125.xxx.xxx 未訂閱
回PD大要不是客戶太機車
萬不得以才會以用FILTER
否則通常用SQL語法就好了也比較靈活
不過若不是這一次還不知道原來BDE的TQUERY
FILTER有這個煩麻的地方ADO的FILTER就好用多了
===================引 用 P.D. 文 章===================
恭喜你啦
不過要提醒一點, onFilterRecord 比 Filter 的效能更差, 除非萬不得已, 否則我不會使用它

------
蔡志全
系統時間:2024-04-20 21:46:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!