2

2 つのテーブル (Assets と AssetMovements) と 1 つのフォーム (Assets) を持つ資産管理データベースを作成しています。すべての資産の移動の記録を保持する必要があるため、新しい資産が資産テーブルに追加されるか、既存の資産レコードの「場所」の値が変更されるたびに、レコードを AssetMovements テーブルに保存する必要があります。AssetMovements テーブルは、トランザクションを記録するためのものです。

どうすればこれを達成できますか?私が得ることができる指針に感謝するか、誰かが移動記録を保持するためのより良い方法を提案できるかどうか. ありがとうございました。

4

2 に答える 2

3

Access 2010 を使用しているのを見ると、これはデータ マクロの良い言い訳のように見えます。データ マクロは、データが MS Access の外部から更新された場合でも実行されます。

Assets テーブルと AssetMovements テーブルを作成しました。AssetMovements テーブルには、アクションが発生した日付を設定するデフォルト値 Now() を持つ ActionDate フィールドがあります。

Assets テーブルには 2 つのマクロが必要です。

挿入後 更新後

以下に示すように、必要な作業はこれだけです。

レコードを追加または変更すると、データは 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 テーブルも更新されることがわかります。

VBScript の後

変更をより完全に記録するための LogEvent データ マクロもあります。

于 2013-02-23T19:43:02.337 に答える
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テーブルにコピーされます。

于 2013-02-11T18:41:59.043 に答える