代码之家  ›  专栏  ›  技术社区  ›  Frank V

请求的操作需要一个OLE DB会话对象…-通过ADO将Excel连接到SQL Server

  •  6
  • Frank V  · 技术社区  · 15 年前

    我正在尝试使用Excel2003并将其连接到SQL Server 2000以运行一些动态生成的SQL查询,这些查询最终会填充某些单元格。

    我试图通过vba via ado(我尝试了2.8到2.0),但在设置 ActiveConnection 变量,位于 ADODB.Connection 对象。我需要尽快解决这个问题…

    请求的操作需要一个OLE DB会话对象,当前提供程序不支持该对象。

    我真的不知道这个错误是什么意思,现在我不在乎。 如何使此连接成功以便运行查询?

    这是我的VB代码:

    Dim SQL As String, RetValue As String
    SQL = " select top 1 DateTimeValue from SrcTable where x='value' " 'Not the real SQL
    RetValue = ""
    
    
    Dim RS As ADODB.Recordset
    Dim Con As New ADODB.Connection
    Dim Cmd As New ADODB.Command
    
    Con.ConnectionString = "Provider=sqloledb;DRIVER=SQL Server;Data Source=Server\Instance;Initial Catalog=MyDB_DC;User Id=<UserName>;Password=<Password>;"
    Con.CommandTimeout = (60 * 30)
    
    
    Set Cmd.ActiveConnection = Con   ''Error occurs here.
    
    ' I'm not sure if the rest is right. I've just coded it. Can't get past the line above.
    Cmd.CommandText = SQL
    Cmd.CommandType = adCmdText
    
    Con.Open
    Set RS = Cmd.Execute()
    
    If Not RS.EOF Then
    
        RetValue = RS(0).Value
        Debug.Print "RetValue is: " & RetValue
    
    End If
    Con.Close
    

    我认为连接字符串有问题,但我尝试了十几种变体。现在我只是在黑暗中射击……

    注释/更新 :让事情更混乱的是,如果我谷歌上面的错误报价,我得到了很多回击,但似乎没有相关的或我不确定什么信息是相关的….

    我已经在“sheet1”中的“microsoft excel objects”下找到了VBA代码。我以前做过,但通常将这些内容放在一个模块中。这会有什么不同吗?

    1 回复  |  直到 7 年前
        1
  •  13
  •   Raj More    15 年前

    您尚未打开连接。我想你需要一个 Con.Open 在将其分配给命令对象之前。

    Con.ConnectionString = "Provider=sqloledb;DRIVER=SQL Server;Data Source=Server\Instance;Initial Catalog=MyDB_DC;User Id=<UserName>;Password=<Password>;"
    Con.CommandTimeout = (60 * 30)
    
    Con.Open
    
    Set Cmd.ActiveConnection = Con   'Error occurs here.
    
    Cmd.CommandText = SQL
    Cmd.CommandType = adCmdText