系統已經安裝 vfpoledb,
單獨執行:
select * from openrowset('VFPOLEDB.1','d:\';'admin';'','select 列1 from 表1')
時,可以正常。
但
insert into
openrowset('VFPOLEDB.1','d:\';'admin';'','select 列1 from 表1')
select 列1 from 表2
出錯提示:
伺服器: 訊息 7301,層級 16,狀態 2,行 1未
能從 OLE DB 提供者 'VFPOLEDB.1' 獲得所需的介面。
換成下面的:--------------------------------------------
insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0','dBase III;DATABASE=D:\','select BM from [yh.dbf]')
select BM from yht
則出現這個錯誤:
未能處理對象 'select BM from [yh.dbf]'。
OLE DB 提供者'MICROSOFT.JET.OLEDB.4.0' 指出該對象中沒有任何列。
參考:
/**************匯入DBF檔案****************/
select * from openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;
SourceDB=e:\VFP98\data;
SourceType=DBF',
'select * from customer where country != "USA" order by country')
go
/***************** 匯出到DBF ***************/
如果要匯出資料到已經產生結構(即現存的)FOXPRO表中,可以直接用下面的SQL語句
insert into openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\',
'select * from [aa.DBF]')
select * from 表
說明:
SourceDB=c:\ 指定foxpro表所在的檔案夾
aa.DBF 指定foxpro表的檔案名稱.
--注意:驅動名中不要有多餘的空格。
insert into openrowset('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=D:\','select 列1 from [表2.DBF]')
select 列1
from 表2
匯入匯出
http://blog.csdn.net/zjcxc/archive/2003/12/29/20085.aspx
http://dev.csdn.net/develop/article/78/78132.shtm
----------DBF 匯入 SQL Server表----------
以下均以SQL2000、VFP6及以上的表為例
方法一:查詢分析器中執行如下語句(先選擇對應的資料庫)
--如果接受匯入資料的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表不存在,匯入時建立
--方法一:
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')
--方法三:
select * into 要產生的SQL表名 from openrowset('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\','select * from dbf表名.DBF')
--用前兩種方法匯入SQL SERVER後,源表再用VFP開啟就不提示“不能存取檔案”,說明語句執行後就把源表關閉了。不過也有不盡人意的地方,就是用前兩種方法匯入後,源表中的字元型欄位匯入後SQL表欄位對應變成NVARCHAR了。
--第三種方法有一個缺點:把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 欄位1,欄位2 from aa.DBF')
/*--說明:
SourceDB=c:\ c:\是dbf檔案的存放目錄
aa.DBF 是dbf檔案名稱
--*/
路過
還不如直接用SQL的匯入匯出來得簡單.
直接用SQL SERVER 的匯入匯出,在選擇匯出類別為DBASE5。0時,按下一步也出現錯誤??
MARK
----------DBF 匯入 SQL Server表----------
以下均以SQL2000、VFP6及以上的表為例
方法一:查詢分析器中執行如下語句(先選擇對應的資料庫)
--如果接受匯入資料的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表不存在,匯入時建立
--方式一:
select * into 要產生的SQL表名 from openrowset('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\','select * from dbf表名.DBF')
--方式二:
select * INTO TEMP1 from openrowset('VFPOLEDB.1','C:\';'admin';'' ,'select * from dbf表名.DBF')
如果沒有安裝VFP,需要把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開啟著呢。可是過了1分鐘左右,再開啟DBF表就可以了,說明經過一段時間後查詢分析器才把這個表關閉。
--也可以只導幾個欄位
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檔案名稱
--*/
方法二:通過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:\,這個我也不知為什麼,哪位如果知道,請告之。