我开发了一个应用程序,它使用VBA Excel 2013 Pro 32位从VFP自由表和数据库中读取数据。用于开发应用程序格式化的计算机。之后,我在同一台机器上安装了Office 2016 Pro Plus 64位。 Visual FoxPro 9.0 SP2和Visual FoxPro 9.0 SP 2的OLE DB提供程序也已安装。
当我再次运行应用程序时,会发出运行时错误3706.在格式化之前,该应用程序会打开数据库并释放表格而没有任何问题。
我做了什么?安装和卸载VFP(和Service Pack 2)和OLE DB提供程序。
为什么会这样?在VFP安装期间或Office安装期间我是否遗漏了任何文件?我错过了其他软件吗?我使用的是Windows 7 64位专业版。
提前感谢您的回答。
更新:此代码发出错误
'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
答案 0 :(得分:1)
VFPOLEDB驱动程序是32位。你不能使用64位excel。您可以尝试使用Advantage Database Server。
PS:更简单的解决方案是使用在VFP或C#中编写和编译的代码(针对x86)。
答案 1 :(得分:0)
这是一个黑暗中的镜头,但是如果你已经宣布了功能,你将不得不改变公共/私人声明功能/子" to" public / private declare ptrsafe function / sub"或相反亦然。添加" ptrsafe"在64位操作系统上使32位声明的函数/ subs兼容。