Delphi實現(xiàn)兩層CS數(shù)據(jù)庫應用程序設(shè)計_第1頁
Delphi實現(xiàn)兩層CS數(shù)據(jù)庫應用程序設(shè)計_第2頁
Delphi實現(xiàn)兩層CS數(shù)據(jù)庫應用程序設(shè)計_第3頁
Delphi實現(xiàn)兩層CS數(shù)據(jù)庫應用程序設(shè)計_第4頁
免費預覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Delphi實現(xiàn)兩層C/S數(shù)據(jù)庫應用程序設(shè)計關(guān)鍵詞Delphi C/S數(shù)據(jù)庫結(jié)構(gòu)模式數(shù)據(jù)庫管理MS-SQL server引言Delphi具有非常強大的數(shù)據(jù)庫管理功能,能適應多種數(shù)據(jù)庫結(jié)構(gòu),從 桌面數(shù)據(jù)庫到客戶機/服務器模式再到多層數(shù)據(jù)庫結(jié)構(gòu)模式,都能勝任。 本文以數(shù)據(jù)庫服務端軟件Microsoft SQL Server 2000及客戶端開發(fā)軟件 Delphi 6.0為例,簡要介紹開發(fā)兩層C/S結(jié)構(gòu)數(shù)據(jù)庫應用程序的一般步驟、 方法和局部實例。一、應用程序開發(fā)環(huán)境客戶/服務器(C/S)結(jié)構(gòu)包括連接在一個網(wǎng)絡中的多臺計算機。請求另一臺 計算機為之服務的計算機稱為客戶機(Client)。而處理數(shù)據(jù)庫的

2、計算機稱 為服務器(Server)。下面是本文使用的開發(fā)環(huán)境。1、服務端網(wǎng)絡數(shù)據(jù)庫系統(tǒng)目前,在開發(fā)C/S數(shù)據(jù)庫應用程序時,可以在服務器端使用的數(shù)據(jù)庫管理 系統(tǒng)有:ORACLE公司的ORACLE數(shù)據(jù)庫,Sybase公司的Sybase數(shù)據(jù)庫,DB2 服務端網(wǎng)絡數(shù)據(jù)庫,微軟公司的Microsoft SQL Server等等。本文使用的 是Microsoft SQL Server 2000,安裝后可以很方便地使用SQL Server服 務器管理工具啟動后臺數(shù)據(jù)庫服務程序,為客戶端提供數(shù)據(jù)庫服務。2、客戶端數(shù)據(jù)源的配置C/S數(shù)據(jù)庫應用程序的客戶端必須能與服務端的數(shù)據(jù)庫管理系統(tǒng)進行網(wǎng)絡 通信。本文的客戶端

3、使用的是ODBC for SQL Server驅(qū)動程序及TCP/IP協(xié) 議與服務端進行連接。在ODBC管理器中的系統(tǒng)DSN中增加兩個驅(qū)動為SQL Server的數(shù)據(jù)源連接,名稱為MSSQL1和MSSQL2,分別連接MicrosoftSQL Server 2000中的例行數(shù)據(jù)庫pubs和Northwind。ODBC配置完成后,翻開 BDE Administrator便可看到,在BDE Administrator已經(jīng)自動創(chuàng)立了別名 為MSSQL1和MSSQL2的數(shù)據(jù)庫。二、創(chuàng)立客戶端數(shù)據(jù)庫應用程序SQL語言作為關(guān)系數(shù)據(jù)庫管理系統(tǒng)中的一種通用的結(jié)構(gòu)化查詢語言,已被眾 多的數(shù)據(jù)庫管理系統(tǒng)采用,Delp

4、hi通過TQuery, TStoredProc, UpdateSQL, TDatabase, TSession等組件支持SQL Server數(shù)據(jù)庫編程。下面介紹通過 Delphi的相關(guān)組件開發(fā)客戶端應用程序的一般步驟和方法。1、建立與數(shù)據(jù)庫的連接Delphi使用Tdatabase控件控制程序與數(shù)據(jù)庫的連接,并使用Tsession控 件對所有Tdatabase控件進行全局控制,當創(chuàng)立數(shù)據(jù)庫應用程序時,應用 程序會自動創(chuàng)立一個默認的BDE會話期對象Session,新加入的TDatabase 對象會默認地處于Session管理之下。在窗體上放四個命令按鈕:FirstOpen, FirstClose,

5、 SecondOpen和 SecondClose,放兩個 TDatabase 組件 Database 1 和 Database2,其相關(guān)代 碼如下:procedure TForml. FirstOpenClick(Sender: TObject);begindatabasel:=session. OpenDatabase C MSSQL1); end;procedure TForml. SecondOpenClick(Sender: TObject);begindatahase2:=session. OpenDatabase( MSSQL2); end;procedure TForml. Fi

6、rstCloseClick(Sender: TObject);var db:TDatabase;begindb:=session. FindDatabaseC MSSQLV );查找是否有以MSSQL1 為別名 的database對象IF (DBONIL) THEN db. Close;end;procedure TForml. SecondCloseClick(Sender: TObject);var db:TDatabase;begindb:=session. FindDatabaseC MSSQL2);IF (DBONIL) THENdb. Close;end;Session調(diào)用Open

7、database方法翻開與別名為MSSQL1的數(shù)據(jù)庫的連接(連 接的是Microsoft SQL Server中的數(shù)據(jù)庫pubs)并返回database對象給 databasel,翻開別名為MSSQL2 (連接Microsoft SQL Server中的數(shù)據(jù)庫 Northwind)并返回 database對象給 database2,用 FindDatabase 方法找 到別名為MSSQL1和MSSQL2的數(shù)據(jù)庫,返回給臨時數(shù)據(jù)庫對象db,并使用 TDatabase組件的Close方法關(guān)閉數(shù)據(jù)庫連接。2、在程序中操縱數(shù)據(jù)庫(1)建立查詢并使其結(jié)果集可編輯當需要對查詢結(jié)果進行編輯時,可用TQuer

8、y或TStoredProc組件并結(jié)合 TUpdataSQL 組件來實現(xiàn)。TQuery 或TStoredProc 的CachedUptates為 True, 表示可進行緩存編輯,UpdateObject屬性為設(shè)置某TUpdateSQL對象,如 UpdateSQLl ; UpdateSQLl 對象的屬性DeleteSQL, InsertSQL, ModifySQL 是作為編輯查詢結(jié)果后寫入數(shù)據(jù)庫時生成相應SQL語句的參數(shù),可手動設(shè) 置,也可雙擊UpdateSQLl對象激活其編輯器進行生成,查詢結(jié)果可顯示在 DBGridl中,并可直接在其上進行編輯,例如代碼如下(UpdateSQLl的 Delete

9、SQL, InsertSQL, ModifySQL直接用其編輯器生成,在此不列出): procedure TForml. QueryDisplayClick(Sender: TObject);beginDataSource1. DataSet:=queryl;query1.Close;query1. CachedUpdates:=True;queryl. SQL. Clear;清除 SQL 屬性query1. ParamCheck:=True;queryl. DatabaseName: = MSSQL1;queryl. SQL. AddC select * from employee);que

10、ryl. SQL. AddC where pub_id : pubid);queryl. SQL. Add( order by emp_id?);queryl. ParamByName(, pubid ). AsString: = , 1000;queryl. Prepare;queryl. ExecSQL;end;上述代碼中,使用query組件的Add方法增加SQL屬性,Pubid為動態(tài)參數(shù), 在執(zhí)行SQL語句前需對其進行賦值,用ExecSQL方法執(zhí)行SQL語句,在 DBGridl中對查詢結(jié)果進行編輯后,可調(diào)用ApplyUpdates方法把緩存中的 數(shù)據(jù)寫入數(shù)據(jù)庫。(2)動態(tài)創(chuàng)立存儲過程De

11、lphi可用Query組件動態(tài)創(chuàng)立存儲過程。在窗體上放置Quenr2對象和命 令按鈕GreadeProc其代碼如下:procedure TForml. CreateProcClick(Sender: TObject);beginwith Query2 do BeginDatabaseName:= MSSQL1;active:=False;paramcheck:=False;with SQL do BeginClear;Add( Create Procedure get_maxname, );Add。max_name char(20) output?;Add( As);Add( select m

12、ax_name=max(au_fname);Add。from authors);end;ExecSQL;end;end;代碼中因執(zhí)行的是非查詢語句,所以Paramcheck屬性必須設(shè)置為False, maxnarme為存儲過程的輸出參數(shù),用ExecSQL方法執(zhí)行SQL語句。(3)使用帶參數(shù)的存儲過程如存儲過程返回的結(jié)果為一數(shù)據(jù)集,那么使用方法與Tqueu組件相似,下面 是使用上面新建立的存儲過程。在窗體上放置StoredProcl對象,其屬性 如下:DatabaseName= MSSQL1 StoredProcName= dbo. get_ maxnameParam. Date=在窗體上放置命

13、令按鈕WithReturnProc,其相應代碼如下:procedure TForml. WithReturnProcClick(Sender: TObject);var tempStr:String;beginStoredProc2. Prepare;StoredProc2. ExecProc;tempStr:= StoredProc2. ParamByName( max_name ). AsString;showmessage(The value of StoreProc returned is +tempStr); end;StoredProc組件使用ExecProc方法執(zhí)行存儲過程,使用

14、ParamByName方法 訪問輸出參數(shù)max_name。(4)事務控制 Delphi通過Database組件可進行全面的事務控制。使用Database的 StartTransaction啟動一新事務,用Commit方法提交數(shù)據(jù),用Rollback 方法卷回事務,取消對數(shù)據(jù)庫所做的修改。例如,需把上面編輯過的數(shù)據(jù) 從緩存提交給數(shù)據(jù)庫,可用如下代碼:procedure TForml. QueryApplyClick(Sender: TObject);beginwith Queryl do beginDatabasel. StartTransaction;tryApplyUpdates; 寫入數(shù)據(jù)庫Databasel. Commit

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論