ADODB Recordset 字段访问顺序给出空值

Posted

技术标签:

【中文标题】ADODB Recordset 字段访问顺序给出空值【英文标题】:ADODB Recordset fields access order gives empty values 【发布时间】:2013-12-12 21:16:15 【问题描述】:

我有一个 SQL 2005 表,其中包含许多(具体为 84 个)字段(实际上它是一个过程返回的查询) 看起来当我访问稍后放置的记录集字段时,之前放置的某些字段变为空,而服务器实际上已为其返回了一个值 有没有人有这样的问题? 我的解决方案是将这种消失的字段放在表的末尾,以便稍后通过代码(此处为 VBA)访问它时,它的值仍然可以访问但我认为它是 ADODB.Recordset 2.8 中的一个大问题,因为我不应该关心关于场序 我知道这个问题不是很具体,但也许有人有类似的问题?

【问题讨论】:

【参考方案1】:

确保字段值存在的一种方法是将记录集传递给一个数组,例如(您必须构建自己的连接函数):

Function getStoredProcedure() As Variant

Dim rs As ADODB.Recordset
Dim cmd As ADODB.Command
Dim conn As ADODB.Connection
Dim values As Variant

Set conn = getConn("Server", "Database")
Set cmd = New ADODB.Command
cmd.ActiveConnection = conn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "StoredProcedureName"
cmd.Parameters.Item("@TODAY") = today

Set rs = cmd.Execute
If Not rs.EOF Then
    values = rs.GetRows
Else
    Exit Function
End If

Set cmd = Nothing
getStoredProcedure= transposeArray(values)

End Function

您始终可以从那里检索数组中的值。否则,在没有看到您的代码或不了解您要做什么的情况下,我无法判断这是否真的是 ADODB 的问题,因为在以我想要的任何顺序拉取字段项目时我无法重新创建此问题,例如:rs.Fields.Item(i).Value for i =任何顺序的任何数字。

【讨论】:

我知道 GetRows 可以用来解决这个问题,但它使使用记录集更加麻烦:( 我会尝试准备测试 sql/code 来重现它

以上是关于ADODB Recordset 字段访问顺序给出空值的主要内容,如果未能解决你的问题,请参考以下文章

adodb.recordset 仅从 sqlite3 数据库中检索部分 blob 数据

VB6 ADODB.Recordset RecordCount 属性总是返回 -1

Excel 单元格到 ADODB.Recordset

由于空格,ADODB.Recordset 到 SQL Server 查询失败

无法将“ADODB.Recordset”类型的对象转换为“MSDATASRC.DataSource”类型

如何从此 ADODB.Recordset 中获取插入 ID?