强烈建议各类事务所用户,在使用【 新纪元通用账证查询打印软件 】时,在客户的电脑上,直接连接数据库,采集数据。新纪元通用账证查询打印软件 既可以在数据库服务器上采集数据,也可以在任何一台能够访问数据库服务器的客户端上采集数据,如果数据库服务器能够外网访问,也可以异地采集数据。
发现好多事务所用户有个误解,以为 新纪元通用账证查询打印软件 必须在数据库服务器上运行。对有专门网管的大型单位 来说,可能网管不允许事务所人员动他的服务器。也许网管会做一个财务软件的数据备份,交给事务所,让事务所在自己机器上采集数据。这种情况下,事务所的电脑必须安装有MS SQL SERVER数据库。以下以用友U8的备份为例,解析如何将数据备份恢复到本机MS SQL SERVER数据库的管理之下,然后采集本机的用友数据。 用友U8在备份的时候,一般会产生两个文件:UFDATA.BA_和UfErpYer.Lst.其中UfErpYer.Lst比较小,不到1K,而UFDATA.BA_通常比较大。由此,我们判断,财务数据应该在UFDATA.BA_中。
我们用UltraEdit软件打开UfErpYer.Lst文件,发现它其实就是一个文本文件,保存着备份相关的一些信息,如软件版本、备份日期、帐套年度、文件路径等。而打开UFDATA.BA_文件时,我们发现是一堆乱码,甚至找不到常见的一些文件头的信息。因此我们初步判断它有可能是压缩过的文件。而且,从常理讲,考虑到磁盘空间的问题,数据文件备份的时候通常也会压缩处理。
尝试用WinRar打开UFDATA.BA_,成功。解压后,得到一个文件:UFDATA.文件没有后缀名,因此我们还是先用UltraEdit打开。在文件头部,我们看到有“TAPE”、“Microsoft SQL Server”等字样,因此我们初步判断它跟SQL Server有关。
根据以上思路,我们反过来比较,查看SQL Server数据库的各种文件的头部,看是否有与UFDATA 文件头相似的文件。SQL Server数据库中,与数据相关的文件,我们平时接触比较多的主要有数据文件和备份设备文件。新建一个空的数据库,用UltraEdit查看它的数据文件的头部,未发现相关字样,而创建一个备份设备后,查看该文件的头部,正好跟UFDATA文件的头部是一样的。因此我们初步判定UFDATA文件为SQL Server数据库的备份设备文件。并且,我们知道TAPE是磁带的意思,而SQL Server中跟磁带相关的通常与数据库的备份有关系。
对一个本地的数据库,我们就可以根据自己的需要,进行相关的查询和操作了。到此为止,我们其实已经完成了将一个用友U8.51的备份文件转换成我们可操作数据库的过程。但如果仅仅如此,那么本文其实是没有什么意义的,因为这个步骤我们可以很容易地利用AO软件来实现。
文件解压;利用Win32的API:ShellExecuteEx,调用WinRar将压缩文件解压到指定的临时文件夹下,并得到解压程序的句柄(前提是已经安装了WinRar软件)。其中要用到SHELLEXECUTEINFO这个结构,用来指定WinRar 的路径以及相应的解压参数。具体可以查阅Win32 API帮助。
还原数据库;利用SQL Server 2000的命令Restore DATABASE,从设备中的备份还原数据库。另外,查看备份文设备中的备份数据库信息可以使用命令:RESTORE HEADERONLY.
删除备份设备;可以使用存储过程:sp_dropdevice.详细信息可以查阅SQL Server 2000的帮助文档。
定义SHELLEXECUTEINFO类型的变量:SI
指定SI的相关参数:动作为“Open”、文件为WinRar的执行文件(指定长文件名)
对每个备份文件UFDATA.BA_,循环处理(循环1)
得到文件路径和文件名,以及某些帐套信息(公司、年份等等)
指定SI的参数为:x sFile *.* sTemp
调用:ShellExecuteEx SI
获取SI的状态直到它执行完毕
在数据库服务器上执行:sp_addumpdevice disk,U8Back,physical_name
(注:U8Back为我们为设备取的名,physical_name为解压后得到的UFDATA文件的长文件名)
执行:RESTORE HEADERONLY From U8Back,得到设备中的备份列表记录集
(注:一条记录对应于一个备份)
对备份列表记录集的每条记录,循环处理(循环2)
根据列表记录集中的内容,得到数据库的某些信息(如帐套年份)
Restore DATABASE UF8 From U8Back with File=file_number,Move Ufmodel
To DataFile,MOVE Ufmodel_LOG TO LogFile, replace