我有2個子程序在下面。2部分AfterUpdate()子例程不工作
我有一個由最終用戶更新的表單。在更新表格中的Me.ID
字段後,它會觸發子ID_AfterUpdate
。這部分是成功的。
然後我想要觸發一個SQL更新查詢updateReportFlag
,它用特定的值標記該記錄。這部分不起作用。有人能告訴我爲什麼嗎?我在初始更新後檢查Input_Table.[ReportFlag]
字段,它是NULL,所以理論上第二個子應該工作。
這裏是我的代碼:
Private Sub ID_AfterUpdate()
Dim db As Database
Set db = CurrentDb
Dim rs As Recordset
Set rs = db.OpenRecordset("SELECT Customer.[Customer Name] " _
& "FROM Customer " _
& "WHERE Customer.[ID] = '" & Me.ID & "'")
If (rs.RecordCount <> 0) Then
Me.txtCustomerName = rs![Customer Name]
updateReportFlag ' TRIGGERS THE UPDATE IN THE NEXT SUBROUTINE
Else
MsgBox ("Invalid ID")
End If
End Sub
Private Sub updateReportFlag()
DoCmd.RunSQL "UPDATE Input_Table " _
& "SET Input_Table.[ReportFlag] = ""Report1"" " _
& "WHERE Input_Table.[ReportFlag] IS NULL "
End Sub
編輯 - 在這裏是作爲窗體的記錄源代碼。注意它不是選擇Input_Table。[ReportFlag])字段,但表中包含它。這就是爲什麼我的sub updateReportFlag
中的UPDATE查詢不更新表單,而是更新提供表單的表。不確定這是否相關。
SELECT Input_Table.[ID], Input_Table.[Customer Name] FROM Input_Table
WHERE (((Input_Table.[ReportFlag])="Report1"));
編輯2 - 我是玩這個四周,發現如果你輸入多個Me.ID
值的查詢工作。第一次進入後,沒有任何更新。第二次輸入後,第一個輸入被更新。看起來在UPDATE查詢被觸發之前,記錄實際上並沒有被提交到表中。在運行UPDATE查詢之前是否有某種方法可以讓記錄提交?
任何錯誤?你是否瀏覽了代碼?順便說一句,從命令中分離sql字符串並使用.Execute針對數據庫的實例幾乎總是更好一些http://stackoverflow.com/questions/11213892/whats-the-difference-between-docmd-setwarnings-and -currentdb-execute/11213943#11213943 – Fionnuala
沒有錯誤。我將'updateReportFlag'更改爲'Set db = CurrentDB db.Execute sSQL,dbFailOnError'就像您所建議的那樣,但它仍未執行更新。我瀏覽了代碼,它正在處理所有必需的代碼塊。我昨天沒有提到的一件事是,表單使用查詢來顯示其數據 - 請參閱主文章中的編輯。雖然我不明白爲什麼這將是相關的,因爲它是擊中表我運行查詢對子'updateReportFlag' –
請參閱編輯2 - 我發現了一些奇怪的行爲 –