Foxpro、excel文件批量导入数据到Mysql、Oracle

来源:互联网 发布:深圳国际学校知乎 编辑:程序博客网 时间:2024/06/08 14:20

CSDN论坛里时不时有朋友问起怎么把xls、dbf文件导入远程MySQL、Oracle等数据库,想当年我也为这个问题忙活了好一阵。如果十几、二十个文件,手工搞掂也就算了,上百个文件、二三十G,那怎么可能!免不了琢磨着搞个程序来做导入。

因为熟悉VFP,而且后面的工作还要用到VFP,所以整个程序就用VFP编了。

要点如下:

一、SQL数据库插入数据的标准办法是Insert

Insert Into table_name [( Fieldname1 [, FieldName2, ...])] Values ( eExpression1 [, eExpression2, ...])]

或者

Insert Into table_name [( Fieldname1 [, FieldName2, ...])] Select SelectClauses

前者先要表达式赋值,后要一行一行循环,费事。后者在SQL圈里打转,从SQL外导数到SQL内,行不通。

心里想着最好是能有一条语句,从SQL外文件导入到SQL内,就好象VFP的Append From。Append是VFP自己的命令,可以从数组也可以从文件一次过追加记录。另外,VFP对SQL命令Insert还有一个扩展:

Insert Into dbf_name From Arrary Arrayname
也支持从数组追加数据。

但这两种方法不是SQL标准,不适用于SQL环境,不能用来直接向MySQL、Oracle传送数据。

于是想到远程视图(View),变通一下,Append到视图。

一测试,发现远程视图要把数据先下载下来,这就不好了,目的是上传,下载干啥?而且VFP文件有2G的限制,视图里的数据肯定要放到个临时文件里,没上传就先超2G了。

后来到CSDN里请教,承蒙happyflystone、wanbolantian、十豆三等几位朋友出手相助、指点迷津,于是改用游标

VFP通过游标适配器(CursorAdapter)打开游标,所以要先创建一个游标适配器对象。类从默认CursorAdapter继承,通过游标适配器设计器(CursorAdapter Builder)定义。也可以通过程序定义,我初次使用游标,不熟悉,没办法,只好用设计器,跟着向导一步一步来,主要是定义远程连接、定义游标、定义数据同步和更新方式。过程就不罗嗦了,后面代码里我就直接用类创建对象了。

 

二、用VFP打开xls文件也是常有人问的问题,办法是建立一个Excel对象:

oExcel=CREATEOBJECT( 'Excel.application')

然后调用相关函数和方法,后面代码里我用到的几个。更多更详细说明请大家自己用谷歌搜索一下,能找到很多,我就是这样找的。

三、第三个关键提取导入文件夹下的所有文件名,遍历循环、导入。VFP提取文件名的函数是ADIR()。

 

下面跟着程序一步一步看过去。

数据不见得固定在xls文件中特定位置,把数据区域参数化,有利于提高程序的灵活性。我的xls文件中第7行是字段名,数据从第8行开始,最后有一合计行。因此首尾两行又被利用来作过程监控、校验。

 

为了进一步监控导入过程,我又另建了一个importfiles.dbf文件,把导入文件名、导入行数等特征记录下来。

现在互联网上各种字符编码太多,不见得都能兼容,测试时几次遇到生僻字就被中断出来,搞得很不耐烦,好在多一个字少一个字不是大事,不想在这个问题上纠缠、浪费时间,因此干脆把生僻字置换掉。同时把是否发生过置换也记录下来。

 

提取导入文件名。

导入过程随时都有可能中断,把已经导入的文件移开,下次继续时从没成功的开始。

我拿到的xls文件大概是2003格式,无意中发现9795格式的文件要小很多,于是决定另存时改变格式,反正也不是什么花哨表格。

 

建立Excel和游标对象。

 

开始遍历,

打扫战场,释放对象、清空变量。

 

啰哩叭嗦一堆,大家火眼金睛,挑自己有用的拿。

欢迎切磋、交流。

 

原创粉丝点击