【问题标题】:MS Access Macro to count records matching multiple criteriaMS Access 宏来计算匹配多个条件的记录
【发布时间】:2013-07-10 09:18:59
【问题描述】:

我有一个问题和操作表,是一对多的关系。

我有一个 OIssues 表单,它允许用户浏览每个问题。它有一个嵌入式子表单,显示与该问题相关的操作,并且有执行宏的命令按钮,允许用户快速向子表单添加操作。

但是,如果用户尝试添加针对该问题已经存在的操作,我希望能够提示用户。

因此,我认为我需要将 VBA 添加到命令按钮单击,该按钮会检查 IssueID 1234 存在多少记录并且属于“更改请求”类型。如果大于 1,则提示用户。但是我找不到正确的命令!

非常感谢任何帮助。

【问题讨论】:

    标签: ms-access count ms-access-2007 criteria


    【解决方案1】:

    按钮后面的 VBA 代码。

    Dim db as database
    Dim rec as recordset
    
    set db = currentDb
    set rec = db.openrecordset("Select IssueID from YourTableName WHERE IssueID = " & Me.IssueID & " AND Type = '" & Me.Type & "'")
    
    X = 0
    
    rec.movefirst
    If rec.eof = False then
    
    rec.movelast
    X = rec.recordcount
    EndIf
    
    
    If X > 1 then
      msgbox "This already exists"
    EndIf
    

    编辑:我没有具体看到您的表格布局是什么,因此您可能必须在 OpenRecordSet 中进行某种联接,而不仅仅是直接“从 YourTableName 中选择 IssueID”。

    【讨论】:

    • 这看起来不错 - 我有点不知道该放在哪里。如果我单击按钮将第一个操作添加到子表单,那么它会出错,因为没有对 rec.movefirst rec.movelast 的操作。可以请教吗?
    • 我更新了代码,看看是否有帮助。本质上,您必须先检查 rec 是否没有记录,否则您将在 MoveLast 语句上收到错误。
    • 它在下一行失败,说“参数太少 - 预期为 1”。 set rec = db.openrecordset("Select IssueID from YourTableName WHERE IssueID = " & Me.IssueID & " AND Type = '" & Me.Type & "'") –
    • 我只是假设这些是您的控件的名称(IssueID 和 Type)。如果没有,请将它们更改为您的实际文本框名称。此外,YourTableName 是 YOURTABLENAME。相应地改变它。并且不要使用 COUNT 函数,已知它是不准确的。
    • 感谢您迄今为止的帮助,约翰尼。我实际上确实更改了控件的名称,只是将错误的代码粘贴到 cmets 框中。实际代码见下文。注意我已经用一个简单的文本字符串替换了其中一个控件,因为这个文本字符串在我的表单中不存在。 Set rec = db.OpenRecordset("Select Arrangement from Actions WHERE Arrangement = " & Me.arrangement_id & " AND Category = 'Third Party'")
    【解决方案2】:
    A slightly better answer would be to use the COUNT function for example :-
    
    Dim db as database
    Dim rec as recordset
    dim cnt as long
    
    set db = currentDb
    set rec = db.openrecordset("Select count(IssueID) from YourTableName WHERE IssueID = " & Me.IssueID & " AND Type = '" & Me.Type & "'")
    
    cnt=0
    if not rec.eof then cnt=rec.fields(0)
    
    If cnt > 0 then msgbox "This already exists"
    

    【讨论】:

    • 它在下一行失败,说“参数太少 - 预期为 1”。 set rec = db.openrecordset("Select IssueID from YourTableName WHERE IssueID = " & Me.IssueID & " AND Type = '" & Me.Type & "'")
    猜你喜欢
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多