我正在创建一个包含2个表(Assets和AssetMovements)和一个表单(Assets)的资产管理数据库。 我需要保留每个资产移动的记录,因此每次将新资产添加到资产表或修改现有资产记录的“位置”值时,记录都应保存到AssetMovements表中。 AssetMovements表就是用来记录交易的。
我怎样才能做到这一点?我会感激任何我能得到的指示,或者是否有人可以提出更好的方法来保持运动记录。 谢谢。
答案 0 :(得分:2)
看到您正在使用Access 2010,这似乎是Data Macro的一个好借口。即使数据从MS Access外部更新,数据宏也会运行。
我创建了一个Assets表和一个AssetMovements表,AssetMovements表有一个字段ActionDate,其默认值为Now(),用于设置操作发生的日期。
Assets表上需要两个宏:
这就是你需要做的,如下所示。
添加或更改记录后,数据会自动记录在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数据宏,可以更完整地记录更改。
答案 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表。