4、分析本地库系统实现转移
在进行数据转换的过程中,由于各种数据的表的结构都是不一样的,以电信计费的信息费为例,不同的地区信息台使用的软件不同,数据字段几乎都是不一样的,实际的处理中也不是每一个字段的数据都有意义,或者都需要转换到服务器的数据库中,用户往往要求根据自己的需要来选择字段、计算方式以及每列的约束条件(如有些项目有最大值的限制等),利用以上的方法来处理就有些困难。在实际的处理中,我们考虑分析本地数据库的系统表,来得到本地数据库的结构,将数据库中的各个字段呈现在用户的面前。用户作出选择后,加入一定的条件,再进行处理,将利用动态SQL语句生成一个满足条件的表。这样就要求用户能够通过系统来了解磁盘数据库的内容,分析本地库的系统表后将得到较为满意的结果。
在利用ODBC连接到本地库后,发现并分析了几个系统表(System table),其中有一个表是PBcatcol中记录着用户数据库的结构,其中的一部分如表1所示(如果表为ADDRESS (ID, Name, Address, Phone))。
表 1
其中:pbc_tnam记录的是用户数据库的表名(Table name) (在Foxbase中一个表就是一个数据库),pbc_cnam记录的是用户数据库的列名(Column name)。
根据用户输入的文件名称,取消后缀即可得到数据库的表名,定义一个光标即可取得用户数据库的列名,将数据库展示在用户的面前,用户根据需要选择后再作处理。
DECLARE My_Cursor CURSOR FOR select pbcatcol.pbc_cnam FROM pbcatcol …… |
利用分析系统表来得到用户数据库的结构是一个比较有效的方法,它能够对未知的数据库结构有一个清晰的认识,而不需要事先知道它的结构。但是它仍然有一个问题,就是通过分析系统表不能得到用户数据库的列的数据类型,在转换到服务器的数据库的时候要借助用户的输入才能够确定,即提供用户必须选择的项目来确定某一个字段的数据类型。能够比较好地完成数据的转换,具有相当大的灵活性,程序并不要关心用户数据库的类型,可以广泛地使用于各种类型的数据库(Foxbase,Access等)。
5、分析服务器系统实现转移
要确定一个数据库的结构,只要确定用户数据库的字段名和数据类型就可以了。利用分析本地库系统表的方式可以得到数据库的字段名,但是用户数据库的字段的数据类型仍然无法获得。通过分析Sybase服务器数据库的系统表可以得到服务器数据库中的表的字段名和数据类型。在设计的时候考虑采取两种方法相结合的办法,先利用(数据管道)Pipeline将用户本地的数据库完整地转换到服务器的数据库中的一个表,然后通过分析服务器上的系统表:Pbcatcol,Syscolumns,Systypes。其中Pbcatcol表中同前面一样记录着用户表的表名和字段名等,Syscolumns中记录着数据库中所有表的字段名(Name)、字段的数据类型(Type)、字段的长度(Length)和精确度(Prec,Scale)等。将三个表关联后可从中取得从磁盘上转换到服务器上的表的完整的结构(可以通过定义光标或者直接利用数据窗口的方式完成具体的设计)。
select syscolumns.name, systypes.name FROM pbcatcol, syscolumns, systypes, length where (syscolumns.type=systypes.type) and (pbcatcol.pbc_cnam=syscolumns.name) and ((pbcatcol.pbc_tnam= ’Address’)); |
6、分析数据库文件实现转移
利用数据管道和分析服务器系统表相结合的方法能够比较完整的解决数据的转换问题,但仍然要将本地的数据库完整的转换到服务器上,增加了服务器的负担,占据了一定的存储空间。设计中我们试用了另一种方法,通过分析本地数据库本身的结构,希望有所收获。利用Visual C++以二进制的方式将数据库文件打开(此种方法只对Foxbase文件进行了分析)发现如图1所示的结构,文件存储的方式是表头和数据两个部分,表头以十六进制的0D结尾。其表头的规律是:第一个32个字节是文件头;从第二个32个字节后是第一个字段名和数据类型;第三个32字节开始又是第二个字段名和数据类型。以此类推,直到0D结束,其结构如表2所示。不足的部分添十六进制的00,其中数据类型是简写:
C-char,D-Date,L-Logical,N-Numeric,M-Memo,G-Genera1。 |
表 2
于是用PowerBuilder提供的文件处理函数FileOpen(),FileSeek(),FileRead(),FileClose()等,可以分析Foxbase数据库文件,得到本地数据库的字段和数据类型。对各种字段的长度可以让用户来设定,或者系统按照最大和系统的要求来设定。在服务器的数据库上来产生相应的表,利用动态的数据窗口(Datawindow)可以显示本地库的数据和处理的结果。
7、结束语
对于完成数据的转移有很多种的方法。在实际的处理过程中,要根据用户的需求和系统的设计等各个方面来考虑。其目的是要设计过程简单,而且要满足用户的需要,要求有较高的适应性和灵活性,以减少后期的维护工作。本文上述的6种方法均在系统的设计过程中得以实现,取得了较好的效果。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
Linux下更改/转移MySQL数据库目录
由于MySQL的数据库太大,默认安装的/var盘已经再也无法容纳新增加的数据,只能想办法转移数据的目录。
-
PB/Sybase开发过程中数据库转移介绍(一)
在大型的MIS系统中大多是采用客户机/服务器(C/S)的网络体系结构,在该系统中数据集中存储在服务器的数据库中。开发新的MIS系统的时候,数据的采集和录入是一个重要的部分。以电信计费系统为例主要有以下几个方面:
-
PB/Sybase开发过程中数据库转移介绍(二)
本文是关于PB/Sybase开发过程中数据库转移方法的介绍,本文主要是分析本地库系统实现转移、分析服务器系统实现转移以及分析数据库文件实现转移。
-
有关PB/Sybase开发过程中数据库转移介绍(一)
针对在大型MIS系统中经常遇到将一种数据库的原始数据转移到服务器数据库进行的处理问题,将本地磁盘上的Foxbase数据库数据转移到Sybase 11数据库服务器为例,提出了……