MS访问:在点击按钮保存表单数据2个表(MS Access: Save form data to 2

2019-07-19 17:59发布

我创建2个表(资产和AssetMovements)和一种形式(资产)的资产管理数据库。 我需要保持每一项资产运动的记录,所以每一个新的资产加入到资产表或现有资产记录的“位置”值时间被修改,记录应保存至AssetMovements表。 该AssetMovements表仅仅是有记录的交易。

我怎样才能做到这一点? 我将不胜感激任何指针,我可以得到,或者,如果任何人都可以建议保持运动记录的更好方法。 谢谢。

Answer 1:

看到你正在使用Access 2010中,这看起来像一个很好的借口的数据宏当数据从MS Access之外的更新数据宏仍会继续运行。

我创建了一个资产表和AssetMovements表,该表AssetMovements有一个默认值的字段ActionDate NOW(),其中规定动作发生的日期。

您需要在资产表中的两个宏:

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

添加或更改记录之后,数据被自动记录在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数据宏。



Answer 2:

该按钮有当你点击它被发射的单击事件。 使用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表。



文章来源: MS Access: Save form data to 2 tables at the click of a button