【问题标题】:Select the record of a given id with the highest timestamp using DAO使用 DAO 选择具有最高时间戳的给定 id 的记录
【发布时间】:2012-05-21 08:53:28
【问题描述】:

如何在记录集上使用 DAO 执行以下操作

SELECT TOP 1 * FROM foo WHERE id = 10 ORDER BY timestamp DESC

使用 SetCurrentIndex 您只能使用一个索引,否则使用 idtimestamp 并选择第一个索引会起作用。

【问题讨论】:

    标签: c++ ms-access dao recordset


    【解决方案1】:

    我不知道你想要什么。

    Dim rs As DAO.Recordset
    Dim db As Database
    
    Set db = CurrentDB
    
    sSQL = "SELECT TOP 1 * FROM foo WHERE id = 10 ORDER BY timestamp DESC"
    Set rs = db.OpenRecordset(sSQL)
    

    查找不适用于所有记录集。这将起作用:

    Set rs = CurrentDb.OpenRecordset("select * from table1")
    rs.FindFirst "akey=1 and atext='b'"
    
    If Not rs.EOF Then Debug.Print rs!AKey
    

    这不会:

    Set rs = CurrentDb.OpenRecordset("table1")
    rs.FindFirst "akey=1 and atext='b'"
    

    【讨论】:

    • 我的意思是如果我已经有一个我必须使用的记录集。创建我自己的不是问题。但是在这里我在一个巨大的系统中有一个巨大的,所以我不想再次查询数据库来创建一个新的。相反,我想知道如何使用 Seek 或类似的东西在现有记录集上执行此操作。
    • 我认为对代码的需求有点多余。想象一下有一个数据记录集。它来自一个至少包含 idtimestamp 的表。您如何对其执行与上述 sql 查询相等的 Seek()
    • 发布代码的目的是让我看看你有什么样的记录集。我发布的代码的要点是,它表明您没有理由使用 seek 或 find 当简单地打开一个新记录集变得如此快速和容易时。我添加了一些注释。
    猜你喜欢
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 2018-07-19
    • 2018-04-20
    相关资源
    最近更新 更多