如何阻止MS访问覆盖以前的记录?

时间:2018-07-19 13:30:08

标签: access-vba ms-access-2016

如何停止访问2016以停止擦除以前保存的记录中的数据?

任何改进/建议都将不胜感激!

这是我有限的知识所能做的最好的事情

有以下字段:Text7,ID,UPK,CheckTime。 要保存回表的数据只是每个扫描项目的检查时间字段。

表格:

-ID自动编号| -UPK号| -CheckTime日期/时间| -Text7(是唯一的未绑定控件)

我需要能够做到这一点:

  1. 在Text7上扫描值
  2. 更新后,在表中搜索该值(已存在),请参见下面的Text7_AfterUpdate事件
  3. Text7_AfterUpdate事件会将数据填充到表单中
  4. 自动计算Now()并将其添加到CheckTime字段(表中此字段为空)
  5. 保存记录
  6. 清除所有txtbox
  7. 将焦点重新放在Text7上
  8. 移动到最后一个空记录,准备接收下一次扫描

**编辑谢谢@ Jiggles32 **

注意:对于我的知识水平而言,废弃了过于繁琐的VBA代码,尝试了@Minty的建议并进行了查询

1 个答案:

答案 0 :(得分:0)

我想我现在看得更清楚了。看起来您希望保存发生在新记录上,而不是已经存在的记录上。

这是导致该问题的原因:

SELECT * 
 FROM ALL_VIEWS 
 WHERE UPPER(TEXT_VC) LIKE '%FOO%';

基本上,这部分代码是查找记录的第一个实例,该记录包含rs.FindFirst "[UPK]=" & Text7 If rs.NoMatch Then MsgBox "Sorry, no such record '" & Text7 & "' was found.", _ vbOKOnly + vbInformation Else Me.Recordset.Bookmark = rs.Bookmark End If rs.Close 中的UPK值,并将该记录设置为表单上的当前Recordset.Bookmark信息。因此,如果表中已经存在具有相同Text7的值,它将覆盖该值。

我敢肯定您可以通过以下方式实现您想要的结果:

UPK

您仍然需要在Dim ctrl As Control ... 'Update CheckTime to current time (for current UPK), save, and close rs.AddNew rs!UPK = Me.Text7 rs!CheckTime = Now() rs.Update rs.Close Set rs = Nothing 'Clear all text boxes For Each ctrl In Me.Controls If (ctrl.ControlType = acTextBox) Then ctrl.Value = Null End If Next ctrl 'Reset focus on Text7 Me.Text7.SetFocus 部分中设置记录集等。