VbScript ADODB.RecordSet RecordCount返回-1

Rua*_*enk 4 vbscript

我今天的问题很简单.我所拥有的是一个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)
Run Code Online (Sandbox Code Playgroud)

然后结果位于对象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
Run Code Online (Sandbox Code Playgroud)

现在我要做的是这个记录集对象中包含的记录数.现在我对课程进行了一些研究,发现有一个RecordCount att.

所以我想做的很简单:

if( rs.RecordCount > 0) then
    serCheck1 = rs(0)
    MsgBox serCheck1
end if
Run Code Online (Sandbox Code Playgroud)

问题是我的RecordCount返回-1.我发现这篇文章http://www.w3schools.com/asp/prop_rs_recordcount.asp声明记录计数将返回-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
Run Code Online (Sandbox Code Playgroud)

Ekk*_*ner 6

  1. 由于您rs.RecordCount > 0只是检查记录集是否不为空,因此您可以通过测试来避免 .Recordcount (以及所有它的问题)Not rs.EOF
  2. 不要相信二手资料;所述MS文档包含“......和-1或对于动态光标实际计数,这取决于数据源”。所以也许你的供应商应该受到指责。在那种情况下(或者当你真的需要一个特定的数字时), aSELECT COUNT()将是一种解决方法
  3. 不要像 in 那样使用幻数rs.Open sSql, cn, 3, 3,而是像adOpenStatic, adLockOptimistic, ...


小智 5

来自帮助

Set oRs = New ADODB.Recordset
oRs.CursorLocation = adUseClient
oRs.Open sSQL, sConn, adOpenStatic, adLockBatchOptimistic, adCmdText
Run Code Online (Sandbox Code Playgroud)

帮助在" 什么是光标"(ADODB程序员指南 - Windows软件开发工具包)中有完整的光标描述.

您将在本地或在服务器上刻录资源以获取记录计数.无论如何,如果您正在浏览数据,请计算它们.

这是一次一个记录集的方法.

    Do While not .EOF
        Outp.writeline .Fields("Txt").Value
        .MoveNext
    Loop
Run Code Online (Sandbox Code Playgroud)