出自VFP Wiki
(修訂版本間差異)
|
|
第1行: |
第1行: |
- | http://www.textcaacour.com
| + | === 強大的 Filter === |
- | === 強大ç Filter === | + | 在早期無法使用 SQL 的時候,要如何篩選資料呢??這時候就是用 Filter 啦... |
- | å¨æ©æÂÂç¡æ³Â使ç¨ SQL çÂÂæÂÂÃ¥ÂÂ,è¦Âå¦Âä½Â篩é¸è³ÂæÂÂå¢??éÂÂæÂÂÃ¥ÂÂå°±æ¯ç¨ Filter å¦...
| + | 說到 Filter, 他的歷史可是很悠久的呢~在 dBase 時代就已經存在了. |
- | 說å° Filter, ä»ÂçÂÂæ·å²å¯æ¯å¾Âæ ä¹Â
çÂÂå¢~å¨ dBase æÂÂ代就已ç¶ÂÃ¥ÂÂå¨äºÂ.
| + | 設定 Filter 的方法很簡單,就是這樣子: |
- | è¨Âå® Filter çÂÂæ¹æ³Âå¾Âç°¡å®,å°±æ¯éÂÂ樣åÂÂ:
| + | |
| <pre> | | <pre> |
- | set filter to æ¬Âä½Â=å¼ | + | set filter to 欄位=值 |
| </pre> | | </pre> |
- | èÂÂÃ¥ÂÂæ¶Âä¹ÂÃ¥ÂÂ樣çÂÂ容æÂÂ:
| + | 而取消也同樣的容易: |
| <pre> | | <pre> |
| set filter to | | set filter to |
| </pre> | | </pre> |
| | | |
- | å¨以åÂÂ,å·è¡Âå® set filter to 以å¾Â,æÂÂ好è¦Â移åÂÂä¸Âä¸Âç´ÂéÂÂ,è® Filter çÂÂæÂÂ,ä¾Â妠go top, æÂÂæ¯ go bottom...,å¦åÂÂä½ æÂÂå¯è½ç¼ç¾,Filter æ²ÂæÂÂçÂÂæÂÂ...
| + | 在以前,執行完 set filter to 以後,最好要移動一下紀錄,讓 Filter 生效,例如 go top, 或是 go bottom...,否則你有可能發現,Filter 沒有生效... |
| | | |
- | ä¸Âé¢æÂÂÃ¥ÂÂå°±èÂÂÃ¥ÂÂç°¡å®çÂÂä¾ÂÃ¥ÂÂ,éÂÂ裡æ¯æÂÂæÂÂæÂÂ客æ¶編èÂÂÃ¥ÂÂé¢çº "S01" çÂÂ人é½ browse åºä¾Â.
| + | 下面我們就舉個簡單的例子,這裡是把所有客戶編號前面為 "S01" 的人都 browse 出來. |
| <pre> | | <pre> |
| use customers | | use customers |
第21行: |
第20行: |
| browse | | browse |
| </pre> | | </pre> |
- | 注æÂÂÃ¥ÂÂ,éÂÂè£Âçºä»Â麼說æÂÂæÂÂæÂÂæÂÂ客æ¶編èÂÂÃ¥ÂÂé¢çº "S01" çÂÂ人é½ browse åºä¾Âå¢??éÂÂÃ¥ÂÂÃ¥ÂÂ,æ¯å çº VFP å¯以é¸æÂÂÃ¥ÂÂæÂÂä¸ÂÃ¥ÂÂ精確æ¯Âå°Â( set exact on / set exact off ).
| + | 注意喔,這裏為什麼說會把所有客戶編號前面為 "S01" 的人都 browse 出來呢??這個啊,是因為 VFP 可以選擇做或不做精確比對( set exact on / set exact off ). |
- | æÂÂè¬ÂçÂÂ精確æ¯Âå°Â,æÂÂæÂÂå°±æ¯å¿Â
é Âè¦Âå®ÂÃ¥Â
¨ç¬¦åÂÂ,æ¢Â件æÂÂæÂÂæÂÂç«Â,ä¹Âå°±æ¯說 "S01" æÂÂçÂÂæ¼ "S01" èÂÂä¸ÂçÂÂæ¼ "S0100".
| + | 所謂的精確比對,意思就是必須要完全符合,條件才會成立,也就是說 "S01" 會等於 "S01" 而不等於 "S0100". |
- | VFP é Âè¨Âè¡Âçºæ¯éÂÂ精確æ¯Âå°Â,ä¹Âå°±æ¯說 "S01" æÂÂçÂÂæ¼ "S0100" ä¹ÂæÂÂçÂÂæ¼ "S01". | + | VFP 預設行為是非精確比對,也就是說 "S01" 會等於 "S0100" 也會等於 "S01". |
- | éÂÂÃ¥ÂÂè¨Âå®Âå¯以ç´æÂ¥å° ((MasteringVFP/1/4|Options)) å»è¨Âå®Â,ä¹Âå¯以ç´æ¥使ç¨ set exact å»è¨Âå®Âçº on æ off.
| + | 這個設定可以直接到 ((MasteringVFP/1/4|Options)) 去設定,也可以直接使用 set exact 去設定為 on 或 off. |
| | | |
- | å°éÂÂ裡,ç¸信é½æÂÂç½ Filter å¦Âä½Â使ç¨äºÂå§~
| + | 到這裡,相信都明白 Filter 如何使用了吧~ |
- | ä¸ÂéÂÂ,å¦ÂæÂÂä½ Remote View + Filter çÂÂæÂÂÃ¥ÂÂ,æÂÂç¼ç¾æÂÂçÂÂå¾ÂæÂ
¢.
| + | 不過,如果你 Remote View + Filter 的時候,會發現效率很慢. |
- | éÂÂæ¯å çº Filter æÂÂéÂÂè¦ÂæÂÂæÂÂè³ÂæÂÂ,æÂÂè½åÂÂ篩é¸çÂÂÃ¥ÂÂä½Â,æÂÂ以 Remote View æÂÂ試åÂÂä¸Âè¼ÂæÂÂæÂÂé 端è³ÂæÂÂÃ¥ÂÂä¾Â.ä½ÂéÂÂä¹Âä¸Âæ¯說 Filter ä¸Â好,åªæ¯,ä½ å¿Â
é Âè¦ÂäºÂ解ä»ÂçÂÂåª缺é»Â,èÂÂÃ¥Â
¶ä»ÂæÂÂ令交äºÂæÂÂéÂ
Â使ç¨,æÂÂè½ç¼æ®å®ÂçÂÂæÂÂÃ¥ÂÂ.
| + | 這是因為 Filter 會需要所有資料,才能做篩選的動作,所以 Remote View 會試圖下載所有遠端資料回來.但這也不是說 Filter 不好,只是,你必須要了解他的優缺點,與其他指令交互搭配使用,才能發揮它的效力. |
在2009年7月12日 (日) 17:25所做的修訂版本
強大的 Filter
在早期無法使用 SQL 的時候,要如何篩選資料呢??這時候就是用 Filter 啦...
說到 Filter, 他的歷史可是很悠久的呢~在 dBase 時代就已經存在了.
設定 Filter 的方法很簡單,就是這樣子:
set filter to 欄位=值
而取消也同樣的容易:
set filter to
在以前,執行完 set filter to 以後,最好要移動一下紀錄,讓 Filter 生效,例如 go top, 或是 go bottom...,否則你有可能發現,Filter 沒有生效...
下面我們就舉個簡單的例子,這裡是把所有客戶編號前面為 "S01" 的人都 browse 出來.
use customers
set filter to customers.id="S01"
go top
browse
注意喔,這裏為什麼說會把所有客戶編號前面為 "S01" 的人都 browse 出來呢??這個啊,是因為 VFP 可以選擇做或不做精確比對( set exact on / set exact off ).
所謂的精確比對,意思就是必須要完全符合,條件才會成立,也就是說 "S01" 會等於 "S01" 而不等於 "S0100".
VFP 預設行為是非精確比對,也就是說 "S01" 會等於 "S0100" 也會等於 "S01".
這個設定可以直接到 ((MasteringVFP/1/4|Options)) 去設定,也可以直接使用 set exact 去設定為 on 或 off.
到這裡,相信都明白 Filter 如何使用了吧~
不過,如果你 Remote View + Filter 的時候,會發現效率很慢.
這是因為 Filter 會需要所有資料,才能做篩選的動作,所以 Remote View 會試圖下載所有遠端資料回來.但這也不是說 Filter 不好,只是,你必須要了解他的優缺點,與其他指令交互搭配使用,才能發揮它的效力.