使用 DAO.Recordset 编辑、更新记录

Posted

技术标签:

【中文标题】使用 DAO.Recordset 编辑、更新记录【英文标题】:Edit, update record with DAO.Recordset 【发布时间】:2014-05-23 13:24:33 【问题描述】:

我有两张桌子Table1Table2。在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.ID2WHERE 子句表达式将始终为真,只是在浪费时间。 【参考方案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 运行查询

DAO.Recordset MySQL 后端在字符串周围强制使用单引号

使用 DAO 在 Ms Access 中打开记录集时使用 With...End

VBA DAO.Recordset 在尝试关闭它时为空或未设置 - 但我事先检查它是不是为空