尝试使用 OLEDBConnection 运行时错误“1004”运行查询:应用程序定义或对象定义错误

Posted

技术标签:

【中文标题】尝试使用 OLEDBConnection 运行时错误“1004”运行查询:应用程序定义或对象定义错误【英文标题】:Trying to run a query with OLEDBConnection Run-time error '1004': Application-defined or object-defined error 【发布时间】:2014-03-12 07:38:04 【问题描述】:

我在 .Connection 上收到 1004 错误

    With ActiveWorkbook.Connections(ConnectionName).OLEDBConnection
    .BackgroundQuery = True
    .CommandText = MyCommandText
    .CommandType = xlCmdSql
    .Connection = ConnectionString

ConnectionString 如下所示:

"Provider=SQLOLEDB.1" & Chr(59) & "Integrated Security=SSPI" & Chr(59) & _
"Persist Security Info=True" & Chr(59) & "Initial Catalog=wss_back" & Chr(59) & _
"Data Source=XX-X-0009999.de.xxx.com,12345" & Chr(59) & _
"Use Procedure for Prepare=1" & Chr(59) & "Auto Translate=True" & Chr(59) & _
"Packet Size=4096" & Chr(59) & "Workstation ID=XX-X-1234567" & Chr(59) & _
"Use Encryption for Data=False" & Chr(59) & _
"Tag with column collation when possible=False"

任何想法为什么会失败?

【问题讨论】:

【参考方案1】:

问题出在一行:

    .CommandType = xlCmdSql

CommandType 需要来自 ADODB.CommandTypeEnum 的值,但您提供的是来自 xlCmdType 的值。 xlCmdSql = 2,和ADODB.adCommandTypeEnum.adCmdTable一样,不是adCmdText,这就是你想要的。

所以改成:

With ActiveWorkbook.Connections(ConnectionName).OLEDBConnection
  .BackgroundQuery = True
  .CommandText = MyCommandText
  .CommandType = adCmdText
  .Connection = ConnectionString

...它应该可以工作。

【讨论】:

以上是关于尝试使用 OLEDBConnection 运行时错误“1004”运行查询:应用程序定义或对象定义错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 OLEDBConnection 将新记录插入到带有 Visual Basic 的表中

使用两个DataAdapter使用OleDbConnection Excel到DataGridView

具有区域设置特定字符的数据库的 OleDbConnection/命令

JSON.net 直接从 oledbconnection 序列化

JSON.net 直接从 oledbconnection 序列化

使用 OleDbConnection 从数据库中提取数据