使用 DAO.Recordset 编辑、更新记录
Posted
技术标签:
【中文标题】使用 DAO.Recordset 编辑、更新记录【英文标题】:Edit, update record with DAO.Recordset 【发布时间】:2014-05-23 13:24:33 【问题描述】:我有两张桌子Table1
和Table2
。在Table1
中有一个名为FileID
的列,Table2
有一个名为FileID
的列。现在FileID
不是唯一的,因此在某些行中FileID
在两个表中都重复了。
我在 Access 中有一个表单,其中有一个名为 GetDate
的字段来自 Table1
。
我需要 vba 中的一些内容,如果您对表单上的 GetDate
部分(来自Table1
表)进行更改,那么它应该使用Table2
中的当前日期和时间更新列Date
我是按照以下方式完成的。但它只更新Date
From Table2
与当前时间的第一条记录,而不是FileID = 1
的第二条记录。
FileID = 1
有两条记录,在table2
中,所以它应该更新两条当前日期的记录,而不是一条。
这是我的代码。
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
感谢您的帮助!
【问题讨论】:
代码看起来没问题,所以错误一定在您用来设置记录集的查询中。您是否尝试过将其作为查询单独运行并确保它返回两条记录?如果没有,请编辑它直到它有! 查询返回两个表的全部记录。我不需要。所以我的另一个问题是,我可以进行一个可以从表单中读取“FileID”字段的查询吗?例如。我正在尝试编辑表单上的“GetDate”字段,而当前记录的“FileID”是 2。 是的,但我怀疑这是 Google 的工作,需要花一点时间处理查询。但是,您确实有一个奇怪的 WHERE 条件,这可能是一个起点:其中 Table1.FileID = Table1.FileID 将始终为真,因此将返回所有记录。如果这就是你想要的,那么它是多余的,应该被删除。如果这不是您想要的(我怀疑),那么我猜这就是您的错误所在。 您的查询SELECT [GetDate], [DATE] FROM Table1 INNER JOIN Table2 ON Table1.ID = Table2.ID2 where Table1.FileID = Table1.FileID
只需为SELECT [GetDate], [DATE] FROM Table1 INNER JOIN Table2 ON Table1.ID = Table2.ID2
; WHERE
子句表达式将始终为真,只是在浪费时间。
【参考方案1】:
为什么你在 movenext 之后有一个 exit do,如果你想遍历所有记录,那不应该在那里。
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
【讨论】:
我建议你改用Do Until rst.EOF
[...] Loop
,因为如果记录是空的,它会在第一次执行循环时引发错误。以上是关于使用 DAO.Recordset 编辑、更新记录的主要内容,如果未能解决你的问题,请参考以下文章
使用 FindFirst 时出现 DAO RecordSet 错误 3251
访问:使用从另一个查询中选择的 DAO.recordset 运行查询
DAO.Recordset MySQL 后端在字符串周围强制使用单引号