2014-04-10 38 views
2

我有兩個表Table1Table2。在Table1有列叫做FileIDTable2有列叫做FileID。現在FileID不是唯一的,所以在兩個表中都有一些行重複FileID。 我有一個Access中的表單,其中有一個從Table1調用GetDate的字段。 我需要的東西在VBA,如果你改變的形式(這是從Table1表)上GetDate一部分,那麼它應該與當前的日期和時間,這是Table2編輯,更新記錄與DAO.Recordset

我做了以下更新列Date辦法。但其更新只有Date的第一條記錄從Table2與當前時間,而不是第二個與FileID = 1FileID = 1有兩條記錄,在table2中,所以它應該更新2條記錄與當前日期而不是一條。 這是我的代碼。

Option Compare Database 

Private Sub GetDate_AfterUpdate() 
Dim dbs As DAO.Database 
Dim rst As DAO.Recordset 
' Dim rst2 As DAO.Recordset 


Set dbs = CurrentDb 
Set rst = dbs.OpenRecordset("SELECT [GetDate], [DATE] FROM Table1 INNER JOIN Table2 ON Table1.ID = Table2.ID2 where Table1.FileID = Table1.FileID", dbOpenDynaset) 
'Begin row processing 
Do While Not rst.EOF 
rst.Edit 
rst![Date] = Now 
rst.Update 
rst.MoveNext 
Exit Do 

Loop 



rst.Close 
Set rst = Nothing 


End Sub 

感謝您的幫助!

+0

代碼看起來很好,所以誤差必須在您用來設置記錄的查詢。你有沒有嘗試作爲一個查詢自己運行,並確保它返回兩個記錄?如果沒有,編輯它,直到它! – BFWebAdmin

+0

查詢從兩個表中返回整個集合記錄。我不需要。所以我的另一個問題是,我可以做一個查詢,從表單中讀取「FileID」字段。例如。我正在嘗試編輯窗體上的「GetDate」字段和當前記錄的「FileID」,可以這樣說。2 – user3473275

+1

是的,但我懷疑這是Google的工作,並且在查詢時玩了一會兒。但是,在這裏有一個奇怪的WHERE條件可能是一個起點:其中Table1.FileID = Table1.FileID將始終爲真,因此將返回所有記錄。如果這就是你想要的,那麼它是多餘的,應該被拿出來。如果這不是你想要的(正如我懷疑的那樣),那麼我猜想那就是你的錯誤所在。 – BFWebAdmin

回答

2

爲什麼你在movenext之後有一個退出,如果你想遍歷所有的記錄,那就不應該在那裏。

rst.eof在到達文件末尾時將退出循環。

你寫它的方式會在第一條記錄後退出。

Do While Not rst.EOF 
rst.Edit 
rst![Date] = Now 
rst.Update 
rst.MoveNext 
Exit Do 'This will exit loop after first record 
Loop 

做到這一點,而不是

Do 
rst.Edit 
rst![Date] = Now 
rst.Update 
rst.MoveNext 
Loop Until rst.EOF 
+0

我建議你使用'Do Until rst.EOF''' Loop來代替,因爲如果記錄是空的,它會在第一次執行循環時產生錯誤。 –