用友U8备份文件指导入的流程技巧分析
2015-12-28 0:0:0 用友T1小编用友U8备份文件指导入的流程技巧分析
用友U8备份文件指导入的流程技巧分析用友U8备份文件指导入的流程技巧分析
用友天龙瑞德针对用友8.51的一个备份文件作一点分析,对其中各关键步骤给出一个程序处理的办法,最后给出一个解决用友8.51备份文件批量导入的流程。一点粗浅想法,抛砖引玉,同时也希望能给大家一点启示。
一、分析过程。
1.8.51在备份的时候,一般会产生两个文件:UFDATA.BA_和UfErpYer.Lst.其中UfErpYer.Lst比较小,不到1K,而UFDATA.BA_通常比较大。由此,我们判断,财务数据应该在UFDATA.BA_中。
2.我们打开UfErpYer.Lst文件,发现它其实就是一个文本文件,保存着备份相关的一些信息,如软件版本、备份日期、账套年度、文件路径等。而打开UFDATA.BA_文件时,我们发现是一堆乱码,甚至找不到常见的一些文件头的信息。因此我们初步判断它有可能是压缩过的文件。而且,从常理讲,考虑到磁盘空间的问题,数据文件备份的时候通常也会压缩处理。
3.尝试用WinRar打开UFDATA.BA_,成功。解压后,得到一个文件:UFDATA.文件没有后缀名,因此我们还是先用UltraEdit打开。在文件头部,我们看到有 TAPE 、 Microsoft SQL Server 等字样,因此我们初步判断它跟SQL Server有关。
4.根据以上思路,我们反过来比较,查看SQL Server数据库的各种文件的头部,看是否有与UFDATA 文件头相似的文件。SQL Server数据库中,与数据相关的文件,我们平时接触比较多的主要有数据文件和备份设备文件。新建一个空的数据库,用UltraEdit查看它的数据文件的头部,未发现相关字样,而创建一个备份设备后,查看该文件的头部,正好跟UFDATA文件的头部是一样的。因此我们初步判定UFDATA文件为SQL Server数据库的备份设备文件。并且,我们知道TAPE是磁带的意思,而SQL Server中跟磁带相关的通常与数据库的备份有关系。
5.接下来我们就分析UFDATA文件中的内容。打开SQL Server的企业管理器,新建一个备份设备,并将文件名指定我我们解压后得到的UFDATA文件。确定后,查看新建立备份设备的内容,发现它其实是一个(或多个)数据库的完全备份。将它还原后,我们可以看到,这是用友的一个账套数据库。
在实际工作中,我们遇到的往往不是单个的账套。由于很多企业有很多独立核算的分公司,并且每个公司每年都要建一套账,因此,我们面对的往往是十几个、几十个账套,有时甚至会面对上百个账套,而AO中又没有提供批量导入的办法,如果一个一个导入的话效率太低。基于这种情况,本文就利用上述分析的结果,给出一个解决的办法,能让我们批量导入用友的备份数据.
二、解决办法.
要实现批量导入,必须编写程序,实现上述分析过程中的解压、添加备份设备、还原数据库、抽取数据等步骤。我们首先对每一个关键步骤给出相应的解决办法,最后再给出一个总体的流程。
1.文件解压:利用Win32的API:ShellExecuteEx,调用WinRar将压缩文件解压到指定的临时文件夹下,并得到解压程序的句柄(前提是已经安装了WinRar软件)。其中要用到SHELLEXECUTEINFO这个结构,用来指定WinRar的路径以及相应的解压参数。具体可以查阅Win32 API帮助。
2.添加设备:利用SQL Server 2000的存储过程sp_addumpdevice添加设备文件。
3.还原数据库:利用SQL Server 2000的命令Restore DATABASE,从设备中的备份还原数据库。另外,查看备份文设备中的备份数据库信息可以使用命令:RESTORE HEADERONLY.
4.删除备份设备:可以使用存储过程:sp_dropdevice.详细信息可以查阅SQL Server 2000的帮助文档。
三、就给出批量导入用友8.51备份文件的主要流程:
1.定义SHELLEXECUTEINFO类型的变量:SI.指定SI的相关参数:
2.动作为 Open 、文件为WinRar的执行文件(指定长文件名)。
3.对每个备份文件UFDATA.BA_,循环处理(循环1)。
4.得到文件路径和文件名,以及某些账套信息(公司、年份等等)。
5.指定SI的参数为:x sFile *.* sTemp (注:sFile为备份文件的长文件名,sTemp为一个临时文件夹)
6.调用:ShellExecuteEx SI 获取SI的状态直到它执行完毕。
7.在数据库服务器上执行:sp_addumpdevice disk,U8Back,physical_name (注:Back为我们为设备取的名,physical_name为解压后得到的UFDATA文件的长文件名)
8.执行:RESTORE HEADERONLY From U8Back,得到设备中的备份列表记录集 (注:一条记录对应于一个备份) 对备份列表记录集的每条记录,循环处理(循环2)
9.根据列表记录集中的内容,得到数据库的某些信息(如账套年份) Restore DATABASE UF8 From U8Back with File=file_number,Move Ufmodel To DataFile,MOVE 10.Ufmodel_LOG TO LogFile, replace (注:file_number为从备份列表记录集中得到的要还原的备份集编号,DataFile与LogFile分别为还原后数据文件与日志文件的长文件名)
11.抽取数据库中相应的数据。(注:如果把多个账套数据合并到一起,需要根据前面得到的账套信息将数据进行区分,例如:将各表加入账套的年份、公司、地区等字段或是能区.分各账套的一个关键字字段进行区分) 结束循环1.在数据库服务器上执行:sp_dropdevice U8Back,删除设备 结束循环2 善后工作,如删除临时文件等
如果您的问题还没有解决,可以到 T+搜索>>上找一下答案
相关阅读
- 经常出现账套年度演示期限已到期,怎么办?2018-11-9 13:2:12
- 请问一下,在做财务报表的时候,左下角的“格式”怎么没有显示呢,要怎么调出来!2017-6-17 0:0:0
- 请问一下,谁知道在零售环节征收消费税的商品有哪些呢?2017-6-17 0:0:0
- 请问一下,购买进口大型商务客车需要征收消费税吗?2017-6-17 0:0:0
- 请问下固定资产的反月结操作必须逐月进行吗?可以直接反到最初的月份吗?2017-6-17 0:0:0
- 请问下库存期初的数据库表是哪张表呢,谢谢2017-6-17 0:0:0
- 请问不设置审批流的单据还会推送到工作圈吗?2017-6-17 0:0:0
- 请问供应商资格审批这个节点有什么用?2017-6-17 0:0:0
- 请问收到银行理财收益,是计入财务费用的贷方,还是借方负数?2017-6-17 0:0:0
- 请问部门的自定义档案可以在销售毛利分析表中显示出来么 T+121普及版2017-6-17 0:0:0