Ms access 如何访问记录集中的值

Ms access 如何访问记录集中的值,ms-access,recordset,Ms Access,Recordset,以该代码为例: sSQL = "select CtyMarket from Market where Country = '" & Country.Value & "'" Set rec = CurrentDb.OpenRecordset(sSQL) 此语句可以返回多个值。如何访问这些值 为了获得所有值,您可以浏览记录集中的字段和记录。可能是这样的: 'You'll need to declare a new variable Dim i as long If rec.EOF

以该代码为例:

sSQL = "select CtyMarket from Market where Country = '" & Country.Value & "'"
Set rec = CurrentDb.OpenRecordset(sSQL)

此语句可以返回多个值。如何访问这些值

为了获得所有值,您可以浏览记录集中的字段和记录。可能是这样的:

'You'll need to declare a new variable
Dim i as long

If rec.EOF and rec.BOF then
Else
    do while not rec.EOF
        for i = 0 to rec.fields.count - 1
            debug.print rec.fields(i).value
        next i
        rec.movenext
    loop
endif

获取数据的其他方法是使用recordset对象的getrows和\或getstring metyhods,但我不记得这些是否可用于DAO记录集。您还可以为特定字段上的特定值设置筛选器,等等

在读取记录集时,我使用此函数不关心空值:

Public Function toStr(pVar_In As Variant) As String
    On Error Resume Next
    toStr = CStr(pVar_In)
End Function
永远不要相信
rec.recordcount
的确切数量,但是
rec.recordcount>0
是安全的。这就是为什么在使用记录集时不应该使用for循环。如果您想知道记录计数,首先要做的是
rec.movelast
然后
rec.movefirst

我知道有两种不同的方式:

While not rec.eof
    msgbox toStr(rec!CtyMarket)
    rec.moveNext
Wend


DAO记录集没有GetRows/GetString——这是ADO记录集。我也不明白,如果您打算使用DAO,为什么不使用Field类型的变量并使用For/Each循环遍历Fields集合。最后,我总是测试
如果rec.RecordCount>0,则测试是否返回了记录。它似乎比测试两个属性更简单,并且保证总是可靠的(即,它不会是一个准确的记录计数,但如果返回的是非记录,它将始终为零)。有些记录集(不记得它们的类型,也不记得它们的属性)在记录计数未知时可以返回-1值。这个双EOF\BOF测试碰巧适用于所有记录集类型:DAO、ADO、动态、静态、可更新、只读等,因此我一直最喜欢测试一个记录集中是否存在至少一条记录……DAO记录集永远不会返回-1。它们总是返回零或大于零的数字。ADO的工作方式不同,这一事实与关于如何最有效地为DAO记录集编码的建议不符。
While not rec.eof
    msgbox toStr(rec.fields("CtyMarket").value)
    rec.moveNext
Wend