如何在ms访问vba中运行追加查询作为事务的一部分

时间:2017-10-20 14:38:11

标签: error-handling transactions access-vba rollback ms-access-2016

我对编程非常陌生,并且在MS Access 2016上构建了我公司的库存数据库。到目前为止,我已经能够很好地处理宏了,但是我&#39 ;我试图运行由追加和删除查询组成的事务,并且正在努力使用vba代码。

我想出了如何运行错误时查询失败的事务。但是,我尝试在事务中包含的追加查询是从空白表单中绘制值,据我所知,这意味着我需要在代码中定义查询参数。

所以这是交易和错误处理工作的代码:

Private Sub Command0_Click()

Dim ws As DAO.Workspace, db As DAO.Database
Set ws = DBEngine.Workspaces(0)
Set db = ws.Databases(0)
Set qdf = db.QueryDefs

On Error GoTo ErrTrap

ws.BeginTrans
DoCmd.SetWarnings False
db.Execute "TESTQRY1", dbFailOnError
db.Execute "TEST2QRY", dbFailOnError
db.Execute "TESTQRY3", dbFailOnError

ws.CommitTrans

MsgBox ("You have successfully updated the data")
DoCmd.SetWarnings True

Exit Sub

ErrTrap:
    ws.Rollback
    MsgBox "Rollback needed because:" & vbCr & Err.Description

End Sub

这是用于实际运行查询的代码,但它没有错误处理或事务处理:

Private Sub Add_Click()

Dim db As DAO.Database
Dim qry As DAO.QueryDef
Dim ws As DAO.Workspace

Set ws = DBEngine.Workspaces(0)
Set db = ws.Databases(0)
Set qry = db.QueryDefs("APPENDQRY")

qry.Parameters(0) = Forms!LotNumberFrm!txtLotNumber
qry.Parameters(1) = Forms!LotNumberFrm!txtFWNumber
qry.Parameters(2) = Forms!LotNumberFrm!txtExpDate
qry.Parameters(3) = Forms!LotNumberFrm!chkActive

qry.Execute

Exit Sub

End Sub

所以基本上我的问题是我需要同时做这两件事 - 将查询作为具有错误处理的事务的一部分运行并在代码中定义查询参数。

我试图将这两段代码切片并拼凑成一堆不同的方法而没有成功。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我真的不明白为什么你无法将第一部分的代码整合到第二个问题中,但我会为你做。

Private Sub Add_Click()
Dim db As DAO.Database
Dim qry As DAO.QueryDef
Dim ws As DAO.Workspace
Set ws = DBEngine.Workspaces(0)
Set db = ws.Databases(0)
Set qry = db.QueryDefs("APPENDQRY")

qry.Parameters(0) = Forms!LotNumberFrm!txtLotNumber
qry.Parameters(1) = Forms!LotNumberFrm!txtFWNumber
qry.Parameters(2) = Forms!LotNumberFrm!txtExpDate
qry.Parameters(3) = Forms!LotNumberFrm!chkActive

On Error GoTo ErrTrap
ws.BeginTrans
qry.Execute
ws.CommitTrans
Exit Sub
ErrTrap:
    ws.Rollback
    MsgBox "Rollback needed because:" & vbCr & Err.Description
End Sub

以事务方式执行单个查询的另一种方法如下:

qry.Execute dbFailOnError

这会回滚查询错误。不需要任何工作空间。