【问题标题】:ASP Classic: recordset recordcount -1 for new table but older ones ok?ASP Classic:新表的记录集记录计数 -1 但旧表可以吗?
【发布时间】:2019-06-27 08:56:03
【问题描述】:

我正在使用 Classic ASP 访问我们网络服务器上的 Access 数据库。应用程序检查网络/表格的传感器更新,即打印最后 5 条记录。该代码在历史上适用于多个表。我最近向数据库添加了一个新表,当我修改代码以从新表中检索记录时,我得到一个 recordcount = -1,它只输出最后一条记录。我已阅读有关 Recordset Cursor 的信息,但不确定我是否了解如何将其应用于我的代码,以及为什么该代码不适用于这个新表?下面是检索打印记录的基本代码:

WebName = "OurWeb"
MySite = "filedsn=" & Server.MapPath("/" & WebName & "/files/reffiles/accessdsn.dsn") & ";DBQ=" & Server.MapPath("/" & WebName & "/files/reffiles/loger.mdb") & ";DefaultDir=" _
& Server.MapPath("/" & WebName & "/") & ";"

set MyDatabase = server.createobject("ADODB.Connection")
if err.number <> 0 then response.write("<p>ODBC Error</p>")
Mydatabase.open MySite 

set LastMyDate = MyDatabase.Execute("SELECT Format(Max([Date_Time]),'mm/dd/yy hh:mm:ss') AS Expr1 FROM Charger2;")

set LastMYDate = MyDatabase.Execute("SELECT Charger2.id FROM Charger2 WHERE Charger2.date_Time = #" & lastMGdate.fields(0).value & "#;")

MyIDLast = LastMyDate.fields(0).value -5
set LastMyRecord = MyDatabase.Execute("SELECT Charger2.id,  Charger2.date_time,  Charger2.INV_vdc,  Charger2.INV_adc FROM Charger2 WHERE (((Charger2.id) > (" & MyIDLast & ")));")

Id 是一个自动编号整数。此时,recordcount 属性为“-1”。当我直接从 Access Program 界面运行 Select 查询时,它会返回正确的数字。

感谢您提供任何帮助并深入了解为什么此表会出现此问题...RDK

【问题讨论】:

    标签: sql ms-access asp-classic


    【解决方案1】:

    如果记录集未完全加载,则记录计数返回 -1。

    当使用返回单个记录的聚合查询时,它通常是完全加载的。但是如果你过滤一个非索引列,它可能不会。

    如果您想可靠地使用.RecordCount,请先使用.MoveLast 来完全加载记录集。

    【讨论】:

    • 我在“Set Lastmyrecord...”语句之后添加了“lastmyrecord.movelast”,现在我收到此错误“行集不支持向后获取”
    • @RDK 您需要确保获取实际支持向前和向后移动的记录集,方法是更改​​连接属性(客户端光标),使用 Recordset.Open 而不是 Connection.Execute 或一个 ADODB 命令对象。 Connection.Execute 通常在不需要返回值时使用,并且几乎不能控制返回的内容
    • Select Count(*) From Query 不是推荐的记录计数策略
    • @ComputerVersteher 如果您只想要一个计数,那么可以。如果您想对记录集做进一步的事情(例如显示所有记录,或者如果计数大于 Y,则显示计数 + 第一个 X),那么不。阅读这个问题,我认为 OP 想要对记录集做更多的事情,而不仅仅是确定计数。
    • 这可能只是与您使用表格的方式有关。通常,这是一件好事,因为您加载表的方式允许您在不首先完全加载记录集的情况下使用它,这使得不需要整个记录集的操作更快。但由于您使用的是 .Execute,因此很难准确判断幕后发生的事情。
    猜你喜欢
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多