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

使用Ttable時,filter的用法請教!

答題得分者是:william
pcernet
初階會員


發表:69
回覆:113
積分:41
註冊:2002-11-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-11-29 16:37:59 IP:61.218.xxx.xxx 未訂閱
請教各位,原本使用ado select * from student where name like %lee% 但如果只用 Ttable 元件時 set filter 要如何下 過去DBASE好像是用 'lee' $ name 怎麼試就是不行,所以POST上來請教大家,謝謝。
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-11-29 16:55:44 IP:147.8.xxx.xxx 未訂閱
Filter := '*lee*'; ??? Maybe writing a OnFilterRecord can give you control of the filter? Accept := (Pos('lee',DataSet.FieldByName('name').AsString)>0);
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-11-29 17:05:08 IP:202.39.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=21499    -- Everything I say is a lie.
lolot
一般會員


發表:6
回覆:9
積分:3
註冊:2002-11-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-11-29 17:14:58 IP:218.18.xxx.xxx 未訂閱
Ttable.filtered:=false; Ttable.filter:='name like ' '''' #37 'lee' #37 ''''; Ttable.filtered:=true; 注意 'name like ' 的like 後保留一個空格,或者 select * from student where name like '%lee%' 没有脾气
------
没有脾气
pcernet
初階會員


發表:69
回覆:113
積分:41
註冊:2002-11-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-11-30 00:34:20 IP:61.218.xxx.xxx 未訂閱
感謝熱情 TTable是個很基本的元件,但總覺得很少人花時間去瞭解 其實like的語法無法在TTable.filter中使用,唯一的語法是 TTable.filter:='name =' quotedstr(edit1.text '*'); 也就是說如果 edit1.text=李 那麼只能找到 李xx 的資料,不能找到 x李x 的資料, 但我總以為應該有辦法解決。 因考慮到BDE&ODBC&ADO等客端DRIVER和OS環境問題,所以使用DBASE資料檔,如果TTable無法解決,請問可有其它方式。 還有,資料欄位的型態BLOB Memo好像不能以這種方式作資料過濾。 再次感謝回應者的愛心與熱心。
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-11-30 08:20:45 IP:192.168.xxx.xxx 未訂閱
引言: 感謝熱情 TTable是個很基本的元件,但總覺得很少人花時間去瞭解 其實like的語法無法在TTable.filter中使用,唯一的語法是 TTable.filter:='name =' quotedstr(edit1.text '*'); 也就是說如果 edit1.text=李 那麼只能找到 李xx 的資料,不能找到 x李x 的資料, 但我總以為應該有辦法解決。 因考慮到BDE&ODBC&ADO等客端DRIVER和OS環境問題,所以使用DBASE資料檔,如果TTable無法解決,請問可有其它方式。 還有,資料欄位的型態BLOB Memo好像不能以這種方式作資料過濾。 再次感謝回應者的愛心與熱心。
沒錯TTable的Filter不可以用like 請將Filter清空 Filtered:=true 將OnFilterRecord的Event 設為如下: procedure TForm1.Table1FilterRecord(DataSet: TDataSet; var Accept: Boolean); begin if pos('lee',dataset.FieldByName('student ').asstring)>0 then accept:=true else accept:=false; end; ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
pcernet
初階會員


發表:69
回覆:113
積分:41
註冊:2002-11-29

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-11-30 09:23:54 IP:61.218.xxx.xxx 未訂閱
謝謝領航天使,william 所提的 OnFilterRecord 方式其實可用,昨天回應時忘了提。 速度感覺上較慢,不過最要緊的是在OnFilterRecord裡好像不能以 dataset.FieldByName('student ').asstring來使用 BLOB Memo 型態的欄位, 請問有解嗎,謝謝。
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-11-30 11:43:57 IP:210.3.xxx.xxx 未訂閱
I think the memo field (at least in Access) should be read out using .AsString. May I ask you for more details on reading memo field in you DB? BTW, what DB are you using?
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-11-30 16:30:17 IP:192.168.xxx.xxx 未訂閱
引言: I think the memo field (at least in Access) should be read out using .AsString. May I ask you for more details on reading memo field in you DB? BTW, what DB are you using?
對! Access/InterBase/MS-SQL/Oracle 都可以用AsString讀出Blob欄位內的文字資料(Text Data) ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
pcernet
初階會員


發表:69
回覆:113
積分:41
註冊:2002-11-29

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-12-01 00:45:19 IP:61.218.xxx.xxx 未訂閱
感謝兩位的愛心與熱心! 我使用DBASEIII的.DBF檔,確實無法以asstring的方式使用BLOB Memo型態的欄位資料,用來做電子書,每章節的文字都大於255個字元,原本是ACCESS資料檔,為了考量可攜性,因此轉為DBF檔使用,要查詢章節中是否含有某個字句,才有這些問題,以前在dbase 3 PLUS只要使用 SET FILTER TO "GOD" $ BIBLE即可,對了,如果以TQurry來做不曉得可以嗎? 謝謝.
系統時間:2024-05-19 20:48:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!