一个软件管理系统,称为“ 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驱动程序无法将其识别为表。有人知道解决方法吗?
尽管我已经并且用于支持需要数据库查询但不能通过“服务器”产品进行支持的系统,但是SAP有一种产品叫做Advantage Database。有一个Advantage LOCAL Server和Advantage Database Server。本地版本基于一组库运行,并且通过网络功能共享更多文件。与OleDb连接,查询,参数化查询的工作方式相似。它可以与VFP表配合使用,但也可以识别255列以上。我不知道这是否是您需要的答案,但可以。显然,它也支持读取DBase IV文件。
关于查找库下载,可能有些棘手。我不记得上一次我不得不寻找“本地”数据库版本与服务器(他们在哪里进行销售)
希望这会指导您解决可能的问题。