TechTarget中国网站推荐

PB/Sybase开发过程中数据库转移介绍(二)

2008-10-13  选择字号:  | |
打印本文章

  4、分析本地库系统实现转移

  在进行数据转换的过程中,由于各种数据的表的结构都是不一样的,以电信计费的信息费为例,不同的地区信息台使用的软件不同,数据字段几乎都是不一样的,实际的处理中也不是每一个字段的数据都有意义,或者都需要转换到服务器的数据库中,用户往往要求根据自己的需要来选择字段、计算方式以及每列的约束条件(如有些项目有最大值的限制等),利用以上的方法来处理就有些困难。在实际的处理中,我们考虑分析本地数据库的系统表,来得到本地数据库的结构,将数据库中的各个字段呈现在用户的面前。用户作出选择后,加入一定的条件,再进行处理,将利用动态SQL语句生成一个满足条件的表。这样就要求用户能够通过系统来了解磁盘数据库的内容,分析本地库的系统表后将得到较为满意的结果。

  在利用ODBC连接到本地库后,发现并分析了几个系统表(System table),其中有一个表是PBcatcol中记录着用户数据库的结构,其中的一部分如表1所示(如果表为ADDRESS (ID, Name, Address, Phone))。

  PB/Sybase开发过程中数据库转移介绍(表一)

  表 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。

 PB/Sybase开发过程中数据库转移介绍(表二)

  表 2

  于是用PowerBuilder提供的文件处理函数FileOpen(),FileSeek(),FileRead(),FileClose()等,可以分析Foxbase数据库文件,得到本地数据库的字段和数据类型。对各种字段的长度可以让用户来设定,或者系统按照最大和系统的要求来设定。在服务器的数据库上来产生相应的表,利用动态的数据窗口(Datawindow)可以显示本地库的数据和处理的结果。

  7、结束语

  对于完成数据的转移有很多种的方法。在实际的处理过程中,要根据用户的需求和系统的设计等各个方面来考虑。其目的是要设计过程简单,而且要满足用户的需要,要求有较高的适应性和灵活性,以减少后期的维护工作。本文上述的6种方法均在系统的设计过程中得以实现,取得了较好的效果。


PB/Sybase开发过程中数据库转移介绍
 PB/Sybase开发过程中数据库转移介绍(一)
 PB/Sybase开发过程中数据库转移介绍(二)

原文出处:http://tech.ccidnet.com/art/5889/20080925/1579329_2.html
作者:梦幽树|小鱼    
相关的专家答疑
Sybase数据库SQL语句REPLACE的对应函数有哪些?本文主要介绍了Oracle和Sybase函数。
专注于信息管理和信息移动技术的企业级软件公司Sybase于2008年11月4日在大中华区用户大会上宣布,SQL Anywhere 11中文版本近期已正式上市。
2008年11月4日至5日,2008 Sybase大中华区用户大会在北京万达索菲特大饭店召开。大会主要分为4日上午的高峰论坛、4日下午及5日全天三个并行的技术论坛。
Sybase近日公布了截止到9月30日的2008年第三季度财报。2008年第三季度总收入同比增长11%,从2007年第三季度的2.553亿美元上升到2.84亿美元……
目前,基于SYBASE产品的专业认证考试分为Associate和Professional两个级别。如何参加Sybase认证考试?如何准备Sybase认证考试?本文作者详细介绍了……
本篇文章主要介绍SQL Server数据存储的物理对象和原理,包括SQL Server 2005和2008里的物理数据存储、SQL Server 2008数据类型(即Datetime、字符串、自定义及等)、在SQL Server数据库中加强数据的完整性……
本文为SQL Server 2008初学者指南,主要介绍SQL Server2008 T-SQL支持的基本元素和基本操作。
本篇技术专题主要内容包括SQL Server整合、SQL Server数据库设计灾难、SQL Server数据库查询设计以及SQL Server数据库同步、复制、报告显示。
最新更新
专家答疑
技巧
Brian Peasland
我在使用这个工具的时候就出现了以上的错误。由于出现了这个错误,我就没有顺利地完成备份。你能告诉我是什么原因吗?
Rudy Limeback
我想把这些日期按照月份聚集在一起,这样我们就能查看每个售货员每个月的销售量了。我怎么才能将这些月份的日期聚集在一起呢?
Maria Anderson
我得到了一个错误信息,如“DIM-00019:创建服务错误。”我用你寄给我的解决方案解决这一问题,即:“手动创建和启动服务。”你能告诉我如何手动安装该服务吗?