【问题标题】:Adding and new record of data to a table from a toggle button click通过单击切换按钮向表中添加和新记录数据
【发布时间】:2013-11-06 21:48:38
【问题描述】:

我想为我创建的表单创建审核跟踪,记录用户在此表单上运行某些操作时的记录。

该表单名为“Jobs”,上面有许多切换开关。

当用户点击一个切换开关打开/关闭时,我想在一个名为“历史”的表中自动记录一些信息。

“历史”表将包含以下字段:

  • HistoryId(主键;自动编号)
  • JobId(将把它作为“工作”表单中当前记录的外键)
  • 用户名(将通过CreateObject("WScript.Network").UserName 获取)
  • DateClicked(将通过Now() 获得此信息)
  • ToggleButtonName(将通过切换按钮的.Caption 属性获取此名称)
  • ToggleOnOff(将通过切换按钮的.Value 属性获取此信息)

以下是我尝试过的一些测试代码。

出于测试目的,我只在 History 表中填充了 JobID 外键字段,并创建了一个字段 HistoryDe​​sc 只是为了查看是否可以获得其他值记录在案。

请注意,我使用“工作”表中的字段 Ad_PerfChecks 来存储 togAd_PerfChecks 切换按钮的切换状态以供以后使用。

Public Sub RefreshSubData()

    tblHistory_sub.Form.Requery

End Sub

Private Sub togAd_PerfChecks_Click()

    If Me.Ad_PerfChecks = 0 Or IsNull(Me.Ad_PerfChecks) Then

        Dim rs1 As Recordset
        Set rs1 = CurrentDb.OpenRecordset("tblHistory")

        rs1.AddNew
        rs1!JobID = Me.JobID
        rs1!HistoryDesc = "Ad_PerfChecks was turned ON"
        rs1.Update

        Set rs1 = Nothing

        RefreshSubData

        Me.togAd_PerfChecks.Value = True
        Me.togAd_PerfChecks.PressedColor = RGB(34, 177, 76)
        Me.Ad_PerfChecks = 1

    ElseIf Me.Ad_PerfChecks = 1 Then

        Dim rs2 As Recordset
        Set rs2 = CurrentDb.OpenRecordset("tblHistory")

        rs2.AddNew
        rs2!JobID = Me.JobID
        rs2!HistoryDesc = "Ad_PerfChecks was turned OFF"
        rs2.Update

        Set rs2 = Nothing

        RefreshSubData

        Me.togAd_PerfChecks.Value = False
        Me.togAd_PerfChecks.BackColor = RGB(36, 36, 36)
        Me.Ad_PerfChecks = 0

    End If

End Sub

在大多数情况下,这工作正常,除了第一次单击在“历史”表中创建了一条记录,由于某种原因没有 JobId 外键。之后,每次单击都会使用我想要的数据创建一条新记录。

以下是单击切换按钮 4 次时“历史记录”表中的示例输出:

| HistoryId | JobId |           History Desc           |
|     1     |       |     Ad_PerfChecks was turned ON  |
|     2     |   1   |     Ad_PerfChecks was turned OFF |
|     3     |   1   |     Ad_PerfChecks was turned ON  |
|     4     |   1   |     Ad_PerfChecks was turned OFF |

任何想法如何确保第一次点击获得 JobID 外键?也让我知道是否有更好的方法来解决这个问题.. 有点接近我的 VBA 知识的边缘。

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    我想我可以自己回答这个问题。在我的测试数据中,我有代码在添加历史记录之后更新 Jobs 记录,因此 Jobs 记录没有'没有完成更新,我想还没有收到它的自动编号。

    如下移动代码似乎可以解决问题:

    Private Sub togAd_PerfChecks_Click()
    
        If Me.Ad_PerfChecks = 0 Or IsNull(Me.Ad_PerfChecks) Then
    
            Me.togAd_PerfChecks.Value = True
            Me.togAd_PerfChecks.PressedColor = RGB(34, 177, 76)
            Me.Ad_PerfChecks = 1
    
            Dim rs1 As Recordset
            Set rs1 = CurrentDb.OpenRecordset("tblHistory")
    
            rs1.AddNew
            rs1!JobID = Me.JobID
            rs1!HistoryDesc = "Ad_PerfChecks was turned ON"
            rs1.Update
    
            Set rs1 = Nothing
    
            RefreshSubData
    
        ElseIf Me.Ad_PerfChecks = 1 Then
    
            Me.togAd_PerfChecks.Value = False
            Me.togAd_PerfChecks.BackColor = RGB(36, 36, 36)
            Me.Ad_PerfChecks = 0
    
            Dim rs2 As Recordset
            Set rs2 = CurrentDb.OpenRecordset("tblHistory")
    
            rs2.AddNew
            rs2!JobID = Me.JobID
            rs2!HistoryDesc = "Ad_PerfChecks was turned OFF"
            rs2.Update
    
            Set rs2 = Nothing
    
            RefreshSubData
    
        End If
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2021-04-17
      • 2017-09-23
      • 1970-01-01
      • 2018-09-17
      • 1970-01-01
      • 1970-01-01
      • 2012-12-19
      • 2016-09-19
      • 1970-01-01
      相关资源
      最近更新 更多