FoxproDBF数据库转换成SQLServer6.5表的几种方法(2)
时间:2015-08-31 09:46
来源:发表吧
作者:发表吧编辑
点击:
次
endif
closeall
clearall
retu
else&&若连接不成功
waitwind"对不起,输入参数错误,无法连接sqlserver'
clearread
retu
endif
(3)、再执行foxpro程序conv_data将数据由.dbf传输到sqlserver表中。
conv_data.prg程序清单
conv_data.prg程序清单
settalkoff
closeall
clearall
clear
store""todbf_name
&&dbf_name待转换的.dbf数据库
store""tosql_db
&&sql_db目的sql数据库
store""tosql_com
&&sql_com向sqlserver提交的命令
store""tofname
&&fname字段名
store0tohandle
&&handlefoxpro与sqlserver连接的标识
store0tosuccess
&&success命令提交成功与否的标识
setlibrtofpsql.fll
@2,20say"请输入要转换的数据库(dbf)名:"getdbf_name
@3,20say"请输入目的sql数据库名:"getsql_db
read
dbf_name=allt(dbf_name)
sql_db=allt(sql_db)
handle=dbconnect(sql_db,"sa","")
&&建立foxpro与sqlserver连接
ifhandle>0&&若连接成功则
use&dbf_nameasop_dbfin0
&&以op_dbf为别名打开待转换数据库
seleop_dbf
copytodb_strustruexte
&&将其数据结构拷贝生成db_stru库
usedb_struin0
seledb_stru
gototop
sql_title="insertinto"+dbf_name+"("
dowhile.not.eof()
sql_title=sql_title+field_name
skip
if.not.eof()
sql_title=sql_title+","
else
sql_title=sql_title+")values('"
endif
enddo
seleop_dbf
gototop
dowhile.not.eof()
sql_com=sql_title
seledb_stru
gototop
dowhile.not.eof()
fname=field_name
docase
casefield_type="c"
sql_com=sql_com+&fname
casefield_type="n"
sql_com=sql_com+"convert(int(8),'"+str(*fname)+"')"
casefield_type="m"
sql_com=sql_com+'null'
casefield_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)
seleop_dbf
skip
enddo
else&&若连接不成功
waitwind"对不起,输入参数错误,无法连接sqlserver"
clearread
retu
endif
使用上述方法,只要知道一些简单的sqlserver操作及foxpro编程便可实现将.dbf数据转换到sqlserver。运行程序然后输入待转换的数据库名,及目的数据库名就可实现转换,快捷方便。但不足的是,该方法在原数据库.dbf含有memo、general字段时,转换就比较困难,目前尚没有找到有效的解决方法。
4、用第三方数据库软件access进行转换
access是microsoft公司的数据库开发软件,使用access提供的数据输入(inport)/输出(export)的功能及odbc接口,可直接将数据结构及数据转送到sqlserver。
实现步骤:
(1)、按方法二中的第1、2步骤完成数据库设备、数据库创建和odbc接口的设置。
(2)、然后在windowsforworkgroup中启动access,在file菜单中选择"new"创建一个新的access数据库,然后在file菜单中选择"attachtable"连接zg.dbf数据库。
(3)、在"attach"窗口的"datasource"栏中选择数据库源为foxpro2.5,按"ok",之后弹出"selectmicrosoftaccessdatabase"窗口,在该窗口选择要转换的.dbf数据库zg.dbf,按"ok"结束,然后按"close"完成数据库连接。
(4)、在file菜单中选择"export"输出数据,在"export"窗口选择目标数据库类型"<sqlserver>"按"ok"进入下一窗口"selectmicrosoftaccessobject",在"objectindb1"栏选择要转换的数据库zg,在窗口的"view"栏下选择"table"项,,按"ok"。
(5)、进入"export"窗口,在"exportzgto"栏目下输入目的数据库名zg,按"ok"。进入"sqldatasources"窗口,在"selectdatasource",选择在odbc中定义好的zg数据源,按"ok"
(6)、进入"sqlserverlogin"窗口,在"loginid:"栏中输入登录用户名"sa",在"password"栏中若有登录口令则输入口令。否则按"ok"开始进行数据转换。
使用该方法用户不需要深入了解foxpro命令及sqlserver命令,也不须深入了解access操作,更不需对.dbf数据库的数据结构进行分析,access可根据原.dbf数据库的结构自动在sqlserver上创建一个结构相同的表,并且可将原.dbf数据库中不论是字符型、数字型、日期型、memo型、general型的所有数据转换到sqlserver表中。该方法可以简单、方便快捷、完整地将所有.dbf中的数据的转换到sqlserver。
但使用该方法要注意一点,若要转换的数据量很大时,sqlserver中分配给该数据库的日志设备要足够大,或可在sqlserver中的isql/w命令窗口中用以下命令进行监控,并及时清除。
dbccsqlperf(logspace)检查事务日志空间的使用量
dumptransactionzgwithtruncate_only清除事务日志中已完成任务的数据
5、结束语
以上三种方法运行环境服务器端网络操作系统为windownt4.0,网络数据库为sqlserver6.5,客户机windows95,foxproforwindow2.6,access97。
方法二、方法三均通过odbc数据接口进行数据转换。因此,这两种方法对oracal、sybase等数据库也可适用,只要对windows中的odbc数据接口设置作些改动,我们也可将.dbf的数据转换到oracal或sybase的表中。以此类推,只要数据库提供了odbc功能,使用上述方法二、方法三均可实现两种数据库之间的数据转换。