2013-02-11 66 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數據宏。