普遍连接AutoCad VBA

时间:2019-01-29 13:04:22

标签: vba odbc autocad pervasive

我意识到这个问题以前曾出现过,但是我发现的解决方案都没有针对我的情况的答案(至少我没有理解)。

情况是这样的:我有一个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位驱动程序?

1 个答案:

答案 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文档以及相关示例。