2011-05-13 33 views
4

就拿这个代码:如何访问值的记录

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

这个语句可以返回多个值。我怎样才能访问这些值?

回答

3

好吧,为了获得所有值,您可以浏览记录集中的所有字段和记录。它可能看起来像:

'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记录集。您还可以设置一个过滤器上的特定字段中的特定值,等

+0

DAO记录集没有GetRows/GetString - 这是ADO记录集。我也不明白为什么如果你打算使用DAO,你不要使用类型为Field的变量,并用For/Each循环遍历Fields集合。最后,我总是测试'如果rec.RecordCount> 0 Then'作为我测试记录是否已被返回。这似乎比测试两个属性更简单,并且保证始终可靠(即,它不会是一个准确的记录计数,但如果有非记录返回它将始终为零)。 – 2011-05-13 21:53:20

+0

当recordcount不知道时,一些记录集(不记得它们的类型,它们的属性)可以返回-1值。这个双EOF \ BOF测试适用于所有记录集类型:DAO,ADO,动态,静态,可更新,只读等等,所以这是我所有时间最喜欢测试记录集中至少存在1条记录的情况。 。 – 2011-05-13 23:38:28

+0

DAO记录集从不返回-1。它们总是返回零或大于零的数字。 ADO工作方式不同的事实并不是关于如何为DAO记录集进行最高效编码的建议。 – 2011-05-18 21:40:10

3

阅读的记录,当我使用这个功能不太在乎NULL值:

Public Function toStr(pVar_In As Variant) As String 
    On Error Resume Next 
    toStr = CStr(pVar_In) 
End Function 

切勿轻信的rec.recordcountrec.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