2014-04-10 40 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来代替,因为如果记录是空的,它会在第一次执行循环时产生错误。 –