2014-04-08 68 views
0

我們有一個Windows應用程序,它將數據存儲在DBF中。我需要連接到某個表a_sname.dbf並將SN_ACCOUNT,SN_CURRBALSN_CRLIM列提取到要由另一個應用程序導入的文本文件中。在Visual Basic中連接到DBF

理想情況下,文本文件需要看起來像。

SN_ACCOUNT  SN_CURRBAL  SN_CRLIM 
10    100   1000 
20    200   2000 

以上僅爲示例。

目前我期待至少能夠連接到DBF。

我有Oracle SQL知識的BASH腳本,但Windows端對我來說都是新手。我有驅動器映射到Z:\


更新1:下面是我測試腳本。

Option Explicit 

Dim sDir : sDir = "Z:\" 
Dim sCS : sCS = Join(Array(_ 
     "Provider=Microsoft.Jet.OLEDB.4.0" _ 
     , "Data Source=" & sDir _ 
     , "Extended Properties=""dBASE IV;""" _ 
), ";") 
Dim oCN : Set oCN = CreateObject("ADODB.CONNECTION") 
oCN.Open sCS 
Dim oRS : Set oRS = oCN.Execute("SELECT SN_ACCOUNT,SN_CURRBAL,SN_CRLIM FROM a_sname.dbf") 
Do Until oRS.EOF 
    WScript.Echo oRS.Fields(0).Name, oRS.Fields(0).Value 
    oRS.MoveNext 
Loop 
oCN.Close 

我收到錯誤消息Microsoft JET Database Engine: External table is not in the expected format.


更新2:這裏是的a_sname.dbf的表信息的屏幕截圖。

enter image description here


更新3:它的工作原理!這是我正在使用的查詢。

SELECT SN_ACCOUNT,SN_CURRBAL,SN_CRLIM FROM a_sname.dbf

這裏是我使用的回聲。

WScript.Echo oRS.Fields(0).Value, oRS.Fields(1).Value, oRS.Fields(2).Value

是否可以將所有這些管道連接到文本文件並使列間隔更均勻?

enter image description here

+0

爲了完整起見,您還應該發佈連接字符串。格式化記錄集的輸出值得一個問題(它不依賴於數據源)。 –

回答

0

根據爲ADODB的source連接字符串。連接應該是這個樣子:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\FileServer01\Server VFTP Dynamic\Data; 
Extended Properties=dBASE IV;User ID=Admin;Password=; 

你的第一個(測試)查詢可能是

SELECT * FROM [a_sname.dbf] 

在故障情況下,我會

  1. 地圖\\FileServer01\Server VFTP Dynamic到驅動器盤符,相應地更改連接字符串並重試
  2. 使用數據源以交互方式建立連接/在GUI的幫助下使用經驗建立連接字符串

補充:

了一些測試代碼,以增加你的信心:

Option Explicit 

Dim sDir : sDir = "\\gent\eh\...etc...\testdata\dbf" 
Dim sCS : sCS = Join(Array(_ 
     "Provider=Microsoft.Jet.OLEDB.4.0" _ 
     , "Data Source=" & sDir _ 
     , "Extended Properties=""dBASE IV;""" _ 
), ";") 
Dim oCN : Set oCN = CreateObject("ADODB.CONNECTION") 
oCN.Open sCS 
Dim oRS : Set oRS = oCN.Execute("SELECT TOP 2 * FROM [tblAbles]") 
Do Until oRS.EOF 
    WScript.Echo oRS.Fields(0).Name, oRS.Fields(0).Value 
    oRS.MoveNext 
Loop 
oCN.Close 

輸出:

cscript 22934726.vbs 
RTATID 2 
RTATID 3 

疑難解答我:

  1. 在您發佈的代碼,sDir包含一個文件規範( 「Z:\ a_sname.dbf」),而不是一個文件夾/目錄規範
  2. 的Windows ??,??位(您是否需要在32位環境中工作?)
  3. ADO版本? WScript.Echo CreateObject("ADODB.Connection").Version

常見故障二:

  1. 確保a_sname.dbf是一個有效的.dbf通過使用其他工具打開它(Excel和Access,ODBC,...(版本?) )
  2. 歡迎調整 「的dBase IV」 屬性

故障排除III:

  1. 看到here用於從文件頭獲得的版本

  2. 使用的GUI(例如數據源)找出可能的值 「的dBase XX」

故障排除(不dBase的)IV:!?

  1. 根據源,你可以/必須()使用VFP特定的連接字符串:也許
    Provider=vfpoledb;Data Source=C:\MyDataDirectory\;Collating Sequence=general;

  2. 也許你需要download提供商DL L(要小心版本!)

+0

謝謝。這是一個很大的幫助。我已經提出了這個腳本基本上是你的,但與我的參數:http://pastebin.com/rUR5X6QU。我收到錯誤消息'ADODB.Connection:Provider can not be found。它可能沒有正確安裝。「但實際上需要在這裏安裝? – user2656114

+0

謝謝。我用當前的腳本更新了這個問題。我修好了'sir'。我使用的是Windows 8 64位(但打開一個32位'cmd.exe'來運行它),當我運行該命令時顯示「6.2」。 – user2656114

+0

謝謝。我已經上傳了DBF Plus中打開的表格信息的屏幕截圖。我也用Microsoft Excel打開它,但沒有看到任何地方顯示的版本號。如果你能指引我正確的方向,那麼我會看看。 – user2656114