【问题标题】:Excel VBA SQL QueryExcel VBA SQL 查询
【发布时间】:2015-01-16 12:22:52
【问题描述】:

我已经构建了一个宏,其中数据首先导入到“原始”工作表中。在导入之前,“原始”工作表首先会清除以前的数据。
然后我在 VBA 中使用 SQL 查询它并以所需格式获得最终输出。
最近我遇到了一个问题,它给出了一条错误消息“查看链接的 Microsoft Excel 工作表的连接已丢失”。

如果我在导入数据之前不清除“原始”表,则相同的宏可以正常工作。 任何帮助表示赞赏。

Option Explicit
Public ROW As Integer
Public Cnn As New ADODB.Connection
Public Rs As New ADODB.Recordset
Public StrSQL As String

Public Sub OpenDB()
    If Cnn.State = adStateOpen Then Cnn.Close
    Cnn.ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & _
    ActiveWorkbook.Path & Application.PathSeparator & ThisWorkbook.Name
    Cnn.Open
End Sub

Public Sub CloseRS()
    If Rs.State = adStateOpen Then Rs.Close
    Rs.CursorLocation = adUseClient
End Sub

Sub MonthlyYorN()



StrSQL1 = "SELECT * FROM [RAW$] where SOME CONDITION"
StrSQL1 = "SELECT * FROM [RAW$] where SOME CONDITION2"

StrSQL = StrSQL1 & " UNION " & StrSQL2

CloseRS
OpenDB

Rs.Open StrSQL, Cnn, adOpenKeyset, adLockOptimistic
If Rs.RecordCount > 0 Then
'Do Something
End If
End Sub

【问题讨论】:

  • 这么多代码来做这么简单的事情——为什么不直接使用 MS Query
  • @DaveSexton 我在发布时修剪了查询。实际的 StrSQL1 和 StrSQL2 是一点复杂的查询。
  • 您可以将 SQL 语句直接粘贴到 MS Query(或通过 VBA)中,因此无论您的语句多么复杂都不会成为问题。MS Query 将为您处理工作表的所有数据刷新.

标签: sql excel vba odbc database-connection


【解决方案1】:

这不是 VBA 问题,而是 ODBC 驱动程序的问题。转到 →ODBC 打开 Data Sources,然后进入 Excel ODBC 驱动程序的高级设置,并确保打开复选框: p>

☑ Enable Automatic Reconnect

MS Access ODBC 可以体验到相同的problem,固定方式相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2015-02-07
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多