RecordSet 上的 GetRows 不会存储 Access DB 中的文本列
Posted
技术标签:
【中文标题】RecordSet 上的 GetRows 不会存储 Access DB 中的文本列【英文标题】:GetRows on a RecordSet won't store text column from Access DB 【发布时间】:2014-04-27 00:31:49 【问题描述】:我已经从 excel 成功连接到我的 Access 数据库,并且可以在我的 RecordSet 上使用 GetString 以字符串形式返回数据库的内容。 GetString 按照我的预期将表的所有内容打印到消息框中(在下面的 cmets 中),但 GetRows 忽略了其中一列(在这种情况下为 GCAT),它恰好是数据库中唯一的文本字段。我正在尝试将此字段的特定实例打印到我的 excel 工作表中,但是在 GCAT 字段应该位于的数组位置(0,1)处,它打印记录的第三项,而不是我期望的第二项。我错过了什么?它与作为文本字段有关吗?也许我使用了错误的库或数据库引擎?数据库中的所有其他列都会正常返回。
Sub Connect()
Dim oConn As ADODB.Connection
Dim oRs As ADODB.Recordset
Dim sConn As String
Dim sSQL As String
Dim arrayString As String
sConn = "Provider='Microsoft.ACE.OLEDB.12.0';Data Source='<path_to_db>'; Persist Security Info='False';"
' Open a connection.
Set oConn = New ADODB.Connection
oConn.ConnectionString = sConn
oConn.Open
' Make a query over the connection.
sSQL = "SELECT ID, GCAT, Min_Years, Max_Years, Contract_Price FROM GCAT"
Set oRs = New ADODB.Recordset
CursorLocation = adUseClient
oRs.Open sSQL, oConn, adOpenStatic, adLockBatchOptimistic, adCmdText
GCATArray = oRs.GetRows()
Sheets("Calculations").Range("D6").Value = GCATArray(0, 1)
'GCATString = oRs.GetString()
'MsgBox GCATString
' Close the connection.
oConn.Close
Set oConn = Nothing
End Sub
这是我第一次涉足 VB,所以我对要使用的语言感到困惑和挣扎。
【问题讨论】:
【参考方案1】:在您的代码中看不到任何明显的错误,您是否尝试过自己调试?您可以循环记录集中的字段,并显示它们的名称以进行测试,如下所示:
For i = 0 To oRS.Fields.Count -1
debug.print oRS.Fields(i).Name
Next
这样,您可以首先查看您要查找的字段是否确实存在。接下来,您可以通过以下方式访问您所追求的字段:
Do While Not oRS.EOF
Debug.Print oRS!GCAT
'Exit Do 'if you want to display only the first, break out of the loop here
oRS.MoveNext
Loop
在这种情况下,您不需要 GetRows(),这也应该可以提高性能(在较大的记录集上非常明显)。
【讨论】:
我从来没有真正解决过最初的问题,但是你让我可以访问我在第二个块中需要的字段。谢谢!以上是关于RecordSet 上的 GetRows 不会存储 Access DB 中的文本列的主要内容,如果未能解决你的问题,请参考以下文章
MS-Access Recordset to Array,值被转置
Access VBA:在连续子窗体中编辑 RecordSet