我按照下面链接中发布的解决方案通过VBA执行简单的SAS查询: Calling SAS through VBA
Dim obObjectFactory As New SASObjectManager.ObjectFactory
Dim obObjectKeeper As New SASObjectManager.ObjectKeeper
Dim obServer As New SASObjectManager.ServerDef
Dim obSAS As SAS.Workspace
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
obServer.MachineDNSName = "xxxx@company.com"
obServer.Protocol = ProtocolBridge
obServer.Port = 8561
obObjectFactory.LogEnabled = True
Set obSAS = obObjectFactory.CreateObjectByServer("sas", False, obServer, "", "")
obSAS.LanguageService.Submit "PROC SQL; CREATE TABLE ME.TABLE1; RUN;" 'Error at submit
但我在上面的提交行中收到的错误为“对象变量或未设置块变量”
答案 0 :(得分:0)
您正在尝试创建异步连接。我会尝试创建一个同步连接(将第二个参数更改为true)。
Set obSAS = obObjectFactory.CreateObjectByServer("sas", True, obServer, "", "")
Synchronous指示连接是同步还是同步 异步。最常用的是同步连接 是最简单的创建连接。如果此参数等于TRUE, 在建立连接之前,CreateObjectByServer不会返回。如果 此参数等于FALSE,函数返回空值 立即。建立连接时,对象存储在 ObjectKeeper。
来自SAS文档。这就是你的变量为Nothing
的原因。
http://support.sas.com/rnd/itech/doc9/dev_guide/dist-obj/winclnt/omcreate.html
现在对于Submit方法,我建议你添加一些错误检查代码,比如
If obSAS Is Nothing Then
MsgBox("Connection failed")
Else
obSAS.LanguageService.Submit "PROC SQL; CREATE TABLE ME.TABLE1; RUN;" 'Error at submit
End If
上面的内容将回答您为何收到错误对象变量或未设置块变量的问题。
对于后来的运行时错误' -2147213310(80042002)' ,这是一个不同的问题/问题。您应该尝试联系SAP技术支持,您提供的信息我们无能为力。该错误必须以html标记的形式提供其他信息。从您提供的链接,似乎此错误是由错误的连接设置/参数引起的。
工作区服务器默认端口为 8591 。也许是 workspaceserver也可以在不同的机器上运行。连接到你的 配置文件,转到服务器列表,找到要连接的服务器 右键单击上下文菜单"属性"看对了 您的workspaceserver的连接配置文件。
顺便说一句:如果你正在使用IWA(集成的Windows身份验证),你必须 不提供用户名和密码(无)。
Set obSAS = obObjectFactory.CreateObjectByServer("sas", True, obServer, Nothing, Nothing)