Vba 彭博API:如何检查连接是否工作?

Vba 彭博API:如何检查连接是否工作?,vba,bloomberg,Vba,Bloomberg,我正在实现一个依赖于Bloombergs blpapilib2的工具,即Bloomberg API COM Lib 3.5 在允许用户访问任何刷新数据功能之前,我希望确保连接正常。我目前的做法是: 检查库是否可用并链接。基本上,通过引用进行循环就可以完成这项工作 打开与session.Start()的连接。我希望在这里得到一个错误,但它不会给我一个。因此,步骤3 请求一些数据并验证它(确保它不是空的) 令人惊讶的是,我无法可靠地重现得到的结果是空的。我希望我的会话依赖于一个用户被注入终端。看来我

我正在实现一个依赖于Bloombergs blpapilib2的工具,即Bloomberg API COM Lib 3.5

在允许用户访问任何刷新数据功能之前,我希望确保连接正常。我目前的做法是:

  • 检查库是否可用并链接。基本上,通过引用进行循环就可以完成这项工作

  • 打开与session.Start()的连接。我希望在这里得到一个错误,但它不会给我一个。因此,步骤3

  • 请求一些数据并验证它(确保它不是空的)

  • 令人惊讶的是,我无法可靠地重现得到的结果是空的。我希望我的会话依赖于一个用户被注入终端。看来我错了;即使我注销,我的请求也会得到处理并返回正确的数据

    我可以想象两种情况:

    • bbcom服务器中的一些后台缓存

    • 使用另一种身份验证方法


    我有两个问题:

    问题1。确保用户能够下载数据的最佳方式是什么

    问题2。如何验证连接是否已成功建立以及用户是否已通过身份验证

    谢谢。

    要“切断”连接,您需要注销并登录到其他计算机。如果您只是注销,那么该提要仍然可以使用API使用

    这就是我测试连接的方式——我认为它工作得相当好。我有一个
    BloombergWrapper
    类,它处理与API通信的所有底层内容,并具有以下功能:

    Private pSession As blpapicomLib2.Session
    Private pService As blpapicomLib2.Service
    
    Private Sub Class_Initialize()
    
      Dim locStatusBar As Variant
      Dim locBbResult As Variant
    
      On Error GoTo error_handler
    
      If Application.StatusBar = False Then locStatusBar = False Else locStatusBar = Application.StatusBar
      Application.StatusBar = "Connecting to Bloomberg..."
    
      Set pSession = New blpapicomLib2.session
      pSession.Start
    
      pSession.OpenService ("//blp/refdata")
      Set pService = pSession.getService("//blp/refdata")
    
      Application.StatusBar = locStatusBar
      Exit Sub
    
    error_handler:
      If InStr(Err.Description, "timeout") Then
        Call MsgBox("A Bloomberg timeout has occured. Make sure you are logged on your terminal.", vbCritical + vbOKOnly, "Bloomberg error...")
      End If
      If locStatusBar <> "" Then Application.StatusBar = locStatusBar
    
    End Sub
    
    Private Sub Class_Terminate()
      pSession.Stop
      Set pSession = Nothing
    End Sub
    
    Private pSession作为blpapicomLib2.Session
    作为blpapicomLib2.Service的私有pService
    私有子类_Initialize()
    Dim locStatusBar作为变体
    Dim Locbresult作为变量
    关于错误转到错误处理程序
    如果Application.StatusBar=False,则locStatusBar=False,否则locStatusBar=Application.StatusBar
    Application.StatusBar=“连接到彭博社…”
    Set pSession=New blpapicomLib2.session
    会话,开始
    pSession.OpenService(“//blp/refdata”)
    Set pService=pSession.getService(“//blp/refdata”)
    Application.StatusBar=locStatusBar
    出口接头
    错误\u处理程序:
    如果指令(错误描述,“超时”),则
    调用MsgBox(“发生彭博超时。请确保您已登录到终端。”,vbCritical+vbOKOnly,“彭博错误…”)
    如果结束
    如果locStatusBar为“”,则Application.StatusBar=locStatusBar
    端接头
    私有子类_Terminate()
    请停止
    设置pSession=Nothing
    端接头
    
    谢谢,这看起来很像我要找的。出于某种原因,`On Error GoTo errHandler`没有捕获我得到的运行时错误:“运行时错误-2147024809(80070057):服务'//blp/refdata'未找到”。为什么?(库已链接,BB未运行,并且从未在此计算机上运行过,但已安装。)谢谢!只是一个快速更新,我让调试器停止处理所有错误,包括那些在哪里处理的错误,使得任何错误处理都毫无意义;)这个解决方案非常有效。谢谢