2013-02-11 59 views
0

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

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

+0

其编程您使用的语言???? – 2013-02-12 07:14:12

+0

嗨NidhishKrishnan,我正在使用Microsoft Access。 – 3ph 2013-02-12 10:52:47

回答

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表。

+0

谢谢汤姆。如何确保它只复制“位置”值已更改的记录? – 3ph 2013-02-11 22:31:11

+0

将Location.Value与Location.OldValue进行比较。如果不同,则复制记录。 – 2013-02-12 00:45:53

+0

谢谢汤姆。你介意告诉我怎么做比较?我是这个绝对的新手。 – 3ph 2013-02-12 06:35:17

1

看到您正在使用Access 2010,这看起来像是一个很好的理由Data Macro即使从MS Access外部更新数据,数据宏也将运行。

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

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

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数据宏。