就拿这个代码:如何访问值的记录
sSQL = "select CtyMarket from Market where Country = '" & Country.Value & "'"
Set rec = CurrentDb.OpenRecordset(sSQL)
这个语句可以返回多个值。我怎样才能访问这些值?
就拿这个代码:如何访问值的记录
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
以其他方式获得您的数据将是使用GetRows的和Recordset对象的\或GetString的metyhods,但我不记得,如果这些都可以使用DAO记录集。您还可以设置一个过滤器上的特定字段中的特定值,等
阅读的记录,当我使用这个功能不太在乎NULL值:
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
或
While not rec.eof
msgbox toStr(rec.fields("CtyMarket").value)
rec.moveNext
Wend
DAO记录集没有GetRows/GetString - 这是ADO记录集。我也不明白为什么如果你打算使用DAO,你不要使用类型为Field的变量,并用For/Each循环遍历Fields集合。最后,我总是测试'如果rec.RecordCount> 0 Then'作为我测试记录是否已被返回。这似乎比测试两个属性更简单,并且保证始终可靠(即,它不会是一个准确的记录计数,但如果有非记录返回它将始终为零)。 – 2011-05-13 21:53:20
当recordcount不知道时,一些记录集(不记得它们的类型,它们的属性)可以返回-1值。这个双EOF \ BOF测试适用于所有记录集类型:DAO,ADO,动态,静态,可更新,只读等等,所以这是我所有时间最喜欢测试记录集中至少存在1条记录的情况。 。 – 2011-05-13 23:38:28
DAO记录集从不返回-1。它们总是返回零或大于零的数字。 ADO工作方式不同的事实并不是关于如何为DAO记录集进行最高效编码的建议。 – 2011-05-18 21:40:10