在SQL Server 中,如何實現DBF文件和SQL Server表之間的導入或者導出?


原來使用SQL Server 2000數據庫,通過DTS工具很方便地在SQL Server和DBF文件之間進行數據的導入和導出,現在安裝了SQL Server2005之后,發現其提供的“SQL Server導入導出向導”中的數據源沒有原來的豐富,缺少對DBF文件的支持。

1、右擊數據庫,選擇“任務”>“導入數據”,打開“SQL Server導入和導出向導”對話框。
2、在“數據源”中選擇Microsoft OLE DB Provider for Visual FoxPro,單擊“屬性”按鈕,打開“數據連接屬性”對話框。
3、單擊Select or enter a database name后面的“...”按鈕,可以選擇一個數據庫或自由表,並單擊“確定”按鈕關閉“數據連接屬性”對話框。
4、單擊“下一步”進行“選擇目標”頁面,直接單擊“下一步”。
5、在“指定表復制或查詢”頁面,直接單擊“下一步”。
6、在“選擇源表和視圖”頁面選擇要導入的Visual FoxPro表后,單擊“下一步”。
7、然后“下一步”直至完成。

需要注意的是,你的表的數據類型要與SQL Server能夠成功轉換,否則要出錯。


VFP MVP

去這里下載吧http://www.microsoft.com/downloads/details.aspx?FamilyId=E1A87D8F-2D58-491F-A0FA-95A3289C5FD4&displaylang=en

在VFP9安裝光盤中也有

 

======================================其他方法-未試========================================================

 

dbf導入sqlserver

 

--如果接受導入數據的SQL表已經存在 

Insert Into 已經存在的SQL表名 Select * From openrowset('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:','select * from aa.DBF') 

--也可以對應列名進行導入,如: 

Insert Into 已經存在的SQL表名 (列名1,列名2...) Select (對應列名1,對應列名2...) From openrowset('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:','select * from aa.DBF') 


-------------如果接受導入數據的SQL表不存在,導入時創建 


--方法一:有一個缺點:把DBF表導入SQL Server中后,馬上用VISUAL FOXPRO打開DBF表,會提示“不能存取文件”,即這個表還被SQL打開着呢。可是過了1分鍾左右,再打開DBF表就可以了,說明經過一段時間后查詢分析器才把這個表關閉。 

Select * Into 要生成的SQL表名 From openrowset('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:','select * from dbf表名.DBF') 

--方法二:有一個缺點:把DBF表導入SQL Server中后,馬上用VISUAL FOXPRO打開DBF表,會提示“不能存取文件”,即這個表還被SQL打開着呢。可是過了1分鍾左右,再打開DBF表就可以了,說明經過一段時間后查詢分析器才把這個表關閉。 

Select * Into TEMP1 From openrowset('VFPOLEDB.1','C:';'admin';'' ,'select * from dbf表名.DBF') 
--如果沒有安裝VFP,需要把vfpoledb.dll拷貝到SYSTEM目錄下,並注冊。 


--方法三:導入SQL SERVER后,源表再用VFP打開就不提示“不能存取文件”,說明語句執行后就把源表關閉了。不過也有不盡人意的地方,就是用前兩種方式導入后,源表中的字符型字段導入后SQL表字段對應變成NVARCHAR了。 

Select * Into 要生成的SQL表名 From OPENROWSET('MICROSOFT.JET.OLEDB.4.0','dBase IV;HDR=NO;IMEX=2;DATABASE=c:','select * from dbf表名.dbf') 

--方法四:導入SQL SERVER后,源表再用VFP打開就不提示“不能存取文件”,說明語句執行后就把源表關閉了。不過也有不盡人意的地方,就是用前兩種方式導入后,源表中的字符型字段導入后SQL表字段對應變成NVARCHAR了。 

Select * Into 要生成的SQL表名 From OPENROWSET('MICROSOFT.JET.OLEDB.4.0','dBase III;HDR=NO;IMEX=2;DATABASE=c:','select * from dbf表名.dbf') 

--方法五:用BDE驅動導入時,再用VFP打開源表時不會提示“不能存取文件” 

Select * From OPENROWSET('MSDASQL','CollatingSequence=ASCII;DBQ=D:SEND;DefaultDir=D:SEND;Deleted=0;Driver={Driver do Microsoft dBase (*.dbf)};FIL=dBase 5.0','select * from dbf表名.DBF') A 
--前提:先在機器上安裝BDE的驅動 


--也可以只導幾個字段 

Select * Into 要生成的SQL表名 From openrowset('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:','select 字段1,字段2 from aa.DBF') 

/*說明: 
SourceDB=c: c:是dbf文件的存放目錄 
aa.Dbf 是dbf文件名 
*/
 

工具導入1:通過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會有提示)。 



工具導入2: 

先把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 Server80ToolsBinn 或 Program FilesCommon FilesODBCData Sources目錄下,並沒有存於上面所說的D:,這個我也不知為什么,哪位如果知道,請告之。 





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 

 


免責聲明!

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



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