數據庫文件及記錄命令
ADD TABLE 在當前數據庫中添加壹個自由表
APPEND 在表的末尾添加壹個或多個新記錄
APPEND FROM ARRAY 由數組添加記錄到表中
APPEND FROM 從壹個文件中讀入記錄,追加到當前表的尾部
APPEND GENERAL 從文件中導入OLE對象並將其放入通用字段中
APPEND MEMO 將文本文件的內容復制到備註字段中
APPEND PROCEDURES 將文本文件中的存儲過程追加到當前數據庫中
AVERAGE 計算數值表達式或字段的算術平均值
BLANK 清除當前記錄中所有字段的數據
BROWSE 打開瀏覽窗口,顯示當前或選定表的記錄
CALCULATE 對表中的字段或包含字段的表達式進行財務和統計操作
CHANGE 顯示要編輯的字段
CLOSE 關閉各種類型的文件
CLOSE MEMO 關閉壹個或多個備註編輯窗口
COMPILE DATABASE 編譯數據庫中的存儲過程
CONTINUE 繼續執行先前的LOCATE命令
COPY MEMO 復制當前記錄中的指定備註字段的內容到文本文件
COPY PROCEDURES 將當前數據庫中’的存儲過程復制到文本文件
COPY STRUCTURE 用當前選擇的表結構創建壹個新的空自由表
COPY STRUCTURE EXTENDED 創建新表,它的字段包含當前選定表的結構信息
COPY TO ARRAY 將當前選定表中的數據復制到數組
COPY TO 用當前選定表的內容創建新文件
COUNT 統計表中記錄數目
CREATE 生成壹個新的VisualFoxPro表
CREATE CONNECTION 創建壹個命名連接並把它存儲在當前數據庫中
CREATE DATABASE 創建並打開壹個數據庫
CREATE TRIGGER 創建表的刪除、插入或更新觸發器
CREATE VIEW 從VisualFoxPro環境創建視圖文件
DELETE 給要刪除的記錄做標記
DELETE CONNECTION 從當前數據庫中刪除壹個命名連接
DELETE DATABASE 從磁盤上刪除數據庫
DELETE TRIGGER 從當前數據庫的表中刪除“刪除”、“插入”或“更新”觸發器│
DELETE VIEW 從當前數據庫中刪除壹個SQL視圖
DISPLAY 在VisualFoxPro主窗口或用戶自定義窗口中顯示與當前表有關的信息
DISPLAY CONNECTIONS 顯示當前數據庫中與命名連接有關的信息
DISPLAY DATABASE 顯示有關當前數據庫的信息,或當前數據庫中的字段、命名連接、表或視圖的信息
DISPLAY MEMORY 顯示內存變量和數組的當前內容
DISPLAY PROCEDURES 顯示當前數據庫中存儲過程的名稱
DISPLAY STRUCTURE 顯示壹個表文件的結構
DISPLAY TABLES 顯示包含在當前數據庫中所有的表和表的信息
DISPLAY VIEWS 顯示當前數據庫中關於SQL視圖的信息以及SQL視圖是否基於本地或遠程表的信息
DROP TABLE 把壹個表從數據庫中移出,並從磁盤中刪除它
DROP VIEW 從當前數據庫中刪除指定的SQL視圖
EDIT 顯示要編輯的字段
FoxPro的命令結構壹般由命令動詞、語句體和註釋幾部分構成。
如:LIST [範圍] [[FIELDS 字段名列表] [FOR 條件][WHILE 條件] [OFF] [TO PRINT]
常用子句
範圍:表示記錄的執行範圍,可以是下面幾項其中之壹:
ALL 表示全部記錄;
NEXT n 表示從當前記錄開始的以下n條記錄;
RECORD n 表示第n號記錄;
REST 表示從當前記錄到最後壹條記錄。
FIELDS 字段名表:用於指定操作的字段,多個字段時用逗號分隔。
FOR條件:對滿足條件的記錄進行操作。
WHILE 條件:當遇到第壹個不滿足條件的記錄時,停止命令執行。
以下命令中,大寫的英文詞為關鍵詞,必須原樣照寫。
“常用子句”指以下幾個可選子句:
[範圍] [FIELDS 字段名表] [FOR 條件] [WHILE 條件]
命令中的“列表”,指用“,”分隔的各項。如“字段名列表”就是將各個字段名用逗號分隔。
部分英文詞的意義:Databasename 數據名 tablename 數據表名 filename 文件名 Viewname 視圖名 arrayname 數組名
提示:加下劃線的為本課程要求掌握的命令。
壹、數據庫的建立、打開、關閉和刪除
建立數據庫:
CREATE DATABASE [databasename|?]
從磁盤中刪除數據庫:
DELETE DATABASE databasename|?
打開數據庫:
OPEN DATABASE [EXCLUSIVE|SHARED][NOUPDATE]
打開數據庫設計器(允許用戶按交互方式編輯當前數據庫):
MODIFY DATABASE [databasename|?]
指定的數據庫databasename為當前數據庫。
指定當前的數據庫:
SET DATABASE TO [databasename]
Databasename必須為已經打開的數據庫。如果省略數據庫名稱databasename,則不指定當前數據庫(沒有當前數據庫)。
關閉數據庫:
CLOSE DATABASE [ALL]
關閉當前數據庫,如果帶ALL子句,則關閉所有打開的數據庫。
二、數據表和視圖的建立、打開、關閉和刪除
建立數據表(SQL命令):
CREATE TABLE | DBF tablename (Col_name1 Type1 [NOT NULL/NULL]
[{,Col_name2 Type2 [NOT NULL/NULL]}...])
table_name是所創建的數據表的名字。
Col_name1,Col_name2,...是表中列的名。
Type1, Type2...是相應列的數據類型(VFP的數據類型見表3-9)。
如果說明為NOT NULL,則列中不允許分配空值(這種情況下,列不能包含空值,如果插入空值,將返回錯誤信息)。
向當前打開的數據庫中添加數據表:
ADD TABLE tablename|?
從當前打開的數據庫中刪除數據表:
REMOVE TABLE tablename|? [DELETE]
如果包含DELETE子句,將從磁盤中刪除這個表文件,否則,只從數據庫中刪除,但文件仍保存在磁盤中。
在當前打開的數據庫中建立視圖:
CREATE SQL VIEW viewname AS SELECT ……
其中SELECT ……為SELECT語句。
執行這個語句時,如果沒有打開的數據庫,則建立獨立的視圖,這樣的視圖不能存儲。
從當前打開的數據庫中刪除視圖:
DELETE VIEW viewname
打開壹個表:
USE tablename|? [IN 工作區號]
將當前數據表與另壹數據表連接後建立壹個新表:
JOIN WITH 工作區號|表別名 TO tablename FOR 條件 [FIELDS 字段名表]
三、數據表和表結構的編輯、修改
打開瀏覽窗口(可在其中編輯數據表):
BROWSW(詳細格式見P. 114~116)
打開並修改數據表中的字段:
(1) CHANGE [FIELDS 字段名列表]
(2) EDIT [FIELDS 字段名列表]
這兩個命令的功能相似,可選子句較多(詳見手冊)。
數據表改名:
RENAME TABLE tablename1 TO tablename2
其中數據表tablename1必須存在且未打開。
視圖改名:
RENAME VIEW viewname1 TO viewname2
其中數據表tablename1必須存在且未打開。
修改數據表結構(SQL命令):
ALTER TABLE tablename ;
ADD 字段名 Type [NULL | NOT NULL]
[,字段名 Type [NULL | NOT NULL] ;
[ALTER COLUMN字段名Type {NULL | NOT NULL}];
[{,字段名Type NULL | NOT NULL}...] ;
[DROP字段名[,字段名[, ...]]
將當前表與另壹表之間建立關聯:
SET RELATION TO [表達式1 INTO 工作區號1 | 表別名1];
[, 表達式2 INTO 工作區號2 | 表別名2] [, ...]
建立關聯的兩個表必須事先已按關聯表達式進行索引排序。
在當前表與另壹表之間建立壹對多關聯:
SET SKIP TO表別名1[, 表別名2]
消除當前表與另壹表之間的關聯:
SET RELATION OFF INTO 工作區號 | 表別名
四、數據表中數據操作(查詢、插入、刪除和修改等)
數據查詢SELECT語句(SQL命令)
格式見教材的有關章節。這是本課程的重點內容,必須很好地掌握。
更改數據表中的記錄:
REPLACE 字段1 WITH 表達式1[ADDITIVE];
[,< [,<字段2> WITH <表達式2>[ADDITIVE],…];
[FOR 條件1][WHILE條件2]
其中的ADDITIVE子句適用於備註字段,表示將表達式的值加在字段的末尾。
用內存數組的值更新數據表中的記錄:
REPLACE FROM ARRAY數組名 [FIELDS 字段名列表][常用子句]
用新的值更新表中的記錄(SQL命令):
UPDATE [databasename!]tablename;
SET Column_1=Expression1 [{Column_2=expression2}...] ;
[WHERE Condition]
用壹個表中的數據更新當前指定工作區中打開的表:
UPDATE ON fieldname FROM filename;
REPLACE fieldname1 WITH expr1
[, fieldname2 WITH expr2 [, ...]]
給記錄加刪除標記(SQL命令):
DELETE FROM [databasename!]tablename;
[WHERE 條件]
給記錄加刪除標記:
DELETE [範圍] [FOR 條件] [WHILE 條件];
[IN 工作區號|表別名]
永久刪除加了刪除標記的記錄:
PACK
永久刪除打開的數據庫中加了刪除標記的記錄:
PACK DATABASE
去掉刪除標記(恢復)
RECALL [常用子句]
刪除壹個表中所有記錄(保留表的結構):
ZAP [IN tablename|alias]
為數據表文件追加記錄:
APPEND [BLANK][IN 工作區號|別名]
從另壹個文件中提取數據添加到當前數據表的尾部:
APPEND FROM filename|? [FIELDS 字段名列表][ FOR 條件]
其中filename所指定的文件可以是數據表、EXCEL電子表格、文本文件等,如果不是數據表,需要其它子句指定格式(詳見手冊)。
用內存數組的值添加到當前數據表的尾部:
APPEND FROM ARRAY arrayname [ FOR 條件][FIELDS字段名列表]
數據中的壹行對應壹個新記錄,壹列對應壹個字段。
從壹個文件輸入壹個OLE對象放入壹個通用(general)字段 :
APPEND GENERAL 通用字段名 [FROM filename]
如果省略子句FROM filename,則將指定的字段清空。
將壹個文本文件的內容拷貝到壹個備註字段 :
APPEND MEMO 備註字段名 [FROM filename][OVERWRITE]
如果省略子句FROM filename,則將指定的字段清空。
插入新記錄(在當前記錄之前或後插入):
INSERT [BLANK] [BEFORE]
如不省略BLANK,則插入壹個空白記錄,且不顯示輸入窗口。
在表中插入新記錄並賦值(SQL命令):
INSERT INTO tablename [(字段1 [, 字段2, ...])]VALUES (eExpression1 [, eExpression2, ...])
或
INSERT INTO tablename FROM ARRAY ArrayName | FROM MEMVAR
如帶有FROM MEMVAR子句,則用同名的內存變量給字段賦值。
清除當前記錄中字段的數據:
BLANK [常用子句]
移動記錄指針:
SKIP [n] [IN 工作區號|表別名]
五、文件管理(文件和文件夾的復制、創建和刪除)
從當前表復制出表或其它類型的文件(表須打開)
COPY TO filename [FIELDS 字段名列表] [常用子句] [其它子句]
如果沒有指定類型,則復制壹個與當前的表相同的數據表。
復制表的結構
COPY STRUCTURE TO filename [FIELDS字段名列表]
復制任何文件:
COPY FILE 源文件 TO 目的文件
如果用此命令復制表,表須關閉
從磁盤上刪除任意文件:
(1)ERASE filename|?
(2)DELETE FILE [filename|?]
任意文件改名(或文件移動到另壹文件夾):
RENAME filename1 TO filename2
其中filename1和filename2都可以包含路徑。如二者不在同壹文件夾,則將filename1移動到filename2所在的文件夾。
顯示壹個文件夾中的文件信息:
DIR | DIRECTORY [ON drive]
從磁盤上刪除壹個文件夾:
RD | REDIR 文件夾名
在磁盤上建立壹個文件夾:
MD | MKDIR文件夾名
六、數據的復制與傳送
單個記錄與數組間的數據傳送
當前記錄 → 數組或內存變量:
SCATTER [FIELDS字段名列表][MEMO]TO 數組名 [BLANK] | MEMVAR [BLANK]
其中[BLANK]表示建立壹個空元素的數組。如果用MEMVAR子句,則表示將各字段的值復制到同名同類型的內存變量。
如果包含MEMO子句,則備註字段壹起復制。
數組或內存變量 → 當前記錄
GATHER FROM 數組名 | MEMVAR [FILEDS字段名列表] [MEMO]
用同名的內存變量或數組中的第壹行置換當前記錄,如果數組為多行的二維數組,也只用第壹行。
成批記錄與數組間的數據傳送
表 → 數組:
COPY TO ARRAY arrayname [常用子句]
數組 → 表:
(1) APPEND FROM ARRAY arrayname [ FOR 條件][FIELDS字段名列表]
用內存數組的值加在數據表的尾部,數據中的壹行對應壹個新記錄,壹列對應壹個字段。
(2) REPLACE FROM ARRAY數組名 [常用子句]
用內存數組的值更新數據表中符合條件的記錄。
查詢結果 → 數組:
SELECT …… INTO ARRAY arrayname
將SQL SELECT語句的查詢結果傳給數組arrayname。這裏“SELECT ……”可為各種形式的SELECT查詢語句。
給內存變量賦值:
STORE 表達式 TO 變量名
或
變量名=表達式
七、排序與索引
將當前表排序後建立壹個新數據表:
SORT TO 文件名 ON 字段名1 [/A | /D] ;
[/C] [ 字段名2 [/A | /D] [/C] ...];
[ASCENDING | DESCENDING] [常用子句];
建立單索引文件:
INDEX ON 表達式 TO 單索引文件名;
[FOR<條件>] [UNIQUE] [COMPACT];
[ASCENDING][DESCENDING][ADDITIVE]
建立復合索引文件:
INDEX ON 表達式 TO TAG 索引名 [OF 復合索引文件名];
[FOR 條件] [UNIQUE|CANDIDATE];
[ASCENDING][DESCENDING][ADDITIVE]
使用索引文件:
打開表時將索引文件壹並打開,USE命令帶INDEX子句:
USE tablename|? [IN 工作區號][INDEX 索引文件名列表|?]
給當前表打開壹個或多個索引文件:
SET INDEX TO〔索引文件名列表|?〕;
[ORDER 索引文件名序號|索引文件名|[TAG]索引名 [OF 復合索引文件名] ;
[ASCENDING][DESCENDING]〕
指定字符字段在排序或索引時的整理系列:
SET COLLATE TO 整理系列
對於漢字字符串,“整理系列”可以是“Machine”、“PinYin”或“Stroke”三者之壹(必須帶引號),分別表示按機器碼、拼音和筆劃排序。
指定當前表中的控制索引文件或標記:
SET ORDER TO;
[索引文件名序號|索引文件名|[TAG]索引名 [OF 復合索引文件名];
[IN 工作區號|表別名];
[ASCENDING][DESCENDING]
刪除索引
DELETE TAG ALL [OF 復合索引文件名]
DELETE TAG 索引標識1 [OF 復合索引文件名1];
[,索引標識2 [OF 復合索引文件名2]]…
八、查找和定位
順序查找當前表中滿足條件的第壹條記錄:
LOCATE FOR 條件下[範圍][WHILE條件]
找到後將記錄指針定位在滿足條件的第壹條記錄,且函數FOUND()的返回值為真。
在索引表中查找:
FIND cExpr
其中cExpr為字符串表達式。如果找到,則記錄指針定位在滿足條件的第壹條記錄,且函數FOUND()的返回值為真;查找失敗時,FOUND()的返回值為假,記錄指針定位在文件尾。
在索引表中查找:
SEEK eExpr;
[ORDER 索引文件名序號|索引文件名|[TAG]索引名 [OF 復合索引文件名] ;
[ASCENDING][DESCENDING]〕;
[IN 工作區號|表別名]
如果找到,則記錄指針定位在滿足條件的第壹條記錄,且為真;查找失敗時,FOUND()的返回值為假,記錄指針定位在文件尾。
繼續查找:
CONTINUE
用LOCATE、 FIND或 SEEK查找到壹條記錄後,用CONTINUE繼續查找下壹條。
用以上查找命令LOCATE、 FIND、SEEK和CONTINUE的查找結果,都可以通過函數FOUND()的返回值反映出來。
九、統計計算
統計表中的記錄數:
COUNT [範圍] [FOR 條件] [WHILE 條件][TO內存變量名]
統計滿足條件的記錄數,顯示記錄數或將結果賦給內存變量名。
求和:
SUM [表達式列表];
[範圍] [FOR 條件] [WHILE 條件][TO內存變量名|TO ARRAY 數組名]
求平均值:
AVERAGE [表達式列表];
[範圍] [FOR 條件] [WHILE 條件][TO內存變量名|TO ARRAY 數組名]
對當前表中數值型字段進行分組求和:
TOTAL TO tablename ON 字段名[常用子句]
其中tablename為存放結果的表文件名,字段名為確定求和分組的字段。
計算:
CALCULATE 表達式列表;
[範圍] [FOR 條件] [WHILE 條件][TO內存變量名|TO ARRAY 數組名]
其中表達式列表可以是如下函數的任意組合:
AVG(nExpr), CNT(), MAX(eExpr), MIN(eExpr), NPV(nExpr1, nExpr2,…),
STD(nExpr),SUM(nExpr),VAR(nExpr)
其中nExpr為數值表達式,eExpr為任意表達式。
十、程序控制
條件語句:
IF 條件 [THEN]
……
[ELSE]
[……]
ENDIF
多分支語句:
DO CASE
CASE 邏輯表達式1
……
CASE 邏輯表達式2
……
CASE 邏輯表達式n
……
[OTHERWISE]
……
ENDCASE
DO循環:
DO WHILE 條件
[LOOP]
……
[EXIT]
……
ENDDO
FOR循環
FOR 循環變量=初值 TO 終值 STEP 步長
……(中間可插入[LOOP]或[EXIT])
ENDFOR | NEXT
掃描循環(對壹個表中滿足條件的記錄進行循環):
SCAN [範圍] [FOR 條件] [WHILE 條件]
……(中間可插入[LOOP]或[EXIT])
ENDSCAN
集合掃描循環
FOR EACH Var IN Group
Commands
[EXIT]
[LOOP]
ENDFOR | NEXT [Var]
十壹、其它
定義數組:
DECLARE | DIMENSION 數組名(下標1,下標2,……)
定義過程:
PROCEDURE 過程名
PARAMETERS 參數表
……
RETURN [TO MASTER | TO 程序名]
定義函數:
FUNCTION 函數名
PARAMETERS 參數表
……
RETURN 表達式
調用壹個子程序或過程
DO 子程序名 | 過程名 [IN 程序文件名][WITH 實在參數表]
定義公***變量:
PUBLIC 變量名列表
PUBLIC [ARRAY] 數組名1(行1,列1)[, 數組名2(行2,列2) [,…]]
定義私有變量
PRIVATE變量名列表
PRIVATE ALL[LIKE | EXCEPT 通配符]
定義局部變量
LOCAL 變量名列表
LOCAL [ARRAY] 數組名1(行1,列1)[, 數組名2(行2,列2) [,…]]
顯示各種信息:
LIST … (格式見有關手冊)
DISPLAY … (格式見有關手冊)
輸出提示信息:
WAIT [<提示信息>] [TO <內存變量>];
[WINDOW[AT[<行>,< 列>] [NOWAIT]];
[CLEAR|NOCLEAR];
[TIMEOUT<數值表達式>]
各種設置命令:
設置是否顯示日期中的世紀:
SET CENTURY ON | OFF
設置顯示的小數位數:
SET DECIMALS TO 小數位數
設置是否處理帶刪除標記的記錄:
SET DELETED ON | OFF
如果設置為ON,則不處理帶刪除標記的記錄。
設置是否顯示命令的結果:
SET TALK ON | OFF
設置文件的搜索路徑:
SET PATH TO 路徑
設置傳給子程序或自定義函數的參數是按值還是按引用方式傳遞:
SET UDFPARMS TO VALUE | REFERENCE
如設置為TO VALUE,表示按值傳遞。
執行壹個外部命令或程序:
RUN 命令或程序
在指定的位置顯示或打印:
@行,列 SAY …
在指定的位置顯示表達式的值,並等待用戶輸入,將輸入值賦給壹變量:
@行,列 SAY 表達式 GET 變量名 [DEFAULT 表達式]
READ
例:
@2,2 say "請輸入金額: " get nMoney default 50
Read
此例先在第2行、第2列顯示"請輸入金額: ",等待用戶輸入壹個數值,將用戶輸入值賦給變量nMoney,如果用戶不輸入數值(直接按回車),則將50賦給nMoney。請註意在下壹行不能漏掉“Read”。