SQL操作DBF
--从SQL Server查询器预览dBase 文件中数据
select * from openrowset('MICROSOFT.ACE.OLEDB.12.0','dBase 5.0;database=D:\dbf','select * from [1111.dbf]')
--若提示:无法处理对象"select * from [1.dbf]"。链接服务器"(null)" 的OLE DB 访问接口"MICROSOFT.ACE.OLEDB.12.0" 指示该对象没有列,或当前用户没有访问该对象的权限。
--解决:这个文件损坏了,或者是需要用户名和密码
select * from openrowset('VFPOLEDB.1','D:\dbf';'admin';'','select * from [1111.dbf]')--前提是系统已经安装vfpoledb 驱动
select * from openrowset('MSDASQL', 'Driver=Microsoft Visual FoxPro Driver; SourceDB=D:\dbf; SourceType=DBF',
'select * from [1111.dbf]')
--注:odbc连接dbf表出现[Microsoft][ODBC 驱动程序管理器] 驱动程序不支持此功能”错误的解决方法为原来是操作系统升级到win2003后机器上的foxpro的odbc驱动太新了。不支持老式的访问驱动了。
--需要从一个xp系统上复制一个dll到win2003系统中覆盖,dll的名称是vfpodbc.dll, 大小为K,版本.1.8630.1。
================================================================
/**************导入DBF文件****************/
select * from openrowset('MSDASQL', 'Driver=Microsoft Visual FoxPro Driver; SourceDB=D:\dbf; SourceType=DBF',
'select * from 1111.dbf')
/***************** 导出到DBF ***************/
如果要导出数据到已经生成结构(即现存的)FOXPRO表中,可以直接用下面的SQL语句
insert into openrowset('MSDASQL', 'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=D:\dbf',
'select * from 1111.dbf') select * from 表
--说明: (1)、SourceDB=D:\dbf 指定foxpro表所在的文件夹;(2)、aa.DBF 指定foxpro表的文件名.
--注: 如果在使用ODBC方式连接数据库时,出现了对话框为“Microsoft ODBC 驱动程序管理器驱动程序不支持此功能”解决方案:基本上就是你机器上缺少一些相关的DLL了。解决办法就是下载驱动程序Visual FoxPro ODBC Driver装上,就可以了:http://msdn2.microsoft.com/en-us/vfoxpro/bb190233.aspx; 直接下载地址http://download.microsoft.com/download/vfoxodbcdriver/Install/6.1/W9XNT4/EN-US/VFPODBC.msi
==============================================================================
----------DBF 导入SQL Server表----------
--以下均以SQL2000、VFP6及以上的表为例
--方法一:查询分析器中执行如下语句(先选择对应的数据库)
--如果接受导入数据的SQL表已经存在
insert into 已经存在的SQL表名 select * from openrowset('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=d:\dbf','select * from 1111.DBF')
--也可以对应列名进行导入,如:
insert into 已经存在的SQL表名 (列名,列名...) select (对应列名,对应列名...) from openrowset('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=d:\dbf','select * from 1111.DBF')
--如果接受导入数据的SQL表不存在,导入时创建
--方式一:
select * into 要生成的SQL表名 from openrowset('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=d:\dbf','select * from 1111.DBF')
--方式二:
select * into TEMP1 from openrowset('VFPOLEDB.1','d:\dbf';'admin';'' ,'select * from 1111.DBF')
select * from openrowset('VFPOLEDB.1','d:\dbf';'admin';'' ,'select * from 1111.DBF')
--如果没有安装VFP(即:vfpoledb驱动),需要把vfpoledb.dll拷贝到SYSTEM目录下,并注册。
--方式三:
select * into 要生成的SQL表名 from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','dBase IV;HDR=NO;IMEX=2;DATABASE=c:\','select * from dbf表名.dbf')
--方式四:
select * into 要生成的SQL表名 from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','dBase III;HDR=NO;IMEX=2;DATABASE=c:\','select * from dbf表名.dbf')
--用前两种方式导入SQL SERVER后,源表再用VFP打开就不提示“不能存取文件”,说明语句执行后就把源表关闭了。不过也有不尽人意的地方,就是用前两种方式导入后,源表中的字符型字段导入后SQL表字段对应变成NVARCHAR了。
--第三种方式有一个缺点:把DBF表导入SQL Server中后,马上用VISUAL FOXPRO打开DBF表,会提示“不能存取文件”,即这个表还被SQL打开着呢。可是过了分钟左右,再打开DBF表就可以了,说明经过一段时间后查询分析器才把这个表关闭。
--也可以只导几个字段
select * into 要生成的SQL表名 from openrowset('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\','select 字段,字段from aa.DBF')
/*--说明:
SourceDB=c:\ c:\是dbf文件的存放目录
aa.DBF 是dbf文件名
--*/
--方法二:通过SQL Server的“导入导出数据”工具(DTS)
--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(路径)处设置你要导入的DBF表所在的路径,本列如“D:\”->
--点击“OK”(确定)配制完成->
--关闭ODBC配制窗口
--2、通过SQL的导入导出数据(DTS)来把DBF表导成SQL表:
--开始->
--程序->
--Microsoft SQL Server-导入导出数(DTS)->
--下一步->
--此步为“选择数据源”的窗口,“数据源”选“Microsoft Visual FoxPro Driver”,同时在"用户/系统DSN"处选择你刚刚配制的数据源名(本例如LjDbf,当然上面配制数据源的过程也可以通过“用户/系统DSN”后面有一个“新建”按钮来完成),然后点击“下一步”->
--此步为“选择目的”的窗口,“目的”选"用于SQL Server的Microsoft OLE DB提供程序"(此项一般为默认),同时选择你要导成的SQL表的存放数据库、服务器及服务器的验证方式,然后点击“下一步”->
--这时:
--A:如果要把DBF表全部字段均导入,则选择“从源数据库复制表和视图”,点击“下一步”->
--选择要导入的DBF表,在‘目的’处可修改生成SQL表的名称,默认与DBF表名一样,点击“下一步”->
--再点击“下一步”->
--最后点击“完成”进行导入即可(导入成功与否DTS会有提示)。
--B:如果只导入DBF表中的几个字段或全部字段(如果导入全部字段,也可以用上面步骤A,结果是一样的,只是方法不同),则选择“用一条查询指定要输出的数据”,点击“下一步”->
--点击“查询生成器”,选择要导入的DBF表(此时可选择列),点击“下一步”->
--指定排序顺序,选一个或多个排序字段,如果不用排序,此步可略,点击“下一步”->
--此步可以指定查询条件,如果没有条件,此步可略,点击“下一步”->
--出现了对应的SQL语句(也可以再修改生成的SQL语句,但不推荐),再点击“下一步”->
--这时可修改要生成的SQL表名,默认为“结果”,再点击“下一步”->
--再点击“下一步”->
--最后点击“完成”进行导入即可(导入成功与否DTS会有提示)。
--方法三:
--先把DBF表转成EXCEL或TXT,然后SQL SERVER的导入导出工具把EXCEL或TXT导入即可(此方法类似方法二,不再介绍)。
----------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 Server\80\Tools\Binn 或Program Files\Common Files\ODBC\Data Sources目录下,并没有存于上面所说的D:\,这个我也不知为什么,哪位如果知道,请告之。
SQL操作DBF的更多相关文章
- 数据库优化和SQL操作的相关题目
SQL操作 1.有一个数据库表peope,表有字段name,age,address三个属性(注:没有主键).现在如果表中有重复的数据,请删去重复只留下其中的一条.重复的定义就是两条记录的name,ag ...
- 常用SQL操作(MySQL或PostgreSQL)与相关数据库概念
本文对常用数据库操作及相关基本概念进行总结:MySQL和PostgreSQL对SQL的支持有所不同,大部分SQL操作还是一样的. 选择要用的数据库(MySQL):use database_name; ...
- mongodb 操作语句与sql操作语句对比
上行:SQL 操作语句 下行:Mongo 操作语句 CREATE TABLE USERS (a Number, b Number) db.createCollection("mycoll&q ...
- 避免循环做SQL操作
经常犯的错误是把一个SQL 操作放置到一个循环中, 这就导致频繁的访问数据库,更重要的是, 这会直接导致脚本的性能低下.以下的例子, 你能够把一个循环操作重置为一个单一的SQL语句. foreach ...
- sql操作一般函数
sql操作一般函数 函数一般语法:SELECT function(列) FROM 表 函数的基本类型是: Aggregate 合计函数:函数的操作面向一系列的值,并返回一个单一的值. Scalar 函 ...
- flask 操作mysql的两种方式-sql操作
flask 操作mysql的两种方式-sql操作 一.用常规的sql语句操作 # coding=utf-8 # model.py import MySQLdb def get_conn(): conn ...
- ArcSDE10.1配置Oracle 监听器来使用SQL操作ST_Geometry(个人改动版)
发了两天的时间来解决配置Oracle 监听器来使用SQL操作ST_Geometry的配置,网上搜索一大片,结果真正找到的只有方法可用,下面把这个方法我个人在总结下. ArcSDE10.1配置Oracl ...
- SQL 操作字符串
SQL操作字符串相对来说比较难一点,现在总结几个常用的SQL 对字符串的操作: declare @dd nvarchar(12) set @dd='2015-03-13' print @dd decl ...
- 怎么配置 Oracle 侦听器来使用SQL操作ST_Geometry
关于这个内容,其实从ArcSDE9.2推出ST_Geometry就让用户感到很有吸引力,而且特别是在ArcSDE9.3之后,用户使用SQL操作ST_geometry越来越多,但是在配置Oracle监听 ...
随机推荐
- JAVA中级开发应该掌握的小知识点
一.悲观锁.乐观锁的区别: 悲观锁:一段执行逻辑加上悲观锁,不同线程同时执行,只有一个线程可以执行,其他线程在入口处等待,直到锁被释放.乐观锁:一段执行逻辑加上乐观锁,不同线程同时执行,可以同时进入执 ...
- Go 与 PHP 的语法对比
Go 是由 Google 设计的一门静态类型的编译型语言.它有点类似于 C,但是它包含了更多的优点,比如垃圾回收.内存安全.结构类型和并发性.它的并发机制使多核和网络机器能够发挥最大的作用.这是 Go ...
- Python3标准库:struct二进制数据结构
1. struct二进制数据结构 struct模块包括一些函数,这些函数可以完成字节串与原生Python数据类型(如数字和字符串)之间的转换. 1.1 函数与Struct类 struct提供了一组处理 ...
- CSS 如何实现当鼠标放在上面时整行变色呢?
摘要:下文讲述css中实现鼠标放在指定行上面时,整行变色的方法分享,如下所示: 实现思路:使用:hover伪类,实现当鼠标指向时,其背景色发生相应的变化,如下例所示: 例: 下文中的div,当鼠标放上 ...
- JPA 常用注解
@Entity(name=”EntityName”):必须,name为可选,对应数据库中一的个表 @Table(name=””,catalog=””,schema=””):可选 通常和@Entity配 ...
- JS格式时间
Date.prototype.format = function(format) { var o = { "M+": this.getMonth() + 1, //month &q ...
- iptables (一) 主机防火墙和网络防火墙
Firewall : 防火墙,隔离工具:工作于主机或网络的边缘,对于进出本主机或网络的报文根据事先定义好的检测规则作匹配,对于能够被规则所匹配到的报文做出相应处理的组件:有主机防火墙和网络防火墙 Ip ...
- Oracle中表与包体用户没有操作权限问题
一.表1.在stg用户下查看table_name 表是否存在select * from table_name 2 在表所在用户执行(授权)grant select,update on table_na ...
- Linux connect: Network is unreachable
在虚拟机中ping,发现网络不通: [root@node01 ~]# ping 114.114.114.114 connect: Network is unreachable 发生此问题时,环境如下: ...
- Linux下文件的七种类型
文件属性 1. 本章引言 上一章通过学习文件io,知道了如何使用文件io来打开文件,对文件进行读写等操作,那么我们这一章将换一个角度,专门围绕文件属性进行相关的讨论. 1.1 什么是文件属性? 我们通 ...