当前位置:首页计算机论文计算机理论 → 文章内容

Foxpro DBF数据库转换成SQL Server 6.5表的几种方法

减小字体 增大字体 作者:778论文在线  来源:778论文在线  发布时间:2006-10-7 9:52:44


  摘要:本文主要介绍用SQL Server bcp、Foxpro编程、Access等方法将.dbf数据库转换到SQL Server表的方法。



关键词:Xbase DBF SQL Server 数据库 转换



1、前言



当今,数据库联网实现数据共享已经成为信息系统建设中一个迅速发展的潮流。利用SQL Server、Oracal、Sybase等客户机/服务器(Client/Server)体系结构的数据库系统进行信息系统的开发、更新改造已成为当前一大趋势。而Dbase、Foxbase、Foxpro是我国近年应用较为广泛的数据库开发软件,许多单位、部门多年来积累了大量的宝贵的数据资料,这些部门在进行计算机信息系统改造、更新的同时,面临如何继承大量历史数据的问题,本文介绍三种将DBF数据转换成SQL Server表的方法。



2、利用SQL Server所提供的块拷贝实用程序(bcp)转换



实用程序bcp.exe可从服务器SQL目录下的BINN子目录下获得。



2.1、bcp的 命令格式及主要参数



bcp [[database_name.]owner.] table_name {in|out} datafile [/m maxerror ][/f formatfile] [/e errfile] [/n] [/c] [/t] field_term] [/r row_term] [/U login_ID] [/P password] [/S servername] [/v version] [/a packet_size]

主要参数:

database_name    数据库名

in|out        in从文件到数据库表的拷贝。

            out从数据库表到文件拷贝。

datafile         操作系统文件的路径。该路径的长度可以是

1-255个字符。也可指明磁盘驱动器名字。

/C             用字符类型作为缺省值执行拷贝操作。

/u login_ID    指定登录标识符。

/P password    允许指定一个口令。

/S servername    允许用户指定连接到哪个SQL Server



2.2、实现转换的具体方法



我们以Foxpro的数据库结构的单位职工库(zg.dbf)为例,进行数据转换。其数据结构为:



字段名 类型 字段长度 小数点位数 字段内容

bh C 4 职工编号

xm C 8 职工姓名

xb C 2 性别

nl N 2 0 年龄

zw C 10 职务

gzsj D 参加工作时间

jl M 简历

zp G 照片



实现步骤:



(1)、启动服务器,进入Window NT,SQL Server 6.0,打开SQL Enterprise Manager为单位职工库创建一个数据库设备zg.dat,然后在该设备上建立zg数据库及表(Table),表的数据结构要与zg.dbf的数据结构一致。或用以下SQL Server命令创建设备和创建表。



A、创建数据设备

disk init

name=zg                     数据库设备名

physname=c:\\zg\\zg.dat    数据库文件所在路径

vdevno=8                     数据库设备的标识号

size=5120                     数据库设备大小(10M)



B、建立zg表

create database zg_data on zg=1024,log on zg=1024     建立数据库

use zg_data

create table zg ( bh char (4) null, xm char (8) null, xb char (2) null, nl int null, zw char (10) null,gzsj datatime null, jl text null, zp image null ) 建立表

go



(2)、在客户机上启动Foxpro,用USE命令打开需转换的.dbf文件,用COPY命令将.dbf文件中数据转换成标准的文本文件.txt,命令如下:

use zg.dbf

copy all to zg.txt deli with blan



(3)、从客户机登录到Windows NT服务器上,将zg.txt文件拷贝到服务器的职工库目录c:\\zg下。



(4)、在服务器上,由Windows NT进入到MS-DOS状态,然后执行bcp将数据从zg.txt转换到SQL表,命令格式如下:



bcp zg in zg.txt /c /s mainserver /u manager /P 0001 (mainserver为服务器名,manager为用户名,0001为用户口令)。



该转换方法速度较快,不占用服务器上事务日志空间。但较为复杂、繁锁,操作者必须熟练掌握Foxpro、SQL Server的命令和操作,而且无法将Foxpro的Memo、General字段转换到SQL Server表。



3、用Foxpro for Window 2.5 编程实现转换



用Foxpro编程实现数据转换即通过SQL Server提供的ODBC接口(开放数据库接口)及Foxpr提供ODBC接口工具Connectivity Kit (fpsql.fll),建立SQL与Foxpro的连接,由Foxpro向SQL Server提交创建表命令,然后将.dbf的每条记录,串成一个字符串,将插入命令连同字符串提交给SQL Server,完成数据转换。

实现步骤:



(1)、ODBC的设置:在客户机上启动Windows for group,进入Windows的控制面板( Control panel )。双击ODBC图标,进行zg数据库的ODBC驱动设置。



选择Add增加新的ODBC驱动接口,在Install ODBC drivers项选择SQL Server,按OK,弹出ODBC SQL Server Setup窗口,在 Data source name项中输入zg_data,Server项输入mainserver,按OK完成设置。



(2)、采用上述方法一中步骤1的⑴、⑵创建zg数据库设备及数据库,然后执行Foxpro程序crea_table,创建一个结构与.dbf结构相同的SQL Server表。程序清单如下:



crea_table.prg 程序清单



set talk off

close all

clear all

clear

store  to dbf_name    

&& dbf_name 待转换的.dbf数据库

store  to sql_db

&& sql_db目的SQL数据库

store  to sql_com    

&& sql_com向SQL Server提交的命令

store  to sql_title    

&& sql_title 为向SQL Server提交命令字头

store 0 to handle        

&& handle 为Foxpro与SQL Server连接的标识

store 0 to success    

&& success为命令提交成功与否的标识

set libr to fpsql.fll

@2,20 say 请输入要转换的数据库(dbf)名: get dbf_name

@3,20 say 请输入目的SQL数据库名: get sql_db

read

dbf_name=allt(dbf_name)

sql_db=allt(sql_db)

handle=dbconnect(sql_db, sa,)    

&& 建立Foxpro与SQL Server连接

if handle>0    && 若连接成功则

use &dbf_name as op_dbf in 0 

&&以op_dbf为别名打开待转换数据库

sele op_dbf

copy to db_stru stru exte

&& 将其数据结构拷贝生成db_stru库

use db_stru in 0

sele db_stru

goto top

sql_com=creat table +dbf_name+( 

do while .not. eof()

sql_com=sql_com+field_name+ 

do case

case field_type=C

sql_com=sql_com+char (+;

allt(str(field_len))+ )

case field_type=N

if field_dec=0

if field_len0    && 若连接成功则

use &dbf_name as op_dbf in 0

&&以op_dbf为别名打开待转换数据库

sele op_dbf

copy to db_stru stru exte

&&将其数据结构拷贝生成db_stru库

use db_stru in 0

sele db_stru

goto top

sql_title=insert into +dbf_name+ ( 

do while .not.eof()

sql_title=sql_title+field_name

skip

if .not.eof()

    sql_title=sql_title+, 

else

    sql_title=sql_title+ ) values ( 

endif

enddo

sele op_dbf

goto top

do while .not.eof()

sql_com=sql_title

sele db_stru

goto top

do while .not.eof()

    fname=field_name

    do case

    case field_type=C

        sql_com=sql_com+&fname

    case field_type=N

        sql_com=sql_com+convert(int(8),+str(*fname)+)

    case field_type=M

        sql_com=sql_com+null

    case field_type=G

        sql_com=sql_com+null

    endcase

    skip

    if .not.eof()

    sql_com=sql_com+,

    else

    sql_com=aql_com+)

    endif

enddo

success=dbexec(handle,sql_com)

sele op_dbf

skip

enddo 

else    && 若连接不成功

wait wind 对不起,输入参数错误,无法连接SQL Server

clear read

retu    

endif



使用上述方法,只要知道一些简单的SQL Server操作及Foxpro编程便可实现将.dbf数据转换到SQL Server。运行程序然后输入待转换的数据库名,及目的数据库名就可实现转换,快捷方便。但不足的是,该方法在原数据库.dbf含有Memo、General字段时,转换就比较困难,目前尚没有找到有效的解决方法。



4、用第三方数据库软件Access进行转换



Access是Microsoft公司的数据库开发软件,使用Access提供的数据输入(Inport)/输出(Export)的功能及ODBC接口,可直接将数据结构及数据转送到SQL Server。

实现步骤:



(1)、按方法二中的第1、2步骤完成数据库设备、数据库创建和ODBC接口的设置。



(2)、然后在Windows for Workgroup中启动Access,在File菜单中选择new创建一个新的Access数据库,然后在File菜单中选择Attach table连接zg.dbf数据库。



(3)、在Attach窗口的Data source栏中选择数据库源为Foxpro 2.5,按OK,之后弹出Select Microsoft Access Database窗口,在该窗口选择要转换的.dbf数据库zg.dbf,按OK结束,然后按Close完成数据库连接。



(4)、在File菜单中选择Export输出数据,在Export窗口选择目标数据库类型按OK进入下一窗口Select Microsoft Access Object,在

[1] [2]  下一页