【问题标题】:Excel VBA ADO Recordset - Issue with SELECT columnsExcel VBA ADO 记录集 - SELECT 列的问题
【发布时间】:2018-06-18 07:23:32
【问题描述】:

我明白了

运行时错误“-2147467259 (80004005)”:未指定的错误

当我使用以下代码时:

Set conn1 = CreateObject("ADODB.Connection")
conn1.Open strcon1
strquery3 = "SELECT * FROM TABLE_NAME"
Set rs3 = CreateObject("ADODB.Recordset")
Set rs3 = conn1.Execute(strquery3)

但是,当我在 SELECT 语句中使用较少的列时,代码可以工作:

Set conn1 = CreateObject("ADODB.Connection")
conn1.Open strcon1
strquery3 = "SELECT COLUMN1, COLUMN2 FROM TABLE_NAME"
Set rs3 = CreateObject("ADODB.Recordset")
Set rs3 = conn1.Execute(strquery3)

该表总共包含 17 列。有列数限制吗?如果没有,是否有任何理由无法获取记录集中的所有 17 列?

我正在连接到 Oracle 数据库。使用的驱动程序 - “Microsoft ODBC for Oracle”

【问题讨论】:

  • 列数没有这个限制。由于您没有显示连接字符串:您连接的是什么数据库?顺便说一句:您可以删除第 3 行:Connection.Execute 创建一个 Recordset-object。
  • 我们需要知道数据源。另外,当您尝试一一检索时,您可以返回所有字段(列)吗?
  • 感谢您的回复。我正在连接到 Oracle DB。
  • @L42,我尝试在 SELECT 语句中提及所有列名,而不是 SELECT *。它给了我同样的错误信息。
  • 您是否有任何更改类型为TIMESTAMP 的字段?有一些关于这种数据类型与某些版本的 Oracle 驱动程序相结合的问题的讨论,例如这里:stackoverflow.com/questions/11671769/…

标签: vba excel adodb


【解决方案1】:

试试这个方法:

Dim con As ADODB.Connection
Dim cmd As ADODB.Command
Dim rs As ADODB.Recordset
Dim cs As String
Dim sql As String


' Initialize objects
Set con = New ADODB.Connection
Set rs = New ADODB.Recordset
Set cmd = New ADODB.Command

' Create connection string and query string
cs = "Provider=SQLOLEDB; Data Source=<YOURSERVER>; Initial Catalog=<YOURDATABSE>; User ID=<YOURUSER>; Password=<YOURPASSWORD>"

sql = "select column1, column2 from table"

' Open connection and execute query
con.Open cs
cmd.CommandType = adCmdText
cmd.ActiveConnection = con
cmd.CommandText = sql

Set rs = cmd.Execute

然后,您可以访问列字段,例如:

Dim col1, col2 As String
col1 = rs.Fields("Column1").Value
col2 = rs.Fields("Column2").Value

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多