foxpro存儲過程-ag真人国际官网
存儲過程是存儲在
.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)資料庫的維護:為資料庫管理員提供軟體支持,包括數據安全控制、完整性保障、資料庫備份、資料庫重組以及性能監控等維護工具。