Excel VBA - 是否可以在后台使用 ODBC 查询数据,以便用户不知情?

问题描述 投票:0回答:0

我是 Excel 编程的新手,想要从 OCBC 源获取数据,这样 Excel 就不会显示忙碌的光标,并且在它发生时基本上会冻结。

我尝试使用标准 gui 获取外部数据并检查了“启用后台刷新”,但这不起作用,因为表格有时不会刷新。

接下来,我使用 ADODB 和 adAsyncExecute 编写了自己的 VBA 代码,这也是同样的事情。

我的目标是每 10 秒执行一次 ODBC 查询并在表中显示数据。如果这是一个浏览器,ajax 将在后台运行,而用户不会看到光标更改并暂时锁定用户。

有没有办法在后台执行 ODBC,这样用户就不知道它正在发生?

这是我的代码。它工作正常,只是让用户在执行查询时每 10 秒等待一次。并且查询将花费大约 1 秒,因为它也在获取外部数据。

Sub Refresh()
    Dim y As Integer
    Dim cnn As Object
    Set cnn = CreateObject("ADODB.Connection")
            
    cnn.Open "dsn=myDSN;Uid=et;Pwd=xxxx"        
    q1 = "select name, price, qty from table (tab.test('all'));"
    Set rs = cnn.Execute(q1, , adAsyncExecute)
    
    Do While cnn.State = adStateOpen + adStateExecuting
        DoEvents
    Loop
    
    y = 3
    Do Until rs.EOF
        For Each fld In rs.Fields
            Worksheets("Web1").Cells(y, 2).Value = rs.Fields("Name")
            Worksheets("Web1").Cells(y, 3).Value = rs.Fields("price")
            Worksheets("Web1").Cells(y, 4).Value = rs.Fields("qty")
        Next fld
        y = y + 1
        rs.MoveNext
    Loop
    
    rs.Close
    Set rs = Nothing
    cnn.Close
    Set cnn = Nothing
    
    TimerNextDate = Now() + TimeValue("00:00:10")
    Application.OnTime TimerNextDate, "Refresh"

End Sub
excel vba odbc
© www.soinside.com 2019 - 2024. All rights reserved.