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

Filter問題

尚未結案
SuperLowB
初階會員


發表:96
回覆:77
積分:34
註冊:2003-06-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-19 15:24:30 IP:203.198.xxx.xxx 未訂閱
請問我可以這樣寫嗎?    ADODataset1.Filtered:=false; ADODataset1.Filter='1 Or 2 or 3 and sex=true'; ADODataset1.Filtered:=true;    但我不能........常常話我 'Arguments are of the wrong type, are out of acceptable range or are in conflict with on another.'
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-19 15:47:59 IP:61.155.xxx.xxx 未訂閱
比如: with ADODataSet1 do begin Filtered := False; Filter := 'name = ' QuotedStr('CA') ' OR ' '1'; Filtered := True; end; 您的如果类型与值相匹配的话,这样写: ADODataset1.Filter='(1) Or (2) or (3) and (sex=true)';
SuperLowB
初階會員


發表:96
回覆:77
積分:34
註冊:2003-06-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-19 16:02:03 IP:203.198.xxx.xxx 未訂閱
sos_admin 兄 都不能......我想應該是不可能同時存在兩種condition,如用or就要全部用or 用And就要全部用And 有方法決解我的問題嗎?
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-19 17:16:38 IP:61.155.xxx.xxx 未訂閱
直接用Filter是不能实现这样的多重查询的,您可以用下面的方法实现; procedure TForm1.Button1Click(Sender: TObject); begin try adodataset1.filtered:=false; finally adodataset1.filtered:=true; end; end; procedure TForm1.ADODataSet1FilterRecord(DataSet: TDataSet; var Accept: Boolean); var name:string; level:integer; begin name:=dataset.fieldbyname('name').asstring; level:=dataset.fieldbyname('level').AsInteger; if (name='user') and (level=1) or (level=2) or (level=3) then accept:=true else accept:=false; end;
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-19 17:57:21 IP:218.160.xxx.xxx 未訂閱
Hello SuperLowB 您好: 先試一下這個
ADODataset1.Filtered:=false;
ADODataset1.Filter='(1 Or 2 or 3) and sex=true';
ADODataset1.Filtered:=true;
並請確認裡面的型態沒有錯誤, 也就是UserID在資料庫中皆為數字 Sex為Boolean型態欄位 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
SuperLowB
初階會員


發表:96
回覆:77
積分:34
註冊:2003-06-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-09-22 12:10:29 IP:203.198.xxx.xxx 未訂閱
引言: Hello SuperLowB 您好: 先試一下這個
ADODataset1.Filtered:=false;
ADODataset1.Filter='(1 Or 2 or 3) and sex=true';
ADODataset1.Filtered:=true;
並請確認裡面的型態沒有錯誤, 也就是UserID在資料庫中皆為數字 Sex為Boolean型態欄位 我不是高手, 高手是正在銀幕前微笑的人.
Miles, 你試過了沒有? 真的不能!! sos_admin, 你的方法是可行,但個recordcount就不準了......它不是真的filter了,宜是把它invisble了......
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-09-22 16:19:59 IP:61.155.xxx.xxx 未訂閱
SuperLowB 兄: 您可以用下面的方法实现! procedure TForm1.ADODataSet1FilterRecord(DataSet: TDataSet; var Accept: Boolean); var name:string; level:integer; begin name:=dataset.fieldbyname('name').asstring; level:=dataset.fieldbyname('level').AsInteger; if (name='user') and (level=1) or (level=2) or (level=3) then accept:=true 在这儿加上全局计数就可以了!
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-09-23 10:43:58 IP:211.21.xxx.xxx 未訂閱
引言: 請問我可以這樣寫嗎? ADODataset1.Filtered:=false; ADODataset1.Filter='1 Or 2 or 3 and sex=true'; ADODataset1.Filtered:=true; 但我不能........常常話我 'Arguments are of the wrong type, are out of acceptable range or are in conflict with on another.'
改用這樣試試看: ADODataset1.Filtered:=false; ADODataset1.Filter='(1 and sex=true) Or (2 and sex=true) or (3 and sex=true)'; ADODataset1.Filtered:=true; ~小弟淺見,參考看看~
------
~小弟淺見,參考看看~
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-09-23 22:12:58 IP:218.160.xxx.xxx 未訂閱
引言:
引言: Hello SuperLowB 您好: 先試一下這個
ADODataset1.Filtered:=false;
ADODataset1.Filter='(1 Or 2 or 3) and sex=true';
ADODataset1.Filtered:=true;
並請確認裡面的型態沒有錯誤, 也就是UserID在資料庫中皆為數字 Sex為Boolean型態欄位 我不是高手, 高手是正在銀幕前微笑的人.
Miles, 你試過了沒有? 真的不能!! sos_admin, 你的方法是可行,但個recordcount就不準了......它不是真的filter了,宜是把它invisble了......
本來recordcount就不是指FILTER後的recordcount而是第一次SELECT出來的 recordcount 所以sos_admin的做法是可以接受的 如你要的recordcount是FILTER後的recordcount那就要另外處理了 天行健 君子當自強不息~~@.@
------
天行健
君子當自強不息~~@.@
系統時間:2024-11-22 7:30:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!