2

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

我怎样才能做到这一点?我会很感激我能得到的任何指示,或者如果有人能提出更好的方法来保存运动记录。谢谢你。

4

2 回答 2

3

看到您使用的是 Access 2010,这看起来像是数据宏的一个很好的借口即使从 MS Access 外部更新数据,数据宏也会运行。

我创建了一个 Assets 表和一个 AssetMovements 表,AssetMovements 表有一个带有默认值 Now() 的字段 ActionDate,它设置动作发生的日期。

您将需要资产表上的两个宏:

插入后 更新后

这就是您需要做的所有事情,如下所示。

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

添加或更改记录后

您可以运行一个小示例 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 表。

VBScript 之后

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

于 2013-02-23T19:43:02.337 回答
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 表中。

于 2013-02-11T18:41:59.043 回答