Delphi 是具可視化界面的面向對象編程語言它以其功能強大簡便易用等諸多特性深受編程人員的歡迎Delphi 中提供了數據庫引擎 BDE(Borland Database Engine)並內含眾多的數據庫調用構件為編程人員開發客戶/服務器應用程序提供了方便通常情況下利用 Delphi 開發數據庫應用程序可以使用TTableTDataSourceTDBEditTDBNavigator等構件只要正確設置了構件的某些屬性再編寫必要的程序代碼對一些特定事件進行處理就能夠完成對多種數據庫進行的數據處理例如記錄的輸入修改刪除和查詢等這樣做雖然只需要編寫極少量的程序代碼就能達到很好的效果但如果在程序設計過程中某些數據表的結構發生了改變則必須修改與此數據表有關的所有構件的屬性這將使程序員陷入繁瑣的重復勞動中
為避免上述的麻煩我們可以在編寫網絡數據庫應用程序時采用結構化查詢語言 SQL(Structured Query Language)這樣不僅可以更方便地與諸如 SQL ServerOracle 等各種後台數據庫進行動態的數據交換而且可以使程序的修改和移植更加靈活我們以數據輸入模塊為例說明開發客戶/服務器應用程序時如何采用 SQL 語句實現數據處理功能首先判斷是否已經有事務處理程序在運行如果有將其回卷(rollback)如果沒有則啟動一個新的事務為數據的最終處理做准備其次是設置 SQL 語句並將其寫入 TQuery 構件中最後將事務提交或回卷至此完成一條記錄的數據輸入
下面是以頁面中的 TEdit 類型編輯框內容作為數據源向數據庫輸入記錄的過程代碼
procedure DataInsert(const qName:TQuery;
szDBName:string;iNum:Integer;
iMark:array of Integer;eName:array of TEdit);
var
i : Integer;
szSQL : string;
begin
if DataModuleDataBaseInTransaction=true then
DataModuleDataBaseRollBack;
DataModuleDataBaseStartTransaction;
szSQL := INSERT INTO +szDBName+ VALUES(
for i:= to iNum do
begin
if iMark[i]= then
szSQL := szSQL+eName[i]Text {非字符方式}
else
szSQL := szSQL++eName[i]Text+; {字符方式}
if i=iNum then
szSQL := szSQL+)
else
szSQL := szSQL+;
end;
qNameClose; {關閉查詢}
qNameSQLClear; {清SQL特性內容}
qNameSQLADD(szSQL); {添加SQL內容}
szSQL := SELECT * FROM +szDBName;
qNameSQLADD(szSQL);
qNameOpen; {返回結果集}
DataModuleDataBaseCommit;
end;
以上過程包含五個參數實現從頁面中的一系列編輯框中讀取數據並向指定數據表輸入的功能其中參數 qName 為頁面中所使用的 TQuery 類構件的名稱參數 szDBName 是數據表的名稱參數eName 是 TEdit 類型的數組列出了頁面中包含數據的各編輯框名稱參數 iNum 是數據表中的字段個數也即編輯框的個數參數 iMark 是一個整數類型的數組該參數表明相應字段是以何種方式輸入的如果是字符方式需要在數據前後兩端加上引號需要注意的是在調用本過程之前應將數據庫連接打開
DataModuleDataBaseConnected := true;
過程調用完成後將數據庫連接斷開
DataModuleDataBaseConnected := false;
另外開發網絡數據庫應用程序時還可以使用存儲過程即將預先編譯過的 SQL 語句存儲在服務器上存儲過程提前運行且不與程序代碼一同存儲和編譯因此其對應主程序中的代碼相對簡潔運行速度也較快SQL 語句的集中存放使其修改更容易
要創建向數據表中輸入數據的存儲過程代碼編寫舉例如下
CREATE PROC ProcTest
@inttest smallint
@strtest char() output
AS
INSERT INTO TEST_UserTRANS_TEST
VALUES(@inttest@strtest)
SELECT @strtest* FROM TEST_UserTRANS_TEST
以上代碼向數據表 TEST_UserTRANS_TEST 添加數據該數據表包括兩個字段第一個字段為 smallint 類型的數據參數類型定為 Input(在存儲過程中可缺省)第二個字段數據為長度為 的字符類型參數類型為 Output
其模塊程序的編寫與 DataInsert 過程相似區別主要在於模塊的中間部分對應的主要代碼如下
StoredProcClose;
{關閉存儲過程}
StoredProcParams[]ParamType := ptInput;
{設置存儲過程的參數類型}
StoredProcParams[]AsInteger := ;
{設置存儲過程中參數的數據}
StoredProcParams[]ParamType := ptOutput;
StoredProcParams[]AsString := abcd;
StoredProcOpen; {打開存儲過程}
其中StoredProc 是 TStoredProc 類型的構件名稱Params[] 是存儲過程中的第一個參數對應存儲過程 ProcTest 可以用ParamByName(@inttest)代替存儲過程的第二個參數與其類似
實際上編寫對網絡數據庫進行其他數據處理(如修改刪除和查詢等)的模塊與數據的輸入模塊大體相似這裡就不再贅述了
From:http://tw.wingwit.com/Article/program/Delphi/201311/25067.html