所以我有一个基于表格的访问表单。表单旁边有一个颜色列表和一个是/否复选框。如果用户标记了复选框,然后单击一个按钮,我希望msgbox显示为显示标记复选框旁边的所有颜色。这是我目前拥有的代码,如果我第二次单击该按钮,它就不会运行。它有时也只显示第一种颜色并且通常是错误的。
表格看起来像这样
红色x
蓝
绿色x
黄x
代码看起来像这样
private sub command5_click()
dim rs as dao.recordset
set rs=me.recordsetclone
rs.movefirst
do while not rs.eof
if rs!checkboxes = true then
msgbox rs!color
end if
rs.movenext
loop
set rs=nothing
end sub
答案 0 :(得分:0)
您需要在command5_Click的顶部添加Me.Dirty = False
。重新记录记录集是过度的 - 你会丢失你的滚动位置和你当前的记录。
当您有连续表单时,当焦点从当前记录移动到另一个记录时,数据将写入数据库。将焦点移动到页眉或页脚中的控件时, 不会发生 。这是设计,因为它是一个有用的功能。原因如下:
假设您的数据库中有第3个字段,这是一个名为“essay”的文本字段,您可以在其中撰写关于颜色的10行文章。该字段太大,无法在表单的连续部分显示,因此您将绑定的文本框添加到表单页脚。当您在颜色记录中上下移动时,当前颜色的文章将显示在表单的底部。 并且可以编辑 。当您单击“论文”文本框时,当前记录仍在编辑中。当前记录可以在页眉,细节和页脚中具有绑定控件,并且任何这些位置的编辑都将同时写入DB。
当您将焦点移动到 未绑定 控件(例如command5)时,它没有什么不同。目前的记录仍然是当前的记录,尽管它的绑定控件当前都没有关注。
每当您希望当前记录保持当前记录,但强制将其编辑内容写入数据库时,您使用Me.Dirty = False
。
至于为什么command5只在你第一次点击它时才有效?我不知道!