999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

應用Delphi開發網絡數據庫

2009-01-06 04:55:38賈維珉
數字技術與應用 2009年11期

田 明 賈維珉

[摘 要]Delphi是具可視化界面的面向對象編程語言,它以其功能強大、簡便易用等諸多特性,深受編程人員的歡迎。Delphi 中提供了數據庫引擎 BDE(Borland Database Engine),并內含眾多的數據庫調用構件,為編程人員開發客戶/服務器應用程序提供了方便。通常情況下,利用 Delphi 開發數據庫應用程序,可以使用TTable、TDataSource、TDBEdit、TDBNavigator等構件。只要正確設置了構件的某些屬性,再編寫必要的程序代碼對一些特定事件進行處理,就能夠完成對多種數據庫進行的數據處理,例如:記錄的輸入、修改、刪除和查詢等。這樣做雖然只需要編寫極少量的程序代碼就能達到很好的效果,但如果在程序設計過程中,某些數據表的結構發生了改變,則必須修改與此數據表有關的所有構件的屬性,這將使程序員陷入繁瑣的重復勞動中。

[關鍵詞]Delphi開發 功能強大 簡便易用

[中圖分類號]TP273[文獻標識碼]A[文章編號]1007-9416(2009)11-0087-01

為避免上述的麻煩,我們可以在編寫網絡數據庫應用程序時采用結構化查詢語言 SQL(Structured Query Language),這樣不僅可以更方便地與諸如 SQL Server、Oracle等各種后臺數據庫進行動態的數據交換,而且可以使程序的修改和移植更加靈活。我們以數據輸入模塊為例,說明開發客戶/服務器應用程序時如何采用 SQL 語句實現數據處理功能。首先,判斷是否已經有事務處理程序在運行,如果有,將其回卷(rollback);如果沒有,則啟動一個新的事務,為數據的最終處理做準備。其次,是設置SQL語句,并將其寫入TQuery 構件中。最后,將事務提交或回卷,至此完成一條記錄的數據輸入。

下面是以頁面中的TEdit類型編輯框內容作為數據源,向數據庫輸入記錄的過程代碼:

procedure DataInsert(const qName:TQuery;

szDBName:string;iNum:Integer;

iMark:array of Integer;eName:array of TEdit);

vari:Integer;

szSQL:string;

begin if DataModule1.DataBase1.InTransaction=true then

DataModule1.DataBase1.RollBack;

DataModule1.DataBase1.StartTransaction;

szSQL:='INSERT INTO'+szDB-Name+' VALUES('for i:=0 to iNum-1 do

begin if iMark[i]=0 then szSQL:=szSQL+eName[i].Text?{非字符方式}

else szSQL:=szSQL+'"'+eName[i].Text+'"';{字符方式}

if i=iNum-1 then szSQL:=szSQL+')'else szSQL:=szSQL+',';

qName.Close;{關閉查詢}

qName.SQL.Clear;{清SQL特性內容}

qName.SQL.ADD(szSQL);{添加SQL內容}

szSQL:='SELECT*FROM'+szDB-Name;

qName.SQL.ADD(szSQL);

qName.Open;{返回結果集}

DataModule1.DataBase1.Commit;

end;

以上過程包含五個參數,實現從頁面中的一系列編輯框中讀取數據,并向指定數據表輸入的功能。其中,參數qName 為頁面中所使用的TQuery類構件的名稱;參數szDBName是數據表的名稱;參數eName是TEdit類型的數組,列出了頁面中包含數據的各編輯框名稱;參數iNum 是數據表中的字段個數,也即編輯框的個數;參數 iMark 是一個整數類型的數組,該參數表明相應字段是以何種方式輸入的,如果是字符方式,需要在數據前后兩端加上引號。需要注意的是:在調用本過程之前,應將數據庫連接打開:

DataModule1.DataBase1.Connected:=true;

過程調用完成后,將數據庫連接斷開:

DataModule1.DataBase1.Connected:= false;

另外,開發網絡數據庫應用程序時,還可以使用存儲過程,即:將預先編譯過的 SQL語句存儲在服務器上。存儲過程提前運行,且不與程序代碼一同存儲和編譯,因此其對應主程序中的代碼相對簡潔,運行速度也較快。SQL語句的集中存放,使其修改更容易。

要創建向數據表中輸入數據的存儲過程,代碼編寫舉例如下:

CREATE PROC ProcTest1 @inttest smallint,@strtest char(4) output AS INSERT INTO TEST_User.TRANS_TEST VALUES(@inttest,@strtest) SELECT @strtest,* FROM TEST_User.TRANS_TEST

以上代碼向數據表TEST_User.TRANS_TEST添加數據,該數據表包括兩個字段:第一個字段為smallint類型的數據,參數類型定為Input(在存儲過程中可缺省);第二個字段數據為長度為4的字符類型,參數類型為Output。

其模塊程序的編寫與DataInsert過程相似,區別主要在于模塊的中間部分,對應的主要代碼如下:

StoredProc1.Close;{關閉存儲過程}

StoredProc1.Params[1].ParamType:= ptInput;{設置存儲過程的參數類型}

StoredProc1.Params[1].AsInteger:= 1;{設置存儲過程中參數的數據}

StoredProc1.Params[2].ParamType:= ptOutput;

StoredProc1.Params[2].AsString:= 'abcd';

StoredProc1.Open;{打開存儲過程}

其中,StoredProc1是TStoredProc類型的構件名稱;Params[1]是存儲過程中的第一個參數,對應存儲過程 ProcTest1可以用ParamByName('@inttest')代替;存儲過程的第二個參數與其類似。

實際上,編寫對網絡數據庫進行其他數據處理(如:修改、刪除和查詢等)的模塊,與數據的輸入模塊大體相似,這里就不再贅述了。

主站蜘蛛池模板: 久久精品国产精品国产一区| 欧美日本一区二区三区免费| 99久久精品国产麻豆婷婷| 97国产成人无码精品久久久| 久久香蕉国产线看观看精品蕉| 久久人人97超碰人人澡爱香蕉| 亚洲天堂精品视频| 美女潮喷出白浆在线观看视频| 国产人成乱码视频免费观看| 国产亚洲欧美日韩在线一区二区三区| 热re99久久精品国99热| 国产女同自拍视频| 天天色天天综合网| 亚洲色无码专线精品观看| 欧美福利在线| 国产AV无码专区亚洲A∨毛片| 欧美日韩亚洲国产主播第一区| 成人精品在线观看| 亚洲第一色视频| 无码aⅴ精品一区二区三区| 亚洲第一网站男人都懂| 国产情侣一区| 伊人久久久大香线蕉综合直播| 99久久国产综合精品2023| 尤物精品视频一区二区三区| 成人国产精品2021| 久久99蜜桃精品久久久久小说| 欧美午夜视频在线| www.亚洲一区| 精品日韩亚洲欧美高清a| 国产JIZzJIzz视频全部免费| 国产在线无码av完整版在线观看| 国产高清国内精品福利| 91色老久久精品偷偷蜜臀| 成人年鲁鲁在线观看视频| 波多野结衣一级毛片| 全部无卡免费的毛片在线看| 久久夜色精品国产嚕嚕亚洲av| 久久99国产综合精品1| 全部免费特黄特色大片视频| 精品国产自在现线看久久| 国产一级裸网站| 国产区91| 色亚洲成人| 一级毛片免费播放视频| 男女猛烈无遮挡午夜视频| 国产在线八区| 美女被躁出白浆视频播放| 亚洲激情99| 99热这里只有精品免费| 日本一本在线视频| 日韩国产黄色网站| 91精品久久久久久无码人妻| 国产特级毛片aaaaaaa高清| 91色爱欧美精品www| 中文字幕一区二区视频| 久久久久久午夜精品| 欧美一区国产| 国产香蕉一区二区在线网站| 欧美亚洲网| 91小视频版在线观看www| 欧美日韩精品一区二区在线线| 毛片在线区| 国产精品人莉莉成在线播放| 欧美日韩另类在线| 国产一区二区福利| 国产鲁鲁视频在线观看| 高清无码一本到东京热| 国产爽爽视频| 欧美啪啪一区| 无码人中文字幕| 永久免费无码成人网站| 播五月综合| 免费在线看黄网址| 国产真实乱子伦视频播放| 香蕉视频在线精品| 99er这里只有精品| 午夜一级做a爰片久久毛片| 亚洲第一成年人网站| 91麻豆国产在线| 亚洲久悠悠色悠在线播放| 欧美一级在线|