MS Access:单击按钮将表单数据保存到2个表

时间:2013-02-11 16:53:16

标签: ms-access ms-access-2010

我正在创建一个包含2个表(Assets和AssetMovements)和一个表单(Assets)的资产管理数据库。 我需要保留每个资产移动的记录,因此每次将新资产添加到资产表或修改现有资产记录的“位置”值时,记录都应保存到AssetMovements表中。 AssetMovements表就是用来记录交易的。

我怎样才能做到这一点?我会感激任何我能得到的指示,或者是否有人可以提出更好的方法来保持运动记录。 谢谢。

2 个答案:

答案 0 :(得分:2)

看到您正在使用Access 2010,这似乎是Data Macro的一个好借口。即使数据从MS Access外部更新,数据宏也会运行。

我创建了一个Assets表和一个AssetMovements表,AssetMovements表有一个字段ActionDate,其默认值为Now(),用于设置操作发生的日期。

Assets表上需要两个宏:

after insert after update

这就是你需要做的,如下所示。

添加或更改记录后,数据会自动记录在AssetMovements表中:

after adding or changing a record

您可以运行一些示例VBScript ...

strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=z:\docs\demo.accdb" 

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

cn.Open strCon
sSQL="INSERT INTO Assets (Asset,Location) Values ('Printer',7)"
cn.Execute sSQL

sSQL="Update Assets Set Location=5 Where Asset='Printer'"
cn.Execute sSQL

要查看这也会更新AssetMovements表。

After VBScript

还有一个LogEvent数据宏,可以更完整地记录更改。

答案 1 :(得分:1)

该按钮具有单击时触发的单击事件。使用VBA编写单击按钮时执行的一些代码 单击该按钮后,您将记录保存到资产。然后使用查询将该记录复制到AssetMovements表。所以,代码看起来像这样:

Dim OldLocation As String    

Private Sub CmdSave_Click()
   DoCmd.RunCommand acCmdSaveRecord
End Sub

Private Sub Form_AfterUpdate()
   Dim strSQL
   If OldLocation <> Location.Value Then
      strSQL = "INSERT INTO AssetMovements SELECT T1.* FROM Assets WHERE Assets.ID = "
      strSQL = strSQL & Me.ID
      CurrentDb.Execute strSQL
   End If
End Sub

Private Sub Form_BeforeUpdate(Cancel As Integer)
   OldLocation = Me.Location.OldValue
End Sub

Private Sub Form_Current()
   OldLocation = Me.Location.Value
End Sub

然后,这将使用唯一ID(我在AssetID中猜到)将表单的当前记录复制到AssetMovement表。