请教:如何从SQL SERVER中将大量数据导入到FOXPRO数据库中?

drsniper 2010-02-06 05:04:59
现有这样的一个问题:我从某个SQL SERVER 2008 数据库的一张数据表中把符合某些条件的数据筛选出来导入到FOXPRO库中,我目前的做法是这样的:

利用ASP.NET和C#语言:

首先读出这些符合条件的记录到一个DataTable,命名为dt;
读取FOXPRO空表,到另一个DataTable中,命名为dt1;
然后循环遍历dt,将数据添加到dt1中,利用dt1的CommandBuilder批量Update,这种手段在记录数较少的情况下能够成功,但是遇到大量数据时便极容易产生一种无法跟踪的错误,因为这个错误随机而且无法定位在具体的记录上;

我还尝试了另一个做法,就是不批量Update,采取读一条数据,即在dt中插入一条,同时Update dt1,但是依然产生上述错误,虽然错误名称固定了,但是依然无法识别是什么错误,错误提示为“Varialbe Q233P45 is not found!”,这错误中的数字部分依然会产生变化。

此外我还尝试了另一个做法:就是循环遍历dt,同时构造一个插入的SQL语句并执行,但是由于需要导出的字段数很多,某些字段的值的长度很长,导致整个SQL语句总体的长度很长,在利用connection进行execute的时候,会发生“Command contains unrecognized phrase/keyword.”这样的错误,即“命令中含有无法识别的谓词”。

现在请教各位VFP高手,当你需要从某个非FOXPRO数据库中读取大量记录到一个FOXPRO表中时,您会如何做?

亦或者您对我以上的一些做法有什么更好的提议或者对出现的问题有什么解决的办法?

真心求教,请予以帮助!
...全文
471 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodliangji 2010-03-04
  • 打赏
  • 举报
回复
最方便的办法是在sql server中将数据导成access(mdb数据库,与sql server都是微软的,格式互通),access再用导出功能转换成dbf;也可导成txt(带格式),按表头建dbf表,用appe from .txt with XXX(这个用你导出的txt用什么分隔符)
zpf1688 2010-02-15
  • 打赏
  • 举报
回复
为什么不用VFP自己的命令?APPEND FROM ?
先用SQLEXEC()返回查询结果
再APPEND FROM不就行了?
十豆三 2010-02-06
  • 打赏
  • 举报
回复
再有就是用 VFP 连接 SQL Server,然后再读取你要导出的,生成临时表的后 Copy 生成一份即可。

这个请参考:

*--请参考:FAQ -

<vfp如何使用spt>
http://faq.csdn.net/read/175938.html
十豆三 2010-02-06
  • 打赏
  • 举报
回复
----------Sql Server表 导出 Dbf----------

方法一:如果DBF表已经存在,在查询分析器中执行以下语句(先选择对应的数据库)


Insert Into openrowset('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:','select * from 表B.DBF') Select * From 表a

/*说明:
SourceDB=c: c:是dbf文件的存放目录
表B.Dbf 是已经存在dbf文件名,数据导入此表
表A.Dbf 是要导出的SQL表名
*/


方法二:如果DBF表不存在,直接导出时创建,通过SQL Server的“导入导出数据”工具

1、建立Visual FoxPro的数据源:

在ODBC中建立一个Visual FoxPro的数据源(ODBC-Microsoft Visual FoxPro Driver)的步骤如下:
打开ODBC配制窗口 ->
选择“用户DSN”页面或“系统DSN”页面,建议用后者 ->
点击“添加”按钮 ->
选择“Microsoft Visual FoxPro Driver”这个驱动 ->
在Data Source Name(数源源名称)处输入此数据源名称,可自定,本例如LjDbf,Database Type(数据库类型)处选择“Free Table directory”(自由表路径),然后在下面的Path(路径)处随便设置一个路径,本列如“D:” ->
点击“OK”(确定)配制完成 ->
关闭ODBC配制窗口


2、通过SQL的导入导出数据(DTS)来把SQL表导成DBF表:

开始 ->
程序 ->
Microsoft Sql Server-导入导出数(DTS)->
下一步 ->
此步为“选择数据源”的窗口,“数据源”选"用于SQL Server的Microsoft OLE DB提供程序"(此项一般为默认),同时选择你要导出的SQL表所在数据库、服务器及服务器的验证方式,然后点击“下一步” ->
此步为“选择目的”的窗口,“目的”选“Microsoft Visual FoxPro Driver”,同时在"用户/系统DSN"处选择你刚刚配制的数据源名(本例如LjDbf,当然上面配制数据源的过程也可以通过“用户/系统DSN”后面有一个“新建”按钮来完成),然后点击“下一步” ->
这时:
A:如果要把被导出的SQL表的全部字段均导出,则选择“从源数据库复制表和视图”,点击“下一步” ->
选择要导出的表或视图,在‘目的’处可修改生成的DBF表的名称,默认与SQL表名一样,点击“下一步” ->
再点击“下一步” ->
最后点击“完成”进行导出即可(导出成功与否DTS会有提示),导出成功之后的DBF表的主文件名与SQL的表名一样。

B:如果只导出SQL表中的几个字段或全部字段(如果导出全部字段,也可以用上面步骤A,结果是一样的,只是方法不同),则选择“用一条查询指定要输出的数据”,点击“下一步” ->
点击“查询生成器”,选择要导出的SQL表(此时可选择列),点击“下一步” ->
指定排序顺序,选一个或多个排序字段,如果不用排序,此步可略,点击“下一步” ->
此步可以指定查询条件,如果没有条件,此步可略,点击“下一步” ->
出现了对应的SQL语句(也可以再修改生成的SQL语句,但不推荐),再点击“下一步” ->
这时可修改要生成的DBF表名,默认为“结果”,再点击“下一步” ->
再点击“下一步” ->
最后点击“完成”进行导出即可(导出成功与否DTS会有提示)。

注:
导出成功后,DBF文件一般存于 Microsoft Sql Server80ToolsBinn 或 Program FilesCommon FilesODBCData Sources目录下,并没有存于上面所说的D:,这个我也不知为什么,哪位如果知道,请告之。

*-------------------------------
*!* 以下转自 wwwwb

*!* 以下是用VFP+ADO+JET SQL实现在不同的数据库系统之间自由转换,生成的DBF用VFP打开,
*!* 修改字段长度即可。
*!* 注意:不同的数据库系统有不同的字段类型、长度等等,特殊字段不能转换,如
*!* IMAGE、TEXT等等,要手工转换。

oConnection = Createobject("adodb.connection")
With oConnection
.ConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:;Extended Properties=dbase 5.0;Persist Security Info=False'
.Open
Endwith
TEXT To lcStr Noshow
Select * Into 要生成的DBF表名 From Sql表名 in [odbc] [ODBC;Driver=SQL Server;UID=sa;PWD=;Server=计算机名;DataBase=数据库名]
Endtext
oConnection.EXECUTE(lcStr)
oConnection.Close

2,722

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧