由來
FoxPro對表的操作是以記錄為單位的,那么在對表進行操作時必須明確當前正在對表的哪條記錄進行操作,為此,這裡就需要引進一個當前記錄的概念,當前記錄的概念與當前工作區、當前盤、當前目錄等概念類似,它是指表中當前可操作的記錄。當前記錄是可以改變的,即當前記錄是一個動態的概念。為了標識當前記錄,這裡還需要引進一個記錄指針的概念,所謂記錄指針是指系統內部用以指向當前記錄的一種標誌,記錄指針所指向的記錄即為當前記錄。通過記錄指針的定位、移動,可將記錄指針移動到預定的位置上,即使預定的記錄成為當前記錄。
表檔案剛打開時,記錄指針指向1號記錄,即第l條記錄是當前記錄。
規律
任何一個記錄都有可能成為當前記錄,也就是講“當前記錄”在操怍資料庫的過程中會不斷地變化。不過這種變化既有規律,又可以人為地指定。
規律變化
(1)當剛剛打開一個資料庫時,當前記錄就是資料庫中的第一條記錄。
(2)當執行完一個dBASEⅢ命令後,該命令最後操作過的記錄便成為當前記錄,這一記錄便成為下一個命令操作的對象。下面以實例來說明。
操作 說明
.USE XSCJK↙ 打開資料庫XSCJK
.LIST NEXT 2↙ 從當前記錄開始顯示2個記錄
螢幕顯示結果如下:
上面顯示的結果是從第1條記錄開始的,而“LIST NEXT 2”的功能是從當前記錄開始顯示2條記錄。這就證明了資料庫剛剛打開以後,“當前記錄”是第1條記錄。
接著上面的操作,繼續執行下面的命令:
操作 說明
.DISP↙ 顯示當前記錄
螢幕顯示結果如下:
“DISP”命令的功能是顯示當前記錄,而顯示出來的是2號記錄,這說明2號記錄就是當前記錄。這是什麼原因呢?這是由於前一個命令“LIST NEXT 2”最後顯示的是第2號記錄,因而2號記錄便成為“DISP”命令執行時的當前記錄。
當前記錄
有時,由於某種原因需要指定某一記錄為當前記錄,以便對該記錄進行處理。
例如,如果要求打開XSCJK資料庫,從第3條記錄開始顯示兩條記錄。這一問題的含義是,在打開XSCJK資料庫以後,必須將第3號記錄指定為當前記錄,然後使用LIST或DISPLAY命令顯示兩條記錄。那么如何指定某一記錄為當前記錄呢?回答是:使用“GO—TO”命令。
GOTO命令有三種格式:
格式 功能
GOTO n 指定第n號記錄為當前記錄
GOTO TOP 指定第1號記錄為當前記錄
GOTO BOTTOM 指定最後一條記錄為當前記錄
下面我們通過實例來驗證一下上述三種格式的GOTO命令。
舉例
【要求】驗證GOTO命令的三種格式所完成的功能。
【操作】
.USE XSCJK↙
.GOTO 3↙
.DISP NEXT 2↙
螢幕顯示的結果如下:
上述顯示的記錄是從第3號記錄開始的,即開始顯示前,第3號記錄是當前記錄,這就證明了“GOTO 3”命令完成的功能是:將第3號記錄指定為當前記錄。
【操作】
.GOTO TOP↙
.DISP↙
螢幕顯示如下的結果:
上述顯示的結果表明,“GOTO TOP”命令完成的功能是:將第1號記錄指定為當前記錄。
【操作】
.GoTO BOTTOM↙
.DISP↙
螢幕顯示如下的結果:
上述顯示的結果表明,“GOTO BOTTOM”命令完成的功能是:將最後一條記錄指定為當前記錄。
修改內容
修改當前記錄的內容使用如下函式:
long put_record(DBF*dbf,char*fmt,...);
該函式的功能為用參數表中的可變參數值分別替換散據庫檔案的當前記錄中指定宇段的內容。在修改時既可以替換當前記錄的所有欄位的內容,也可以只替換某一個或幾個指定欄位的內容。該函式的使用比較複雜,各參數的涵義分別為:
dbf:指向資料庫結構的指針;
fmt;格式字元串。格式字元申中的格式說明符的個數應和可變參數表中的參鼓個數相同,每個格式說明符按從左至右的順序說明可變參數表中的一個參數。每個格式說明符由兩種符號組成:
①欄位序號,說明可變參數表中的參數對應於當前記錄中的第幾個欄位。如果可參數表中的參數個數和當前記錄中的欄位數相等且順序完全一致.則所有格式說明符中的欄位序號均可阻省略。如果可變參數的數目小於欄位數目並且可變參數的序號和所對應的宇段的序號不一致,那么應在不一致的可變參數的格式說明符之前使用欄位序號。此時如果有若干個可變參數對應的欄位連續,那么可以只在第一個欄位對應的可變參數的格式說明符之前使用欄位序號。
②可變參數的類型。由於C語言和FOXBASE的數據類型之間存在相當大的差異,所以在調用本函式時可變參數與資料庫檔案的欄位之間的數據類型對應關係是十分重要的。下表列出了可以允許的數據類型對應關係愛對應的格式說明符。
③在格式說明符之間可以使用空格符作為分隔設定。
...:可變參數表。可變參數表中的參數可以是變數或表達式,只要其值的類型符台上表中的規定。
在替換成功時,該函式返回當前記錄的記錄號,否則返回0。
讀取內容
讀取當前記錄內容使用函式:
long get-record(DBF*dbf,char*fmt,...);
該函式的功能為將當前記錄中指定欄位的內容傳送到參數表中的可變參數中。和修改當前記錄函式類似,在讀取時既可以傳送當前記錄的所有欄位的內容,也可以只傳送某一個或幾個指定欄位的內容。該函效的各參數的涵義和修改當前記錄函式的參數的涵義相同,只是可變參數的類型應以上表中的第三列為準。
在傳送成功時,該函式返回當前記錄的記錄號,否則返回0。