2013-07-10 82 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

相關問題