如何将记录集值分配给二维数组
问题描述:
我目前正在使用Excel VBA和SQL查询。我试图把我放到我的记录集中的内容转储到一个二维数组中,这样我可以在函数的后面部分使用这些信息。问题是我只知道从记录集中提取信息的两种方法:CopyFromRecordset和rs.Fields。如何将记录集值分配给二维数组
这是我尝试的代码。
Dim ID_Array(150, 2) As String
Set rs = New ADODB.Recordset
Set oConn = New ADODB.Connection
strSql = "select id, name from groups"
rs.Open strSql, oConn
Do While Not rs.EOF
With ActiveSheet
For Index = 0 To 171
ID_Array(Index, 0) = CStr(rs.Fields(0).Value)
'Safety check to make sure the value isn't null (was having problems before)
If rs.Fields(1).Value <> Null Then
ID_Array(Index, 1) = CStr(rs.Fields(1).Value)
End If
rs.MoveNext
Next
End With
Loop
rs.Close
我敢肯定,我没有正确分配这些值,因为当我去从记录拉他们,很多要么是错误的或根本不显示(名字部分,特别是,甚至不会出现一个一个MsgBox命令字符串,所以我假设它没有正确分配)。
任何人都有这方面的经验?如何将rs的id部分分配给ID_Array的第一维,并将rs的名称部分分配给ID_Array的第二维?
答
如果您使用ADODB.Recordset
,则不需要接下来的内循环。
尝试使用此代码,应该工作:
Dim ID_Array() As String
Set rs = New ADODB.Recordset
Set oConn = New ADODB.Connection
strSql = "select id, name from groups"
rs.Open strSql, oConn
Index = 0
Do While Not rs.EOF
'With ActiveSheet
'For Index = 0 To 171 you dont need for..next, Do While Not rs.EOF show you record one by one
ReDim Preserve ID_Array(1, Index)
ID_Array(0, Index) = CStr(rs.Fields(0).Value)
'Safety check to make sure the value isn't null (was having problems before)
If rs.Fields(1).Value <> vbNullString Then
ID_Array(1, Index) = CStr(rs.Fields(1).Value)
End If
Index = Index + 1
rs.MoveNext
'Next
'End With
Loop
rs.Close
End Sub
答
为了避免NULL错误,更新查询,以包括NVL功能与空间取代。修剪你的.Value,你应该全部设置。请注意,用空白字符串['']替换不起作用。另外,请注意所需的格式化数据库字段,如日期。如果没有匹配的格式,您将替换值会出错。
NVL(SQL_FieldName,' ')
为New_SQL_FieldName
感谢您的答复。我实际上回顾了我的代码,基本上完成了同样的事情。但是,现在我面临着一个不同的问题。由于空检查,rs的“名称”部分不复制。每当我拿走空检查,它给了我一个“无效的空使用”错误消息。 – Alfabit
@Alfabit:在我看来,你不能从ADODB.Recordset赋值给变量的空值,你必须检查每个字段。 – Dawid