有没有办法在 Access 的事务中使用裸选择和更新?

问题描述

这是我的全功能代码,这段代码完全可以完成它需要做的事情,并且可能是唯一有效的解决方案,但我认为必须有更好的方法来做到这一点:

Dim sqlAccounts As String
Dim sqlDevice As String
Dim sqlDevNkdSel As String
Dim sqlITemp As String
Dim sqlBarcode As String
Dim wrk As DAO.Workspace
Dim db As DAO.Database
        
DoCmd.SetWarnings False
        
On Error GoTo ErrHandler
        
sqlAccounts = "INSERT INTO tbl_Accounts (Login,PW) VALUES (Forms!frm_RegisterCellTab!txt_GA,Forms!frm_RegisterCellTab!txt_GP)"
        
sqlDevice = "INSERT INTO tbl_Cell_Tab ( DeviceNum,[User],Dept,PhoneNum,MAC,Mfg,Model," & _
            "IMEI,SerialNum,OS,Applock,ScreenLock,IntuneAccount,Updated,Notes," & _
            "DateAssigned,Encrypted ) " & _
            "VALUES (Forms!frm_RegisterCellTab!txt_DN,Forms!frm_RegisterCellTab!txt_User," & _
            "Forms!frm_RegisterCellTab!txt_Dept,Forms!frm_RegisterCellTab!txt_PhoneNum," & _
            "Forms!frm_RegisterCellTab!txt_MA,Forms!frm_RegisterCellTab!txt_Mfg,Forms!frm_RegisterCellTab!txt_MN," & _
            "Forms!frm_RegisterCellTab!txt_IMEI,Forms!frm_RegisterCellTab!txt_SN,Forms!frm_RegisterCellTab!txt_OS," & _
            "Forms!frm_RegisterCellTab!txt_AL,Forms!frm_RegisterCellTab!txt_SL,Forms!frm_RegisterCellTab!txt_IA,DATE()," & _
            "Forms!frm_RegisterCellTab!txt_Notes,Forms!frm_RegisterCellTab!txt_frame);"
            
sqlDevNkdSel = "UPDATE disTINCTROW tbl_Cell_Tab SET tbl_Cell_Tab.GoogleAccount = DMax('AccountIDKey','tbl_Accounts')" & _
            "WHERE tbl_Cell_Tab.DeviceNum = Forms!frm_RegisterCellTab!txt_DN;"
            
sqlBarcode = " INSERT INTO tbl_Barcodes (DeviceNum) VALUES(Forms!frm_RegisterCellTab!txt_DN)"
            
Set wrk = DBEngine.Workspaces(0)
Set db = wrk.OpenDatabase(CurrentDb.Name)
        
With wrk
      .BeginTrans
      DoCmd.Runsql sqlAccounts,dbFailOnError
      DoCmd.Runsql sqlDevice,dbFailOnError
      DoCmd.Runsql sqlBarcode,dbFailOnError
      .CommitTrans
End With
        
On Error GoTo SubmitErr
        
DoCmd.Runsql sqlDevNkdSel
DoCmd.Runsql ("UPDATE disTINCTROW tbl_Cell_Tab SET tbl_Cell_Tab.ITEmpValidation = Forms!frm_RegisterCellTab!txt_CurrentIT " & _
            " WHERE tbl_Cell_Tab.DeviceNum = Forms!frm_RegisterCellTab!txt_DN;")
        Call AuditLogs("txt_DN","New")

所以这里的想法是,我正在向表中添加一条新记录,并且我想使用审计日志,并在记录本身中列出正在添加记录的员工,这些用于两个不同的目的,并且记录本身大约每 3 个月更改一次,而审计日志只会显示最初将记录放置到位的人,虽然审计日志可以用于跟踪以后的更改,但这样做需要比以下更复杂的查询我觉得对于将员工列入记录的目的来说是绝对必要的。

更具体的细节,我很难描述:

设备编号 SomeotherField 员工 更新日期
10003 随便 鲍勃 6/18/21

该日期更新列引用了 IT 人员检查设备并对设备本身进行软件/硬件/外围设备维护的具体事件。它是设备的一部分,是的,当他们进行维护时,它会记录在审核日志中,但不像设备的其他字段那样详细。

sqlDevNkdSel 表示我不得不从 sqlDevice 中拉出并在事务之外运行的一段 sql。连同编码 sql 和对审计日志的调用。 这些都没有在 sqlDevice sql 中工作,我理解为什么 Auditlogs 没有。事实上,我有点理解为什么 sqlDevNkdSel 不一样。因为为了把数据放到表里,我首先要生成记录,没有那个记录,就没有数据可以查询添加。我明白了,但理想情况下,我希望所有内容都在事务中,以防止部分更新失败。有什么办法可以做到这一点吗?我想可能是嵌套事务,但我不知道它们运行的​​顺序,如果回滚一个会在失败时回滚两个?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)