我意识到这个问题以前曾出现过,但是我发现的解决方案都没有针对我的情况的答案(至少我没有理解)。
情况是这样的:我有一个VBA宏,该宏在AutoCad上为小型办公室环境中的多台计算机运行。我们最近推出了一种仅支持Windows 10(与其他Windows 7相对)的新计算机。因此,我们还必须安装较新版本的AutoCad,并且花了几天的时间寻找这些错误。
当宏尝试在“升级的”计算机上打开与我们普适数据库的连接时,它将引发此错误
[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
这是我的连接字符串
Driver={Pervasive ODBC Client Interface};ServerName=FILESERVER;dbq=@MYDATABASE;
我怀疑问题出在软件尝试使用Pervasive ODBC驱动程序的64位版本,但是当我查看64位ODBC数据源管理器时,它尚未安装(尽管安装了32位驱动程序)
所有计算机都具有64位版本的Windows和64位版本的CAD,并且只有32位ODBC Pervasive驱动程序,但是新计算机(运行Windows 10)是唯一引发此错误的计算机。据我了解,较新版本的AutoCad运行VBA7,而以前的版本使用VBA6,所以也许这就是为什么?
是否可以安装普及型ODBC驱动程序的64位版本?还是有办法在连接字符串中指定使用32位驱动程序?
答案 0 :(得分:0)
只是个疯狂的主意。您可以将脚本控件用于数据库连接。 对于64位-可以在github Tablacus script control
上替换脚本控件。将64位和32位混合并不是一个好主意-决不是。 因此,您可以编写一个小的VBS脚本,该脚本只返回您想要的结果
Dim mConnection
Set mConnection = CreateObject("ADODB.Connection")
mConnection.Open "Provider=SQLOLEDB.1;Data Source=<IP zum Server>;Initial Catalog=
<Datenbankname>","<Benutzername>","<Passwort>"
RESULT=mConnection.Execute "SELECT * FROM <tabelle>"
SetmConnection = Nothing
执行脚本后,您现在可以评估脚本结果。
使用Tablacus采样
Private Sub demo()
Dim P1, sc
' Create an instance of the FileSystemObject.
Set fs = CreateObject("Scripting.FileSystemObject")
' Initialize scriptcontrol.
Set sc = CreateObject("scriptcontrol")
sc.LANGUAGE = "VBScript"
sc.AllowUI = True
sc.UseSafeSubset = True
' Add FileSystemObject to scriptcontrol
sc.AddObject "FileSystem", fs, True
' Define the Scripting code
P1 = "Sub Sub1" & vbNewLine & _
" Dim Msg" & vbNewLine & _
" Msg = ""You have """ & vbNewLine & _
" Msg = Msg & FileSystem.Drives.Count" & vbNewLine & _
" Msg = Msg & "" drives connected.""" & vbNewLine & _
" MsgBox Msg" & vbNewLine & _
"End Sub"
' Add the code
sc.AddCode P1
' Run the code
sc.RUN "Sub1"
End Sub
Sub JavaScript_in_VBA()
'Go to Menu -> Tool -> References -> Microsoft Script Control 1.0 & Enable
by Clicking it
Dim jsObj As Object
Set SCRIPT = CreateObject("scriptcontrol")
Dim InputValue1 As Integer, InputValue2 As Integer, RESULT As Integer
'Get Sample Parameters
InputValue1 = ThisWorkbook.Sheets(1).Cells(1, 1)
InputValue2 = ThisWorkbook.Sheets(1).Cells(1, 2)
'Define Scripting Language
jsObj.LANGUAGE = "JScript"
With jsObj
'Add JavaScript Code to Script Control Object
.AddCode "function xProduct(a,b) {return (a*b);}"
'Execute Added Script & Get result
RESULT = .RUN("xProduct", InputValue1, InputValue2)
'Result = .autocad.eval("xProduct( 1, 2)")
End With
ThisWorkbook.Sheets(1).Cells(1, 3) = RESULT
结束子
您还可以考虑使用脚本字典对象,该对象也可以在vba代码和scriptcontrol之间传递 tablacus API与MS脚本控件相同。因此,您可能会使用MS文档以及相关示例。