|
本文阐述了如何应用ODBC技术实现多种数据库系统间数据的共享和交换,旧信息系统数据的方便利用,单机系统和网络系统数据的传输等。并以PowerBuilder 开发工具为例,描述了其实现技术、方法和实现过程,对管理信息系统的开发和实施都有较高的实用价值。
1 前言 由于开发环境和开发工具的不断更新,用户在实施新的管理系统同时,也毫无例外地面对一个事实,那就是旧系统的升级、新旧系统间数据的转换与相互调用、单机用户数据上网等。这一功能的好坏直接决定新系统实施的成败,因为用户是绝对不愿意将原有系统数据抛弃而重新为启用新系统进行大量的初始信息的录入,从某种意义上讲,这一点比系统的先进性也许更为重要。 为了实现这一重要功能,我们根据多年进行MIS和MRPII/ERP软件设计开发和实施经验,专门讨论如何在先进的开发平台PowerBuilder 5.0中,应用ODBC技术,进行诸如FoxPro、Sql Anywhere、Sybase等数据库系统之间数据的存储、转换和调用,从应用系统角度实现多平台数据的管理信息系统和异种数据库环境管理信息系统的集成,从数据库角度则实现从本地数据库,远程数据库乃至数据仓库的全面集成。 2 有关ODBC ODBC即开放数据互连,随着ODBC技术的产生,许多开发平台如VB、PB都使用了该技术,拥有ODBC接口。ODBC实际上含一系列的驱动程序,应用程序通过调用ODBC所支持的函数,调用相应的驱动程序,实现对不同数据库的访问。 3 在PowerBuilder 5.0中使用ODBC 使用PowerBuilder平台进行管理系统开发,它的可视化程度高,可以大大提高开发效率,当然其中大量涉及的就是库、表的操作。如果系统设计采用C/S体系结构,数据库位于服务器端。另一方面,在实际工作中还涉及使用本地数据库SQL anywhere、原管理系统的数据库(如FoxPro等)的数据与现有Sybase数据库的联接、数据交换等实际情况,因此ODBC的使用也显得极其重要。 3.1 配置ODBC 如果在安装PowerBuilder 5.0时,采用Customer安装,此时可选择ODBC ,即安装了ODBC驱动程序,可以在PowerBuilder开发环境中,选择ODBC的Create ODBC采单项,此时在配置界面上输入以下内容: Database Name:DB-LOCAL User Id:DBA Password:sql(缺省) 然后按OK按钮,系统即建立了一个本地数据库DB-LOCAL,通过Administration 或Sqlanywhere即可在本数据库上建立多个数据库表,如建立一个部门表BBM: drop table bbm; create table bbm( bm integer, //部门编码 mc varchar(20), //部门名称 fl varchar(2), //部门分类 … … constrait pr-key-bbm(bm) ); 3.2 本地数据库的联接 首先建立初始化文件local.ini,其内容为: [database] DBMS=ODBC Database=DB-LOCAL ServerName= Logid=DBA Logpassword=sql UserId= Userpass= Dbparm=Connectstring="DSN=DB-LOCAL" 然后在应用(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 多个数据库系统的数据调用和数据交换 在本地数据的调用和转换方法中,PowerBuilder提供了Pipline功能。另外,也可先通过建立一个与原数据库表结构一致的表,用Import直接将指定数据文件(*.TXT、*.DBF等)的记录转入新的数据库表,然后用一系列的SQL语句对新表进行处理,以适应新系统的需要,这对程序员来说,是很简单和实用的,特别是在将原有管理系统数据倒入即将开始运行的新系统是很有用的。 而对于用户来说,通过编写Script和设计友好的用户界面也许更切合实际。 程序设计实现异种数据库直接数据交换 例如,有两个数据库:本地库DB-LOCAL、远程Sybase数据库DB-SYB,DB-LOCAL为3.2节建立的本地库,其初始化文件为SYB.INI,按以下步骤可以建立两库之间的联系: 定义Transaction syb 在application的Script中增加以下内容 : Syb=create transaction Syb.DBMS=Profilestring("SYB.INI","database","dbms","") ... connect using Syb; ... 假设在两个数据库中均建立了表BBM,在编写Script时,通过SQL语句对不同Transaction进行操作即可实现两个BBM表间数的交换。 通过中间文件实现异种数据库数据交换 这种方法对独立运行的信息系统间传递数据非常实用(如单机运行的系统和网络系统、单机系统和单机系统间)在使用PowerBuilder编程时,对使用Datawindow检索出的数据,使用下述函数用文件形式存储: dwcontrol.SaveAs ( filename, saveastype, colheading) 释义: dwcontrol:数据窗口名 filename :存储的文件名 saveastype :文件类型,为Text!,HTML!,EXCEL!,dBASEIII!,... colheading:文件中是否包括字段名(TRUR/FALSE) 例如:dw-1.SaveAs("C:\data\bbm.txt", Text!, FALSE) 同样用另一函数实现该文件倒入设计的Datawindow,继而可存入相应数据库表: dwcontrol.ImportFile ( filename {,startrow {,endrow {,startcolumn {,endcolumn {,dwstartcolumn ) 释义: dwcontrol:数据窗口 filename:文件名 startrow:开始行 endrow :结束行 startcolumn:开始列 endcolumn:结束列 dwstartcolumn:数据窗口接受数据的开始列 例如:dw-2.ImportFile("C:\data\bbm.txt") 4 注意的问题 使用ODBC同时操作多种数据库需注意的问题: 注意区分不同的Transaction; 不同数据库环境的SQL函数各不相同,在编写Script时务必小心,如Sybase数据库和Sqlanywhere。下面列出了常用的几个函数区别: 数据库SqlanywhereSybase类型转换stringconvert(...)datedatetime日期函数now(*)getdate()yeardatepart(...)monthday字符串函数left无trim无ltrim无substrsubstringlengthchar-length空函数isnull******isnull 由于这些区别,不仅在新老系统数据转换上产生了不便,而且在网络系统本地化上产生了问题,所以必需修改相应的Script。 5 小结 目前,众多的数据库系统、可视化开发工具都使用或支持ODBC技术,它对于强调信息高度集成的新型管理信息系统的设计和实施具有重要的意义。笔者使用改技术进行多个信息系统的设计,特别在实施过程中收到了事半功倍的效果,为系统快速和成功运行提供了强有力的支持。 |