我今天的问题很简单。我所拥有的是一个VB模块,其中包含向我返回一个ADODB.RecordSet对象的代码,该对象具有从已执行的SQL查询中获取的记录。它是这样的:
sSql_SerCheck = "SELECT DISTINCT Serial FROM dbo.WipReservedSerial WHERE Serial LIKE '" & serialTempSearch
sSql_SerCheck = sSql_SerCheck & "' ORDER BY Serial DESC "
dbGetRecordSet(sSql_SerCheck)
然后将结果放在对象rs中,该对象按如下方式访问
temp = rs(0) 'For the value at the first column for the first record
rs.MoveNext 'This moves to the next record in the record set
现在,我要在这里执行的操作是记录集对象中包含的记录数。现在,我对该类(class)进行了一些研究,发现其中有一个
RecordCount att。
所以我想做的很简单:
if( rs.RecordCount > 0) then
serCheck1 = rs(0)
MsgBox serCheck1
end if
问题是我的RecordCount返回-1。我发现这篇文章http://www.w3schools.com/asp/prop_rs_recordcount.asp指出记录计数将为以下内容返回-1:
注意:对于仅向前的游标,此属性将返回-1;否则,该属性将返回-1。静态或键集游标的实际计数;和-1或动态游标的实际计数。
注意:调用此属性时,必须打开Recordset对象。如果不支持此属性,它将返回-1。
如何获得此对象以返回正确的记录数?
下面添加了VB模块的代码:
Public cn, rs
'Specify pSQL as SQL Statement
Function dbGetRecordset(sSql)
dbCloseConnection()
Set cn = CreateObject("ADODB.Connection")
cn.CommandTimeout = 600
cn.Open(Conn & SystemVariables.CodeObject.CompanyDatabaseName)
Set rs = CreateObject("ADODB.Recordset")
rs.Open sSql, cn, 3, 3
End Function
最佳答案
rs.RecordCount > 0
仅检查记录集是否为空,因此可以通过测试Not rs.EOF
SELECT COUNT()
将是一种变通方法rs.Open sSql, cn, 3, 3
中那样使用魔数(Magic Number),而是像adOpenStatic
,adLockOptimistic
,... 关于VbScript ADODB.RecordSet RecordCount返回-1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28560897/