MasteringVFP/4/7/2

出自VFP Wiki

(修訂版本間差異)
跳轉到: 導航, 搜尋
 
第1行: 第1行:
 +
http://www.textcachivirovir.com
==== seek ====
==== seek ====
-
自從不知第幾版的 VFP 提供 Seek() 這個函數, 就沒再用 Seek 的命令, 不過剛剛看 VFP8 Help 才發現原來 Seek 命令也多了不少參數可以下, 還是以前都沒注意呢?
+
自從不知第幾版的 VFP 提供 Seek() 這個函數, 就沒再用 Seek 的命令, 不過剛剛看 VFP8 的 Help 才發現原來 Seek 命令也多了不少參數可以下, 還是以前都沒注意呢?
<pre>
<pre>
SEEK eExpression  [ORDER nIndexNumber | IDXIndexFileName
SEEK eExpression  [ORDER nIndexNumber | IDXIndexFileName
第6行: 第7行:
   [IN nWorkArea | cTableAlias]
   [IN nWorkArea | cTableAlias]
</pre>
</pre>
-
Seek 不論函數或命令都必須事前建立 Index, 用途的解釋大概就是:資料庫建立過索引後, 使用該指令找尋到符合條件的第一筆記錄, 如果找不到將移動到最後, 可用 Found() Eof() 來判斷。
+
Seek 不論函數或命令都必須事前建立 Index, 用途的解釋大概就是:資料庫建立過索引後, 使用該指令找尋到符合條件的第一筆記錄, 如果找不到將移動到最後, 可用 Found() 或 Eof() 來判斷。
-
使用 Seek(), 如果 Set("Near")="OFF" 的話, 不符合條件, 記錄將移動到最後, 如果 Set("Near")="ON", 不符合條件, 記錄將移動到最符合條件的記錄編號。Seek 的命令則無法做到前述功能。
+
使用 Seek(), 如果 Set("Near")="OFF" 的話, 不符合條件, 記錄將移動到最後, 如果 Set("Near")="ON", 不符合條件, 記錄將移動到最符合條件的記錄編號。Seek 的命令則無法做到前述功能。
-
我們就來看看以下的幾個例子~
+
我們就來看看以下的幾個例子~
----
----
(1)
(1)
第23行: 第24行:
? Eof()
? Eof()
</pre>
</pre>
-
上述 Eof() 將回傳 .T., 表示找不到 "3", 記錄也移動到最後
+
上述 Eof() 將回傳 .T., 表示找不到 "3", 記錄也移動到最後
-
不過如果使用以下命令
+
不過如果使用以下命令
<pre>
<pre>
?Seek("3")
?Seek("3")
?Recno()
?Recno()
</pre>
</pre>
-
將回傳 .F., 記錄卻會停留在第 3 , 也就是 Field1="4" 的位置, 而不會移動到最後
+
將回傳 .F., 記錄卻會停留在第 3 筆, 也就是 Field1="4" 的位置, 而不會移動到最後
-
您可以試試看 Set Near Off 又會發生什麼情況
+
您可以試試看 Set Near Off 又會發生什麼情況
----
----
(2)
(2)
第41行: 第42行:
?SEEK("2")
?SEEK("2")
</pre>
</pre>
-
上述設定 Exact Off, 條件查詢時因為查到第二筆 22 的第一個 2, 所以是被予許符合條件
+
上述設定 Exact 為 Off, 條件查詢時因為查到第二筆 22 的第一個 2, 所以是被予許符合條件
-
但是當 Exact 設定為 On , 那要符合條件, 只能下 Seek("22") 才算符合條件。
+
但是當 Exact 設定為 On 時, 那要符合條件, 只能下 Seek("22") 才算符合條件。

在2009年5月22日 (五) 12:27的最新修訂版本

http://www.textcachivirovir.com

seek

自從不知第幾版的 VFP 提供 Seek() 這個函數, 就沒再用 Seek 的命令, 不過剛剛看 VFP8 的 Help 才發現原來 Seek 命令也多了不少參數可以下, 還是以前都沒注意呢?

SEEK eExpression   [ORDER nIndexNumber | IDXIndexFileName
    | [TAG] TagName [OF CDXFileName]    [ASCENDING | DESCENDING]]
   [IN nWorkArea | cTableAlias]

Seek 不論函數或命令都必須事前建立 Index, 用途的解釋大概就是:資料庫建立過索引後, 使用該指令找尋到符合條件的第一筆記錄, 如果找不到將移動到最後, 可用 Found() 或 Eof() 來判斷。 使用 Seek(), 如果 Set("Near")="OFF" 的話, 不符合條件, 記錄將移動到最後, 如果 Set("Near")="ON", 不符合條件, 記錄將移動到最符合條件的記錄編號。Seek 的命令則無法做到前述功能。

我們就來看看以下的幾個例子~


(1)

Set Near on
CREATE CURSOR ABC(Field1 C(5))
INDEX ON field1 TO XYZ
INSERT INTO ABC (Field1) Value("1")
INSERT INTO ABC (Field1) Value("2")
INSERT INTO ABC (Field1) Value("4")
INSERT INTO ABC (Field1) Value("5")
SEEK "3"
? Eof()

上述 Eof() 將回傳 .T., 表示找不到 "3", 記錄也移動到最後 不過如果使用以下命令

?Seek("3")
?Recno()

將回傳 .F., 記錄卻會停留在第 3 筆, 也就是 Field1="4" 的位置, 而不會移動到最後 您可以試試看 Set Near Off 又會發生什麼情況


(2)

Set Exact off
CREATE CURSOR ABC(Field1 C(5))
INDEX ON field1 TO XYZ
INSERT INTO ABC (Field1) Value("11")
INSERT INTO ABC (Field1) Value("22")
?SEEK("2")

上述設定 Exact 為 Off, 條件查詢時因為查到第二筆 22 的第一個 2, 所以是被予許符合條件 但是當 Exact 設定為 On 時, 那要符合條件, 只能下 Seek("22") 才算符合條件。