【问题标题】:ACCESS/VBA: can't get Dcount to work correctlyACCESS/VBA:无法让 Dcount 正常工作
【发布时间】:2011-06-03 08:11:12
【问题描述】:

这是我用来根据结果启用/禁用按钮(允许创建新修订版)的部分代码。

如果 dcount 返回 0,则表示下一个版本尚不存在(因此可以创建) 如果 dcount 返回 1,则表示下一个版本已经存在(因此按钮将被禁用)

DCount("index_rit", "t_données_rit", "[RITn°]=" & Me.RITn°.Value & " AND [Revision]=" & Me.Revision.Value + 1)

我的问题是,由于某种原因,即使一条记录对应于 dcount 中输入的值,它仍然返回 0。

我在没有 [] 字段的情况下使用 ant 进行了尝试。
我也尝试使用 * 而不是 index_rit...

我做错了什么?

【问题讨论】:

    标签: ms-access vba ms-access-2010


    【解决方案1】:

    知道了。 这是一个格式问题: RITn° 的形式是 xx-xx,所以我不得不这样写:

    "[RITn°]='" & Me.RITn°.Value & "' AND [Revision]=" & Me.Revision.Value + 1)
    

    (添加单引号)

    【讨论】:

    • .Value 属性是多余的,因为它是默认属性。但是,在您将值传递给具有定义 ByRef 的参数的函数/子例程的情况下,它可能很有用(即,使用 .Value 将传递 ByVal,尽管如此将用括号包围控件引用以在它之前强制评估传递给函数/子)。
    【解决方案2】:

    首先,DCount(和其他“D”函数)通常被认为有点拖累性能。尝试用这个快速功能替换它。您只需向它传递一个查询,它就会返回记录数

    Private Function GetRecordCount(strSearch as String) as Long
    Dim rst As ADODB.Recordset
    Dim RecCount As Long
    
    Set rst = New ADODB.Recordset
    
    With rst
       .ActiveConnection = CodeProject.Connection
       .CursorType = adOpenForwardOnly
       .LockType = adLockReadOnly
       .Source = strSearch
       .Open Options:=adCmdText
       if .EOF = true then
            RecCount=0
       else
            RecCount=.Collect(0)
       End If
    
       .Close
    End With
    
    GetRecordCount = RecCount
    
    Set rst = Nothing
    
    End Function
    

    这使用 ADO,但如果您只是使用访问表,则可以/应该使用 DAO,但这是另一个问题!

    【讨论】:

    • ADO 在 Access 中不是一个好主意。域聚合函数确实非常有用,除非您的数据库太大以至于您可能应该考虑另一个后端。 Access 被程序员以外的人大量使用,并且允许在不进行任何编码的情况下填充控件的选项是一个优势。
    • 我知道如果您只处理 JET 表,ADO 并不是最好的选择,因此我回答中的最后一句话说这可以/应该使用 DAO。我所有基于 JET 的程序都使用 DAO,只有当我使用其他数据源时,我才会使用 ADO。访问具有这些域功能非常有用,我有时会因为使用它们而感到内疚,但我只是想让 OP 意识到如果在大型表上使用它们是一个潜在的麻烦区域
    • 我知道这个选项,但它需要更多的行。我想让代码尽可能简单和简短(这里的性能不是问题,也没有那么多记录)感谢您展示“其他方式”:)
    • @Kevin Ross,同意,ADO 对其他数据源非常有用,甚至在使用 Jet 的 Access 之外(嘘!:))
    • 只需要记录计数时打开游标不是解决方案。只需执行 "SELECT COUNT(..." 并获取结果中的一个值。
    猜你喜欢
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 2017-11-06
    • 2011-09-06
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多