2017-08-26 76 views
-3

如果已經得到解答,我表示歉意,但是我現在真的沒有時間徹底搜索。部分原因是因爲我在爲工作而努力。我從手機上詢問,所以我不能截圖等。通知更新記錄的問題

我有一個建立在Access 2016中的數據庫,並且有問題。

我有一個表格根據輸入的內容更新表格,我希望查看錶中是否有實際更新的內容,而不必打開查詢和滾動結果。

我有一個宏設置爲單擊'update'按鈕時運行,它根據特定字段的值運行不同的查詢。 I.E. 「如果字段= 6,runquery update6」

我叫RecordsChanged VBA的事情,是從字面上寫了一個函數只是

[ AffectedRows = CurrentDb.RecordsAffected MSGBOX CStr的(AffectedRows)& 「記載改變」 ]

這是我從這裏得到: How to show how many records were updated by an update query?

要退出散漫,消息框顯示,但總是說0的記錄,即使之前有WA一個人改變了。在掛接調用RecordsChanged的窗體上的按鈕的宏的末尾有一個RunCode操作。

任何人都可以給我建議或解釋?

+0

當你說「runquery update6」時,你的意思是「update6」是Access數據庫中保存的更新查詢的名稱嗎? –

+0

Gord - 是的。不是字面的名字,但那是我的意思。它基本上在宏中設置爲:if certain_field = 6 then runquery update6 – D34DL0CK

+0

我已經玩了一下,我認爲問題是要麼我沒有正確設置CurrentDb,要麼在它詢問是否任何記錄都已更新,查詢技術性完成。嗯... – D34DL0CK

回答

1

據我所知,VBA中的DAO.Database.RecordsAffected屬性只適用於由DAO.Database.Execute方法運行的SQL查詢。既然你是無論如何從調用您的宏VBA函數,你可能有更好的運氣使用DAO.QueryDef對象中運行VBA查詢和使用RecordsAffected屬性,例如,

Public Function RunMyUpdateQuery(queryName As String) 
    Dim cdb As DAO.Database 
    Set cdb = CurrentDb 
    Dim qdf As DAO.QueryDef 
    Set qdf = cdb.QueryDefs(queryName) 
    qdf.Execute dbFailOnError 
    Dim affected As Long 
    affected = qdf.RecordsAffected 
    Set qdf = Nothing 
    Set cdb = Nothing 
    MsgBox affected & " record(s) affected." 
End Function 

其中宏會做

RunCode RunMyUpdateQuery("update6") 
+0

我即將離開工作,所以我會嘗試明天的第一次機會。爲了澄清,我會在訪問本身中編寫查詢(我對SQL很好)將其保存爲「update6」,然後或多或少地複製/粘貼您提供給VBA的內容?我認爲我的混淆來自VB的語法。對於長時間的評論感謝,並感謝您的答案。 – D34DL0CK

+0

答案是基於假設你已經有一個名爲「update6」的保存更新查詢(參考:我對該問題的評論)。如果你還沒有保存的查詢,那麼你並不需要創建一個;你也可以讓你的VBA代碼'cdb.Execute'爲SQL,然後使用'cdb.RecordsAffected'來獲得計數。 –

+0

對不起,遲到的迴應。我一直都很忙。 謝謝你的回答。我稍微修改了一下,但那是我遇到的問題,而不是使用querydef對象recordsaffected。奇蹟般有效。 – D34DL0CK