VBA返回的DBF文件不是表

问题描述 投票:0回答:1

一个软件管理系统,称为“ MainSystems”,可以接受订单并创建发票等。MainSystems使用多个.DBF文件作为数据库。

现在,有多个第三方应用程序检索某些信息(出于巧合,并且方便,全部用VBA编写)。例如,我创建了一个非常简单的VBA宏(excel),该宏可从.dbfs中提取债务和应用的贷项,并生成一个批处理文件以上传到商家。

我确实安装了VFPOLEDBSetup驱动程序以成功完成此操作。它已经运行了一年,没有错误。

现在是实际问题,上周MainSystems进行了系统更新,现在第三方应用程序返回错误。 Excel返回

“运行时错误'-2147467259(80004005):DIRECTORY \ FILE.dbf不是表。”

并且Visual Fox应用程序仅返回

“不是桌子。”

这些应用程序在更新前都运行良好,只有我注意到可能有所不同的地方是.dbfs文件夹中,在更新的当天创建了.cdx,我想知道这是否可能导致错误。如果是这样,是否有解决此问题的解决方案?

或者,如果有人可以引导我朝正确的方向前进,我将不胜感激。我对数据库不是很了解...

更改目录

DBFFolder = "G:\DIRECTORY\"

FileName = "File.DBF"


On Error Resume Next
'Create the ADODB connection object.
Set con = CreateObject("ADODB.connection")

'Check if the object was created.
If Err.Number <> 0 Then
    MsgBox "Connection was not created!", vbCritical, "Connection error"
    Exit Sub
End If
On Error GoTo 0

'Open the connection.
 con.Open "Provider=vfpoledb;" & "Data Source=" & DBFFolder & FileName & ";Collating Sequence=machine"

'Create the SQL statement to read the file. 
'Note that the filename is used instead of the table name.
sql = "SELECT * FROM " & Left(FileName, (InStrRev(FileName, ".", -1, vbTextCompare) - 1)) 

On Error Resume Next

Set rs = CreateObject("ADODB.recordset")

'Check if the object was created.
If Err.Number <> 0 Then
    MsgBox "Connection was not created!", vbCritical, "Connection error"
    Exit Sub
End If
On Error GoTo 0


'Open the recordset.
rs.Open sql, con

预期结果是;访问DBF表并复制所有信息。在过去的一年和其他错​​误中为该宏工作:

“运行时错误'-2147467259(80004005):DIRECTORY \ FILE.dbf不是表。”

在调试“ rs.Open sql,con”行时就会出现问题。

UPDATE找到了错误的原因。 MainSystems在表中增加了列,使其超过256列。 (262)使Microsoft驱动程序无法将其识别为表。有人知道解决方法吗?

sql vba dbf
1个回答
0
投票

尽管我已经并且用于支持需要数据库查询但不能通过“服务器”产品进行支持的系统,但是SAP有一种产品叫做Advantage Database。有一个Advantage LOCAL Server和Advantage Database Server。本地版本基于一组库运行,并且通过网络功能共享更多文件。与OleDb连接,查询,参数化查询的工作方式相似。它可以与VFP表配合使用,但也可以识别255列以上。我不知道这是否是您需要的答案,但可以。显然,它也支持读取DBase IV文件。

关于查找库下载,可能有些棘手。我不记得上一次我不得不寻找“本地”数据库版本与服务器(他们在哪里进行销售)

希望这会指导您解决可能的问题。

© www.soinside.com 2019 - 2024. All rights reserved.