gpt4 book ai didi

VbScript ADODB.RecordSet RecordCount 返回 -1

转载 作者:行者123 更新时间:2023-12-03 06:26:50 36 4
gpt4 key购买 nike

我今天的问题很简单。我拥有的是一个 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)做了一些研究,发现有一个记录计数属性

所以我想做的很简单:

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 或动态游标的实际计数。

注意:调用此属性时,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

最佳答案

  1. 由于您的 rs.RecordCount > 0 只是检查记录集是否不为空,因此您可以通过测试 Not rs.EOF 来避免 .Recordcount(及其所有问题) >
  2. 不要相信二手来源; MS docs包含“...以及 -1 或动态游标的实际计数,取决于数据源”。所以也许你的提供商应该受到责备。在这种情况下(或者当您确实需要特定数字时),SELECT COUNT() 将是一种解决方法
  3. 不要像 rs.Open sSql, cn, 3, 3 那样使用魔数(Magic Number),而是定义(并仔细检查)您的 Const,例如 adOpenStatic, adLockOptimistic,...

关于VbScript ADODB.RecordSet RecordCount 返回 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28560897/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com