用XBase開發(fā)的程序,在系統(tǒng)老化之后,不應盲目*重來,而是要利用新技術(shù)把原有資源轉(zhuǎn)化,以適應現(xiàn)在的需求。XBase型數(shù)據(jù)庫比較適合轉(zhuǎn)化成網(wǎng)絡數(shù)據(jù)庫。做網(wǎng)絡數(shù)據(jù)庫要有前臺的應用程序和后臺的網(wǎng)絡數(shù)據(jù)庫。前臺程序的開發(fā)平臺可以用Delphi,Visual FoxPro和PowerBuilder。后臺的網(wǎng)絡數(shù)據(jù)庫可以是Novell 的Sybase,WindowsNT 的SQL Server, UNIX的Informix,以及DB/2 for NT等等。
Client/Server模式的突出優(yōu)點是數(shù)據(jù)集中化,跨系統(tǒng)信息共享,便于數(shù)據(jù)管理和維護,但對客戶端維護困難的問題,我們在后面提出一個解決方法??蛻舳伺c主服務器通過網(wǎng)絡以TCP/IP協(xié)議連接??蛻舳丝梢圆l(fā)的存取主服務器上的數(shù)據(jù)。系統(tǒng)管理員可以在主服務器上監(jiān)視客戶的上線情況及數(shù)據(jù)庫的使用情況,做到實時監(jiān)控。Delphi是Borland(已經(jīng)更名Inprise)的產(chǎn)品,控件多,比較適合數(shù)據(jù)庫開發(fā)。下面用Delphi 3.0 C/S for Win95做前臺應用程序,后臺采用Windows NT的SQL SERVER 6.5(以下簡稱SQL服務器)做服務器來說明一個程序的開發(fā)過程及注意事項。
一、基本編程原理和步驟
基本原理如圖所示
1?開發(fā)環(huán)境
我們在開發(fā)Client/Server應用程序時需要兩臺機器(服務器,一個客戶機),但Delphi可以做到單機開發(fā)。Delphi的可伸縮性很強,把應用程序由單層過渡到兩層,只要簡單地把連接的數(shù)據(jù)集由本機的數(shù)據(jù)庫重新指向SQL服務器即可。像PowerBuild 一樣,Delphi也有本地庫,這就是InterBase Server,它提供了一個單用戶多實例的SQL服務器平臺,可以做測試平臺。我們在將數(shù)據(jù)庫應用程序轉(zhuǎn)移到對Sybase等遠程數(shù)據(jù)庫的訪問之前,可以在Local InterBase Server平臺建立和測試數(shù)據(jù)庫應用程序。這樣可暫時不考慮網(wǎng)絡連接,專心致力于解決業(yè)務邏輯。當業(yè)務邏輯實現(xiàn)后,只要把Database 控件中的Aliasname 改成新的數(shù)據(jù)源即可將程序擴大到網(wǎng)絡環(huán)境。大大提高了開發(fā)軟件的效率,并且降低了開發(fā)難度。
2?后臺建立數(shù)據(jù)庫并創(chuàng)建連接
數(shù)據(jù)庫建立包括安裝系統(tǒng),建庫建表,對數(shù)據(jù)庫寫觸發(fā)子和存儲過程。
安裝時要注意的是要把SQL Server的客戶數(shù)留到50 以上。否則服務器會在用戶多了以后死鎖。
SQL Server是圖形化的管理,庫表的建立非常容易 。我們不提倡直接建立數(shù)據(jù)庫、表格,輸入數(shù)據(jù)。我們采取的方法是利用已有DBF數(shù)據(jù)庫,在Delphi的Database Desktop把DBF轉(zhuǎn)換成SQL Server中的表格。這樣XBase開發(fā)的程序的資源就不會浪費了。對新表,用FoxBase建表格,輸入數(shù)據(jù)后再轉(zhuǎn)換。具體方法是:先用ODBC建立與SQL Server連接的數(shù)據(jù)源,用Database Desktop的菜單項TOOLS->UTILITIES->COPY的功能。其實這個工具可以進行異種數(shù)據(jù)庫轉(zhuǎn)換,在本身具有ODBC驅(qū)動程序或Delphi的SQL LINK支持的數(shù)據(jù)庫之間任意進行轉(zhuǎn)換。
3.前臺程序的基本編程
Delphi與后臺數(shù)據(jù)庫的連接可有兩種途徑,一是ODBC,這是標準,兼容性很好。二是Delphi帶的SQL Link,它由Delphi自己開發(fā),速度稍快,但我們在應用中發(fā)現(xiàn)SQL Link對有些數(shù)據(jù)庫系統(tǒng)的支持并不是很穩(wěn)定,如連Informix時,退出時就很容易死機。所以常以O(shè)DBC連接數(shù)據(jù)庫。在控制面板的ODBC中需要設(shè)置數(shù)據(jù)源名稱,服務器名稱(如果不設(shè)置登錄的數(shù)據(jù)庫名稱,就將登錄到后臺數(shù)據(jù)庫給你這個用戶的默認數(shù)據(jù)庫)。
Delphi是快速開發(fā)工具(RAD)中最容易上手的。編程一般經(jīng)過三個步驟:
(1)注冊O(shè)DBC數(shù)據(jù)源;
(2)配置BDE;
(3)往FROM 上放置Query/Table,DataSource, DBgrid控件,分別設(shè)置控件屬性以實現(xiàn)與數(shù)據(jù)庫的連接操作。具體說明如下:
Delphi 涉及數(shù)據(jù)庫編程的控件有兩類:
數(shù)據(jù)顯示控件:用來顯示數(shù)據(jù)庫內(nèi)的數(shù)據(jù)。DBGrid用于全屏顯示和編輯數(shù)據(jù)庫表中的記錄。數(shù)據(jù)連接控件:負責掌管數(shù)據(jù)庫的連接。
Database控件是為開發(fā)兩層數(shù)據(jù)庫應用程序時,設(shè)置登錄數(shù)據(jù)庫的有關(guān)參數(shù)。
Query 控件是用來傳遞SQL語句到服務器上得到一個數(shù)據(jù)集或執(zhí)行一個動作。
Datasource控件是連接數(shù)據(jù)顯示控件和數(shù)據(jù)連接控件的橋梁。
Query控件執(zhí)行靜態(tài)SQL語句的寫法是:
Query1.SQL.Clear;
Query1.SQL.Add(‘SELECT * FROM databasename ’);
Query1.SQL.Open,
值得一提的是Delphi中還有種動態(tài)SQL,可以嵌入變量參數(shù),給編程帶來極大方便。
Query1.SQL.Clear;
Query1.SQL.Add('SELECT ks FROM ks WHERE py like :py');
Query1.ParamByName(‘py').AsString:= Edit1.text+‘%'
Query1.Open;
Query控件的執(zhí)行方法有兩種:Open,ExecSQL。Open方式可以打開所聯(lián)系的數(shù)據(jù)表格, 得到一個數(shù)據(jù)集。ExecSQL方式則只是運行SQL語句,并不將運行后的表格送往相連的數(shù)據(jù)顯示控件,所以執(zhí)行像Update dataname Set ....,Delete ...FROM .. 的動作,就要用ExecSQL。
當應用程序第一次訪問SQL數(shù)據(jù)庫,會觸發(fā)一個自動連接過程。連接過程需要確認訪問數(shù)據(jù)庫的權(quán)限。如果你要在程序中接受口令,則必須把Database控件的LoginPrompt 屬性設(shè)為False。
Database1.Params.Add(‘user name='+myusername ); // myusername變量名
Database1.Params.Append(‘password='+mypassword);
Database1.Connected:=true;
關(guān)于日期的處理,要不存在2000年問題,只要在Form.OnCreate事件中加上ShortDateFormat:=‘mm/dd/dddd/yyyy';mm :有前導0的月份。dd:有前導0的日期,dddd: 表示這一天是星期幾,yyyy:四位年份。此外,在Delphi 中的BDE Aministrator 中的Configuration->System->Formats 中有資料介紹,此方法的可行性尚未得到證實。
Client/Server模式的突出優(yōu)點是數(shù)據(jù)集中化,跨系統(tǒng)信息共享,便于數(shù)據(jù)管理和維護,但對客戶端維護困難的問題,我們在后面提出一個解決方法??蛻舳伺c主服務器通過網(wǎng)絡以TCP/IP協(xié)議連接??蛻舳丝梢圆l(fā)的存取主服務器上的數(shù)據(jù)。系統(tǒng)管理員可以在主服務器上監(jiān)視客戶的上線情況及數(shù)據(jù)庫的使用情況,做到實時監(jiān)控。Delphi是Borland(已經(jīng)更名Inprise)的產(chǎn)品,控件多,比較適合數(shù)據(jù)庫開發(fā)。下面用Delphi 3.0 C/S for Win95做前臺應用程序,后臺采用Windows NT的SQL SERVER 6.5(以下簡稱SQL服務器)做服務器來說明一個程序的開發(fā)過程及注意事項。
一、基本編程原理和步驟
基本原理如圖所示
1?開發(fā)環(huán)境
我們在開發(fā)Client/Server應用程序時需要兩臺機器(服務器,一個客戶機),但Delphi可以做到單機開發(fā)。Delphi的可伸縮性很強,把應用程序由單層過渡到兩層,只要簡單地把連接的數(shù)據(jù)集由本機的數(shù)據(jù)庫重新指向SQL服務器即可。像PowerBuild 一樣,Delphi也有本地庫,這就是InterBase Server,它提供了一個單用戶多實例的SQL服務器平臺,可以做測試平臺。我們在將數(shù)據(jù)庫應用程序轉(zhuǎn)移到對Sybase等遠程數(shù)據(jù)庫的訪問之前,可以在Local InterBase Server平臺建立和測試數(shù)據(jù)庫應用程序。這樣可暫時不考慮網(wǎng)絡連接,專心致力于解決業(yè)務邏輯。當業(yè)務邏輯實現(xiàn)后,只要把Database 控件中的Aliasname 改成新的數(shù)據(jù)源即可將程序擴大到網(wǎng)絡環(huán)境。大大提高了開發(fā)軟件的效率,并且降低了開發(fā)難度。
2?后臺建立數(shù)據(jù)庫并創(chuàng)建連接
數(shù)據(jù)庫建立包括安裝系統(tǒng),建庫建表,對數(shù)據(jù)庫寫觸發(fā)子和存儲過程。
安裝時要注意的是要把SQL Server的客戶數(shù)留到50 以上。否則服務器會在用戶多了以后死鎖。
SQL Server是圖形化的管理,庫表的建立非常容易 。我們不提倡直接建立數(shù)據(jù)庫、表格,輸入數(shù)據(jù)。我們采取的方法是利用已有DBF數(shù)據(jù)庫,在Delphi的Database Desktop把DBF轉(zhuǎn)換成SQL Server中的表格。這樣XBase開發(fā)的程序的資源就不會浪費了。對新表,用FoxBase建表格,輸入數(shù)據(jù)后再轉(zhuǎn)換。具體方法是:先用ODBC建立與SQL Server連接的數(shù)據(jù)源,用Database Desktop的菜單項TOOLS->UTILITIES->COPY的功能。其實這個工具可以進行異種數(shù)據(jù)庫轉(zhuǎn)換,在本身具有ODBC驅(qū)動程序或Delphi的SQL LINK支持的數(shù)據(jù)庫之間任意進行轉(zhuǎn)換。
3.前臺程序的基本編程
Delphi與后臺數(shù)據(jù)庫的連接可有兩種途徑,一是ODBC,這是標準,兼容性很好。二是Delphi帶的SQL Link,它由Delphi自己開發(fā),速度稍快,但我們在應用中發(fā)現(xiàn)SQL Link對有些數(shù)據(jù)庫系統(tǒng)的支持并不是很穩(wěn)定,如連Informix時,退出時就很容易死機。所以常以O(shè)DBC連接數(shù)據(jù)庫。在控制面板的ODBC中需要設(shè)置數(shù)據(jù)源名稱,服務器名稱(如果不設(shè)置登錄的數(shù)據(jù)庫名稱,就將登錄到后臺數(shù)據(jù)庫給你這個用戶的默認數(shù)據(jù)庫)。
Delphi是快速開發(fā)工具(RAD)中最容易上手的。編程一般經(jīng)過三個步驟:
(1)注冊O(shè)DBC數(shù)據(jù)源;
(2)配置BDE;
(3)往FROM 上放置Query/Table,DataSource, DBgrid控件,分別設(shè)置控件屬性以實現(xiàn)與數(shù)據(jù)庫的連接操作。具體說明如下:
Delphi 涉及數(shù)據(jù)庫編程的控件有兩類:
數(shù)據(jù)顯示控件:用來顯示數(shù)據(jù)庫內(nèi)的數(shù)據(jù)。DBGrid用于全屏顯示和編輯數(shù)據(jù)庫表中的記錄。數(shù)據(jù)連接控件:負責掌管數(shù)據(jù)庫的連接。
Database控件是為開發(fā)兩層數(shù)據(jù)庫應用程序時,設(shè)置登錄數(shù)據(jù)庫的有關(guān)參數(shù)。
Query 控件是用來傳遞SQL語句到服務器上得到一個數(shù)據(jù)集或執(zhí)行一個動作。
Datasource控件是連接數(shù)據(jù)顯示控件和數(shù)據(jù)連接控件的橋梁。
Query控件執(zhí)行靜態(tài)SQL語句的寫法是:
Query1.SQL.Clear;
Query1.SQL.Add(‘SELECT * FROM databasename ’);
Query1.SQL.Open,
值得一提的是Delphi中還有種動態(tài)SQL,可以嵌入變量參數(shù),給編程帶來極大方便。
Query1.SQL.Clear;
Query1.SQL.Add('SELECT ks FROM ks WHERE py like :py');
Query1.ParamByName(‘py').AsString:= Edit1.text+‘%'
Query1.Open;
Query控件的執(zhí)行方法有兩種:Open,ExecSQL。Open方式可以打開所聯(lián)系的數(shù)據(jù)表格, 得到一個數(shù)據(jù)集。ExecSQL方式則只是運行SQL語句,并不將運行后的表格送往相連的數(shù)據(jù)顯示控件,所以執(zhí)行像Update dataname Set ....,Delete ...FROM .. 的動作,就要用ExecSQL。
當應用程序第一次訪問SQL數(shù)據(jù)庫,會觸發(fā)一個自動連接過程。連接過程需要確認訪問數(shù)據(jù)庫的權(quán)限。如果你要在程序中接受口令,則必須把Database控件的LoginPrompt 屬性設(shè)為False。
Database1.Params.Add(‘user name='+myusername ); // myusername變量名
Database1.Params.Append(‘password='+mypassword);
Database1.Connected:=true;
關(guān)于日期的處理,要不存在2000年問題,只要在Form.OnCreate事件中加上ShortDateFormat:=‘mm/dd/dddd/yyyy';mm :有前導0的月份。dd:有前導0的日期,dddd: 表示這一天是星期幾,yyyy:四位年份。此外,在Delphi 中的BDE Aministrator 中的Configuration->System->Formats 中有資料介紹,此方法的可行性尚未得到證實。