2013-07-10 40 views
0

我有一个问题和操作的表,在一对多的关系。MS Access宏来计数匹配多个条件的记录

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

但是我希望能够提示用户,如果他们试图添加一个已经存在的问题的行动。

因此,我想我需要添加VBA到命令按钮点击它检查有多少条记录存在IssueID 1234和类型“变更请求”。如果超过1,则提示用户。但是我无法找到正确的命令来做到这一点!

任何帮助非常感谢。

回答

0

按钮后面的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 

编辑:我没有看到你的specificly表的布局是什么,所以你可能需要做某种凑OpenRecordSet而不仅仅是一个直接从“选择YourTableName IssueID”的。

+0

这看起来不错 - 我有点困惑,把它放在哪里。如果我点击按钮将第一个动作添加到子窗体,那么它错误,因为没有任何动作rec.movefirst rec.movelast。你能给些建议么? – edbyford

+0

我更新了代码,看看是否有帮助。实质上,您必须检查rec是否先没有记录,否则您将在MoveLast语句中发生错误。 –

+0

它在下面一行中失败,说“参数太少 - 预期为1”。 set rec = db.openrecordset(“从YourTableName中选择IssueID WHERE IssueID =”&Me.IssueID&“AND Type ='”&Me.Type&“'”) - – edbyford

-1
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" 
+0

它在下面一行失败,说“参数太少 - 预期为1”。 set rec = db.openrecordset(“从YourTableName中选择IssueID WHERE IssueID =”&Me.IssueID&“AND Type ='”&Me.Type&“'”) – edbyford

相关问题