RecordSet上的GetRows不会存储Access DB中的文本列

时间:2014-04-27 00:31:49

标签: mysql vba ms-access excel-vba excel

我已经从excel成功连接到我的Access数据库,并且可以在我的RecordSet上使用GetString以字符串形式返回数据库的内容。 GetString将表的所有内容打印到消息框中(如下所示),但GetRows忽略其中一列(本例中为GCAT),这恰好是数据库中唯一的文本字段。我试图将此字段的特定实例打印到我的Excel工作表中,但是在数组位置(0,1),GCAT字段应该是,它打印记录的第三项,而不是我期望的第二项。我错过了什么?它与文本字段有关吗?也许我使用错误的库或数据库引擎?数据库中的每个其他列都会正常返回。

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 个答案:

答案 0 :(得分:0)

在您的代码中看不到任何明显的错误,您是否尝试过调试?您可以循环记录集中的字段,并显示其名称以进行测试,如下所示:

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(),这也可以提升性能(在较大的记录集上非常明显)。