Excel VBA 应用程序未加载数据

Excel VBA App does not load data

我开发了一个从 VFP 免费表和数据库读取数据的应用程序,使用 VBA 在 Excel 2013 Pro 32 位。用于开发该应用程序的计算机已格式化。之后,我在同一台机器上安装了Office 2016 Pro Plus 64位。还安装了 Visual FoxPro 9.0 SP2 和 OLE DB Provider for Visual FoxPro 9.0 SP 2。

当我再次 运行 应用程序时,出现 运行 时间错误 3706。在格式化之前,该应用程序打开数据库和空闲表没有任何问题。

我做了什么?安装和卸载 VFP(和服务包 2)和 OLE DB 提供程序。

为什么会这样?在 VFP 安装或 Office 安装过程中我是否遗漏了任何文件?我缺少其他软件吗?我正在使用 Windows 7 64 位专业版 SP1。

预先感谢您的回答。

更新:此代码发出错误

'Example for free table

Sub OpenFreeTableForReading()

Dim cnConnection As ADODB.Connection
Dim rstRecordSet As ADODB.Recordset
Dim strConnection As String, strQuery As String
Dim strErrMessage As String
Dim arrData As Variant
Dim lngX As Long

On Error GoTo ErrSub

'Setting connection object and query string command
strConnection = "Provider=VFPOLEDB.1;DataSource=C:\Path\to\TableToOpen.dbf;"
strQuery = "SELECT * FROM TableToOpen"
Set cnConnection = New ADODB.Connection
cnConnection.ConnectionString = strConnection

'This line issues runtime error 3706
cnConnection.Open

'Retrieved records are kept on an array
Set rstRecordSet = New ADODB.Recordset
With rstRecordSet
.CursorLocation = adUseClient
.LockType = adLockReadOnly
.Open strQuery, cnConnection, adOpenStatic

If Not (rstRecordSet.EOF) Then
 'Disconnect the recordset
 .ActiveConnection = Nothing

 'Get the field count
 lngX = .Fields.Count
 arrData = .GetRows()
Else
 'Recordset is empty; create dummy array record
 ReDim arrData(0, 0)
End If
End With

'Printing data - ommited

CloseAll:
    cnConnection.Close
    Exit Sub
ErrSub:
    strErrMessage = CStr(Err.Number) & " " & Trim(Err.Description)
    MsgBox strErrMessage
    Resume CloseAll
End Sub

这是瞎猜,但如果您声明了函数,则必须将 "public/private declare function/sub" 更改为 "public/private declare ptrsafe function/sub",反之亦然。 "ptrsafe" 的添加使 32 位声明 functions/subs 在 64 位操作系统上兼容。

VFPOLEDB 驱动程序是 32 位的。您不能将它用于 64 位 excel。您可以尝试改用 Advantage Database Server。

PS:一个更简单的解决方案是使用用 VFP 或 C#(针对 x86)编写和编译的代码。