本文闡述了如何應(yīng)用ODBC技術(shù)實現(xiàn)多種數(shù)據(jù)庫系統(tǒng)間數(shù)據(jù)的共享和交換,舊信息系統(tǒng)數(shù)據(jù)的方便利用,單機(jī)系統(tǒng)和網(wǎng)絡(luò)系統(tǒng)數(shù)據(jù)的傳輸?shù)。并以PowerBuilder 開發(fā)工具為例,描述了其實現(xiàn)技術(shù)、方法和實現(xiàn)過程,對管理信息系統(tǒng)的開發(fā)和實施都有較高的實用價值。
1 前言 由于開發(fā)環(huán)境和開發(fā)工具的不斷更新,用戶在實施新的管理系統(tǒng)同時,也毫無例外地面對一個事實,那就是舊系統(tǒng)的升級、新舊系統(tǒng)間數(shù)據(jù)的轉(zhuǎn)換與相互調(diào)用、單機(jī)用戶數(shù)據(jù)上網(wǎng)等。這一功能的好壞直接決定新系統(tǒng)實施的成敗,因為用戶是絕對不愿意將原有系統(tǒng)數(shù)據(jù)拋棄而重新為啟用新系統(tǒng)進(jìn)行大量的初始信息的錄入,從某種意義上講,這一點比系統(tǒng)的先進(jìn)性也許更為重要。 為了實現(xiàn)這一重要功能,我們根據(jù)多年進(jìn)行MIS和MRPII/ERP軟件設(shè)計開發(fā)和實施經(jīng)驗,專門討論如何在先進(jìn)的開發(fā)平臺PowerBuilder 5.0中,應(yīng)用ODBC技術(shù),進(jìn)行諸如FoxPro、Sql Anywhere、Sybase等數(shù)據(jù)庫系統(tǒng)之間數(shù)據(jù)的存儲、轉(zhuǎn)換和調(diào)用,從應(yīng)用系統(tǒng)角度實現(xiàn)多平臺數(shù)據(jù)的管理信息系統(tǒng)和異種數(shù)據(jù)庫環(huán)境管理信息系統(tǒng)的集成,從數(shù)據(jù)庫角度則實現(xiàn)從本地數(shù)據(jù)庫,遠(yuǎn)程數(shù)據(jù)庫乃至數(shù)據(jù)倉庫的全面集成。 2 有關(guān)ODBC ODBC即開放數(shù)據(jù)互連,隨著ODBC技術(shù)的產(chǎn)生,許多開發(fā)平臺如VB、PB都使用了該技術(shù),擁有ODBC接口。ODBC實際上含一系列的驅(qū)動程序,應(yīng)用程序通過調(diào)用ODBC所支持的函數(shù),調(diào)用相應(yīng)的驅(qū)動程序,實現(xiàn)對不同數(shù)據(jù)庫的訪問。 3 在PowerBuilder 5.0中使用ODBC 使用PowerBuilder平臺進(jìn)行管理系統(tǒng)開發(fā),它的可視化程度高,可以大大提高開發(fā)效率,當(dāng)然其中大量涉及的就是庫、表的操作。如果系統(tǒng)設(shè)計采用C/S體系結(jié)構(gòu),數(shù)據(jù)庫位于服務(wù)器端。另一方面,在實際工作中還涉及使用本地數(shù)據(jù)庫SQL anywhere、原管理系統(tǒng)的數(shù)據(jù)庫(如FoxPro等)的數(shù)據(jù)與現(xiàn)有Sybase數(shù)據(jù)庫的聯(lián)接、數(shù)據(jù)交換等實際情況,因此ODBC的使用也顯得極其重要。 3.1 配置ODBC 如果在安裝PowerBuilder 5.0時,采用Customer安裝,此時可選擇ODBC ,即安裝了ODBC驅(qū)動程序,可以在PowerBuilder開發(fā)環(huán)境中,選擇ODBC的Create ODBC采單項,此時在配置界面上輸入以下內(nèi)容: Database Name:DB-LOCAL User Id:DBA Password:sql(缺省) 然后按OK按鈕,系統(tǒng)即建立了一個本地數(shù)據(jù)庫DB-LOCAL,通過Administration 或Sqlanywhere即可在本數(shù)據(jù)庫上建立多個數(shù)據(jù)庫表,如建立一個部門表BBM: drop table bbm; create table bbm( bm integer, //部門編碼 mc varchar(20), //部門名稱 fl varchar(2), //部門分類 … … constrait pr-key-bbm(bm) ); 3.2 本地數(shù)據(jù)庫的聯(lián)接 首先建立初始化文件local.ini,其內(nèi)容為: 。踕atabase] DBMS=ODBC Database=DB-LOCAL ServerName= Logid=DBA Logpassword=sql UserId= Userpass= Dbparm=Connectstring="DSN=DB-LOCAL" 然后在應(yīng)用(Application) 的腳本(Script)中寫入: sqlca.DBMS= ProfileString ("local.ini", "database", "dbms", "") sqlca.database= ProfileString ("local.ini", "database", "database", "") sqlca.userid= ProfileString ("local.ini", "database", "userid", "") sqlca.dbpass = ProfileString ("local.ini", "database", "dbpass", "") sqlca.logid = ProfileString ("local.ini", "database", "logid", "") sqlca.logpass = ProfileString ("local.ini", "database", "LogPassWord", "") sqlca.servername = ProfileString ("local.ini", "database", "servername", "") sqlca.dbparm = ProfileString ("local.ini", "database", "dbparm", "") connect; ... ... 3.3 多個數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)調(diào)用和數(shù)據(jù)交換 在本地數(shù)據(jù)的調(diào)用和轉(zhuǎn)換方法中,PowerBuilder提供了Pipline功能。另外,也可先通過建立一個與原數(shù)據(jù)庫表結(jié)構(gòu)一致的表,用Import直接將指定數(shù)據(jù)文件(*.TXT、*.DBF等)的記錄轉(zhuǎn)入新的數(shù)據(jù)庫表,然后用一系列的SQL語句對新表進(jìn)行處理,以適應(yīng)新系統(tǒng)的需要,這對程序員來說,是很簡單和實用的,特別是在將原有管理系統(tǒng)數(shù)據(jù)倒入即將開始運行的新系統(tǒng)是很有用的。 而對于用戶來說,通過編寫Script和設(shè)計友好的用戶界面也許更切合實際。 程序設(shè)計實現(xiàn)異種數(shù)據(jù)庫直接數(shù)據(jù)交換 例如,有兩個數(shù)據(jù)庫:本地庫DB-LOCAL、遠(yuǎn)程Sybase數(shù)據(jù)庫DB-SYB,DB-LOCAL為3.2節(jié)建立的本地庫,其初始化文件為SYB.INI,按以下步驟可以建立兩庫之間的聯(lián)系: 定義Transaction syb 在application的Script中增加以下內(nèi)容 : Syb=create transaction Syb.DBMS=Profilestring("SYB.INI","database","dbms","") ... connect using Syb; ... 假設(shè)在兩個數(shù)據(jù)庫中均建立了表BBM,在編寫Script時,通過SQL語句對不同Transaction進(jìn)行操作即可實現(xiàn)兩個BBM表間數(shù)的交換。 通過中間文件實現(xiàn)異種數(shù)據(jù)庫數(shù)據(jù)交換 這種方法對獨立運行的信息系統(tǒng)間傳遞數(shù)據(jù)非常實用(如單機(jī)運行的系統(tǒng)和網(wǎng)絡(luò)系統(tǒng)、單機(jī)系統(tǒng)和單機(jī)系統(tǒng)間)在使用PowerBuilder編程時,對使用Datawindow檢索出的數(shù)據(jù),使用下述函數(shù)用文件形式存儲: dwcontrol.SaveAs ( filename, saveastype, colheading) 釋義: dwcontrol:數(shù)據(jù)窗口名 filename :存儲的文件名 saveastype :文件類型,為Text!,HTML!,EXCEL!,dBASEIII!,... colheading:文件中是否包括字段名(TRUR/FALSE) 例如:dw-1.SaveAs("C:\data\bbm.txt", Text!, FALSE) 同樣用另一函數(shù)實現(xiàn)該文件倒入設(shè)計的Datawindow,繼而可存入相應(yīng)數(shù)據(jù)庫表: dwcontrol.ImportFile ( filename {,startrow {,endrow {,startcolumn {,endcolumn {,dwstartcolumn ) 釋義: dwcontrol:數(shù)據(jù)窗口 filename:文件名 startrow:開始行 endrow :結(jié)束行 startcolumn:開始列 endcolumn:結(jié)束列 dwstartcolumn:數(shù)據(jù)窗口接受數(shù)據(jù)的開始列 例如:dw-2.ImportFile("C:\data\bbm.txt") 4 注意的問題 使用ODBC同時操作多種數(shù)據(jù)庫需注意的問題: 注意區(qū)分不同的Transaction; 不同數(shù)據(jù)庫環(huán)境的SQL函數(shù)各不相同,在編寫Script時務(wù)必小心,如Sybase數(shù)據(jù)庫和Sqlanywhere。下面列出了常用的幾個函數(shù)區(qū)別: 數(shù)據(jù)庫SqlanywhereSybase類型轉(zhuǎn)換stringconvert(...)datedatetime日期函數(shù)now(*)getdate()yeardatepart(...)monthday字符串函數(shù)left無trim無ltrim無substrsubstringlengthchar-length空函數(shù)isnull******isnull 由于這些區(qū)別,不僅在新老系統(tǒng)數(shù)據(jù)轉(zhuǎn)換上產(chǎn)生了不便,而且在網(wǎng)絡(luò)系統(tǒng)本地化上產(chǎn)生了問題,所以必需修改相應(yīng)的Script。 5 小結(jié) 目前,眾多的數(shù)據(jù)庫系統(tǒng)、可視化開發(fā)工具都使用或支持ODBC技術(shù),它對于強(qiáng)調(diào)信息高度集成的新型管理信息系統(tǒng)的設(shè)計和實施具有重要的意義。筆者使用改技術(shù)進(jìn)行多個信息系統(tǒng)的設(shè)計,特別在實施過程中收到了事半功倍的效果,為系統(tǒng)快速和成功運行提供了強(qiáng)有力的支持。 |