MasteringVFP/4/8

出自VFP Wiki

(修訂版本間差異)
跳轉到: 導航, 搜尋
(revert)
 
第1行: 第1行:
-
=== 強大的 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
第20行: 第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年9月1日 (二) 02:05的最新修訂版本

強大的 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 不好,只是,你必須要了解他的優缺點,與其他指令交互搭配使用,才能發揮它的效力.