我们有一个Windows应用程序,可以在DBF中存储数据。我需要连接到某个表a_sname.dbf
并将SN_ACCOUNT
,SN_CURRBAL
和SN_CRLIM
列提取到要由其他应用程序导入的文本文件中。
理想情况下,文本文件需要看起来像。
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
的表格信息的屏幕截图。
更新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
。
是否可以将所有这些传输到文本文件并使列间隔更均匀?
答案 0 :(得分:0)
根据 source,ADODB.CONNECTION的连接字符串应如下所示:
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]
如果遇到麻烦,我会
\\FileServer01\Server VFTP Dynamic
映射到驱动器号,相应地更改连接字符串,然后重试<强>加了:强>
一些经过测试的代码可以增强您的信心:
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
疑难解答I:
sDir
包含文件规范(“Z:\ a_sname.dbf”),而不是文件夹/目录规范WScript.Echo CreateObject("ADODB.Connection").Version
疑难解答II:
疑难解答III:
请参阅here以获取文件标题中的版本
使用GUI(例如数据源)查找“dBase XX”的可能值
排除故障(不是dBase!)IV:
根据 来源,您可以/必须(?)使用特定于VFP的连接字符串:也许
Provider=vfpoledb;Data Source=C:\MyDataDirectory\;Collating Sequence=general;
也许您需要download提供程序DLL(小心版本!)