如何 运行 ms access vba 中的追加查询作为事务的一部分
How to run an append query in ms access vba as part of a transaction
我是编程的新手,一直在 MS Access 2016 上构建我公司的库存数据库。到目前为止,我已经能够很好地使用宏,但我正在尝试 运行 由追加和删除查询组成的事务,并且正在与 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
所以基本上我的问题是我需要同时做这两件事 - 运行 将查询作为事务的一部分进行错误处理并在代码中定义查询参数。
我曾尝试以多种不同的方式将这两段代码切片和拼接在一起,但均未成功。任何帮助将不胜感激。
我真的不明白为什么你不能将你第一部分的代码整合到你的第二个问题中,但我会为你做。
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
这会在出现错误时回滚查询。不需要任何工作空间的东西。
我是编程的新手,一直在 MS Access 2016 上构建我公司的库存数据库。到目前为止,我已经能够很好地使用宏,但我正在尝试 运行 由追加和删除查询组成的事务,并且正在与 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
所以基本上我的问题是我需要同时做这两件事 - 运行 将查询作为事务的一部分进行错误处理并在代码中定义查询参数。
我曾尝试以多种不同的方式将这两段代码切片和拼接在一起,但均未成功。任何帮助将不胜感激。
我真的不明白为什么你不能将你第一部分的代码整合到你的第二个问题中,但我会为你做。
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
这会在出现错误时回滚查询。不需要任何工作空间的东西。