foxpro存儲過程
存儲過程是存儲在
.dbc
文件中的
Visual
FoxPro
代碼,是專門操作資料庫中數據的代碼過程。存儲過程可以提高資料庫的性能,因為在打開一個資料庫時,它們便載入到了內存中。
使用存儲過程主要是為了創建用戶自定義函數,欄位級規則和記錄級有效性規則將引用這些函數。當把一個用戶自定義函數作為存儲過程保存在資料庫中時,函數的代碼保存在
.dbc
文件中,並且在移動資料庫時,會自動隨資料庫移動。使用存儲過程能使應用程序更容易管理,因為可以不必在資料庫文件之外管理用戶自定義函數。
2. 啥叫「存儲過程」啊
存儲過程
存儲過程是保存在資料庫中的專門進行數據操作的代碼過程。存儲過程通常與觸發器結合使用,來控制數據的完整性。在打開資料庫時,存儲過程被自動載入到內存中,可以象其他過程文件一樣進行調用。
1.建立存儲過程
可以在項目管理器中選擇建立或修改存儲過程。在項目管理器的Data選項卡中選定Stored Proceres節點,然後單擊New、Add或Modify按鈕都將打開存儲過程文本編輯器,如圖7-12所示。
也可以在首先打開資料庫的情況下,執行MODIFY STRUCTURE命令打開存儲過程文本編輯器。如:
OPEN DATABASE dbMyData
MODIFY STRUCTURE
一個資料庫的所有存儲過程包含在一個文件中,過程使用PROCEDURE語句聲明,這與一般的過程文件是完全一樣的。
例如,下面為資料庫建立了一個名為NewStuId的存儲過程,該過程為學生檔案表的StuId欄位根據當前StuId中的最大值自動生成一個編號,並保存到StuId欄位中中,如圖7-13所示。
圖7-12 可以在項目管理器選擇建立或修改存儲過程
圖7-13 NewStuId存儲過程
執行下面的代碼,將在學生檔案表中添加一條新記錄,並為StuId欄位賦值。
APPEND BLANK
NewStuId() &&執行存儲過程
需要注意的是,如果准備存儲過程用於表的觸發器,則不能包含如圖7-13中所示的CALCULATE、GO和REPLACE這些引起記錄移動的命令。
2.從文本文件中導入存儲過程
可以使用APPEND PROCEDURES命令將文本文件中的存儲過程以編程的方式添加到當前資料庫中,其語法格式如下:
APPEND PROCEDURES FROM FileName [AS nCodePage] [OVERWRITE]
其中,FileName指定保存存儲過程的文本文件名稱;AS nCodePage指定要追加其存儲過程的文本文件要轉換的代碼頁;OVERWRITE指定用文本文件中的過程改寫資料庫中的當前存儲過程,如果不包含此參數,文本文件中的存儲過程將追加到當前存儲過程中。
需要注意的是,在使用該命令前,資料庫必須以獨占方式打開並設置為當前資料庫。
3.將存儲過程導出到文本文件中
可以使用COPY PROCEDURES命令將當前資料庫中的存儲過程導出到文本文件,其語法格式如下:
COPY PROCEDURES TO FileName [AS nCodePage] [ADDITIVE]
其中,FileName指定文本文件名,存儲過程將被復制到此文本文件中;AS nCodePage指定文本文件的代碼頁;ADDITIVE指定將存儲過程追加到指定文本文件尾,如果若省略該參數,則覆蓋文本文件的內容。
4.查看資料庫中的存儲過程
可以使用DISPLAY PROCEDURES或LIST PROCEDURES命令顯示當前資料庫中的存儲過程名稱,二者的功能基本相同。其中,DISPLAY PROCEDURES命令的語法格式如下:
DISPLAY PROCEDURES [TO PRINTER [PROMPT] | TO FILE FileName] [NOCONSOLE]
其中,TO PRINTER [PROMPT]指定將顯示結果輸出到列印機中,包含PROMPT子句可以在列印開始前顯示一個列印對話框;TO FILE FileName指定將顯示結果輸出到FileName指定的文件中;NOCONSOLE指定不向Visual FoxPro主窗口或活動的用戶自定義窗口輸出。
例如,下面的代碼將顯示dbMyData資料庫中的存儲過程名稱。
OPEN DATABASE dbMyData
DISPLAY PROCEDURES
7.3.6 設置觸發器
觸發器是綁定在表上的表達式,當表中的任何記錄被指定的操作命令修改時,觸發器被激發。當數據修改時,觸發器可執行資料庫應用程序要求的任何其他操作。
觸發器作為特定表的屬性來創建和存儲。如果從資料庫中移去一個表,則同時刪除和該表相關聯的觸發器。從前面的表7-7可以看出,觸發器是在進行了其他所有檢查之後(如有效性規則、主關鍵字的實施,以及NULL值的實施)被激活,位於所有約束的最後面。並且與欄位級規則和記錄級規則不同,觸發器不對緩沖數據起作用。
1.建立觸發器
可以使用表設計器或CREATE TRIGGER命令來創建觸發器。對於每個表,可為插入、更新及刪除3個事件各創建一個觸發器。在任何情況下,一個表最多隻能有3個觸發器。觸發器必須返回「真」(.T.)或「假」(.F.),只有返回「真」時操作才能繼續進行。能夠激發觸發器的命令如表7-9所示。
表7-9 能夠激發觸發器的命令
觸發器
命令
刪除觸發器
DELETE命令
插入觸發器
APPEND FROM、APPEND FROM ARRAY、APPEND BLANK、IMPORT、INSERT-SQL和RECALL命令
序表
觸發器
命令
更新觸發器
GATHER、REPLACE、REPLACE FROM ARRAY和UPDATE SQL命令
需要注意的是,不能對有觸發器的表使用INSERT命令,但是可以使用INSERT-SQL命令;發出PACK或ZAP不會激發任何觸發器;如果更新具有刪除標記的記錄,不會激發觸發器;如果表使用了緩沖模式,只有當使用TABLEUPDATE( )函數進行發送更新時,才激發更新觸發器。
下面是在dbMyData資料庫中建立的4個存儲過程。其中,InsertData用於在添加記錄時顯示一個「新增記錄…」提示;UpdateData用於在記錄更新時自動將更新記錄寫入到一個日誌表tblStudent2中,來記錄用戶對學生檔案表所做的修改;DeleteData用於在刪除記錄時顯示一個信息框,詢問用戶是否確認刪除記錄;WriteLog用於寫入日誌,該過程可以接收來自UpdateData過程的參數傳入值。
PROCEDURE WriteLog
PARAMETERS lcStuId,lcStuName,lcClassName,ldEnterDate,lnChinese,lnMaths,lnTotal
*!* 將變動寫入到日誌表tblStuden2中
INSERT INTO tblStudent2 (StuId,StuName,ClassName,EnterDate,Chinese,Maths,Total) ;
VALUES (lcStuId,lcStuName,lcClassName,ldEnterDate,lnChinese,lnMaths,lnTotal)
PROCEDURE InsertData
WAIT WINDOW "新增記錄..." NOWAIT TIMEOUT 2
RETURN .T.
PROCEDURE UpdateData
WAIT WINDOW "正在將變動寫入日誌表..." NOWAIT TIMEOUT 2
WriteLog(StuId,StuName,ClassName,EnterDate,Chinese,Maths,Total)
RETURN .T.
PROCEDURE DeleteData
IF MESSAGEBOX("確認刪除該記錄嗎?",4+32," 提示")=6
RETURN .T.
ELSE
RETURN .F.
ENDIF
打開表設計器,在Table選項卡的Insert trigger、Update trigger和Delete trigger文本框中分別輸入InsertData()、UpdateData()和DeleteData(),如圖7-14所示。
圖7-14 為表建立觸發器
也可以使用CREATE TRIGGER命令為表建立觸發器表達式,該命令的語法格式如下:
CREATE TRIGGER ON TableName FOR DELETE | INSERT | UPDATE AS lExpression
其中,TableName是要建立觸發器的表名稱,lExpression是觸發器表達式。例如,下面使用該命令為學生檔案表建立了與圖7-14同樣的觸發器表達式。
OPEN DATABASE dbMyData
CREATE TRIGGER ON 學生檔案表 FOR INSERT AS InsertData() &&建立插入觸發器
CREATE TRIGGER ON 學生檔案表 FOR UPDATE AS UpdateData() &&建立更新觸發器
CREATE TRIGGER ON 學生檔案表 FOR DELETE AS DeleteData() &&建立刪除觸發器
2.刪除觸發器
可以在表設計器的Table選項卡中刪除觸發器或使用DELETE TRIGGER命令從資料庫表中刪除觸發器。其中,DELETE TRIGGER命令的語法格式如下:
DELETE TRIGGER ON TableName FOR DELETE | INSERT | UPDATE
其中,TableName是要刪除觸發器的表名稱。
例如,下面的代碼將刪除學生檔案表中的插入觸發器。
DELETE TRIGGER ON 學生檔案表 FOR INSERT
3.修改觸發器
可以在表設計器的Table選項卡中或者使用CREATE TRIGGER命令來修改觸發器。使用命令修改觸發器與建立觸發器時相同。
3. FoxPro到底是個什麼軟體,它有什麼用處
visual foxpro是資料庫管理系統,是介於資料庫和用戶的管理系統,集成開發語言,提供資料庫操作前端界面的製作,提供c/s模式開發,提供api和activitx函數和控制項的介面,是開發小型資料庫的前端工具。
資料庫管理系統是一個能夠提供數據錄入、修改、查詢的數據操作軟體,具有數據定義、數據操作、數據存儲與管理、數據維護、通信等功能,且能夠允許多用戶使用。另外,資料庫管理系統的發展與計算機技術發展密切相關。而且近年來,計算機網路逐漸成為人們生活的重要組成部分。
(3)foxpro存儲過程擴展閱讀:
按功能劃分,資料庫管理系統大致可分為6個部分:
(1)模式翻譯:提供數據定義語言(ddl)。用它書寫的資料庫模式被翻譯為內部表示。資料庫的邏輯結構、完整性約束和物理儲存結構保存在內部的數據字典中。資料庫的各種數據操作(如查找、修改、插入和刪除等)和資料庫的維護管理都是以資料庫模式為依據的。
(2)應用程序的編譯:把包含著訪問資料庫語句的應用程序,編譯成在dbms支持下可運行的目標程序。
(3)互動式查詢:提供易使用的互動式查詢語言,如SQL.DBMS負責執行查詢命令,並將查詢結果顯示在屏幕上。
(4)數據的組織與存取:提供數據在外圍儲存設備上的物理組織與存取方法。
(5)事務運行管理:提供事務運行管理及運行日誌,事務運行的安全性監控和數據完整性檢查,事務的並發控制及系統恢復等功能。
(6)資料庫的維護:為資料庫管理員提供軟體支持,包括數據安全控制、完整性保障、資料庫備份、資料庫重組以及性能監控等維護工具。