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:\,這個我也不知為什么,哪位如果知道,請告之。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM