问题:
我在一个ACCESS程序的数据窗口中,首先在窗口中的字段文本框中修改了字段值,然后想通过如下代码在当前的表中新增一条记录:
DoCmd.RunCommand acCmdSelectRecord --选择当前记录
DoCmd.RunCommand acCmdCopy --复制当前记录
DoCmd.RunCommand acCmdPasteAppend --追加记录
但是发现acCmdCopy其实并不是复制当前记录,而是复制当前选择的文本框内容,所以要出错,不知道如何解决?应该是什么DoCmd.RunCommand acCmd********?
如果直接用DoCmd.RunCommand acCmdSaveRecord,就直接覆盖当前记录了,不是我想要的。
我是想在任意记录上进行编辑,然后保存成一条新的记录,同时原记录没有发生改变。
回答:
客户的要求往往非常怪异
Private Sub Command4_Click()
Dim strA As String
strA = Me.FIELD1.Value
If Me.Dirty = True And Me.NewRecord = False Then
DoCmd.RunCommand acCmdUndo
End If
DoCmd.GoToRecord , , acNewRec
Me.FIELD1.Value = strA
End Sub
或者
Private Sub Command5_Click()
If Me.Dirty = True And Me.NewRecord = False Then
DoCmd.RunCommand acCmdSelectRecord --选择当前记录
DoCmd.RunCommand acCmdCopy --复制当前记录
DoCmd.RunCommand acCmdUndo
DoCmd.RunCommand acCmdPasteAppend --追加记录
End If
End Sub
可以使用 Dirty 属性来决定当前记录自从上次保存之后是否修改过。如果记录已保存,Microsoft Access 将 Dirty 属性设置为 False;如果用户更改记录,则该属性将设置为 True。
示例
以下示例在数据更改时将 btnUndo 按钮设为有效。UndoEdits( ) 子程序从文本框控件的 AfterUpdate 事件中调用。单击有效的 btnUndo 按钮会使用 OldValue 属性还原控件值。
Sub UndoEdits()
If Me.Dirty Then
Me!btnUndo.Enabled = True -- Enable button.
Else
Me!btnUndo.Enabled = False -- Disable button.
End If
End Sub
Sub btnUndo_Click()
Dim ctlC As Control
-- For each control.
For Each ctlC in Me.Controls
If ctlC.ControlType = acTextBox Then
-- Restore Old Value.
ctlC.Value = ctlC.OldValue
End If
Next ctlC
End Sub
联系客服