我正在创建一个包含 2 个表(Assets 和 AssetMovements)和一个表单(Assets)的资产管理数据库。我需要保留每次资产移动的记录,因此每次将新资产添加到 Assets 表或修改现有资产记录的“位置”值时,都应将记录保存到 AssetMovements 表中。AssetMovements 表只是用来记录交易。
我怎样才能做到这一点?我会很感激我能得到的任何指示,或者如果有人能提出更好的方法来保存运动记录。谢谢你。
我正在创建一个包含 2 个表(Assets 和 AssetMovements)和一个表单(Assets)的资产管理数据库。我需要保留每次资产移动的记录,因此每次将新资产添加到 Assets 表或修改现有资产记录的“位置”值时,都应将记录保存到 AssetMovements 表中。AssetMovements 表只是用来记录交易。
我怎样才能做到这一点?我会很感激我能得到的任何指示,或者如果有人能提出更好的方法来保存运动记录。谢谢你。
看到您使用的是 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 表。
还有一个 LogEvent 数据宏,用于更完整地记录更改。
该按钮有一个单击事件,当您单击它时会触发该事件。使用 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 表中。