MasteringVFP/4/7/2

出自VFP Wiki

在2005年1月14日 (五) 09:11由Elleryq (對話 | 貢獻)所做的修訂版本
(差異) ←上一修訂 | 最新修訂 (差異) | 下一修訂→ (差異)
跳轉到: 導航, 搜尋

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") 才算符合條件。