gpt4 book ai didi

ms-access - 当错误再次出现时错误处理不起作用

转载 作者:行者123 更新时间:2023-12-01 11:14:24 25 4
gpt4 key购买 nike

逻辑:

  • 用户。按下按钮;
  • 代码。创建“Recordset”“rstStud”(学生)和“rstGroupStud”(学生组);
  • 代码。循环。枚举“rstStud”;
    • 代码。添加条目到“rstGroupStud”;
    • 代码。如果记录存在,则进入循环中的下一条记录;
    • 代码。如果条目是新的,则在“rstGroupStud”中添加一个条目;
      本质:单击一个按钮 - 添加一个独特的条目。

问题。
当循环结束! StudentName = "Student Name 2"in the line ".Update"我得到一个错误。
错误:
“由于重复值而无法进行更改索引、主键或关系。一次更改数据或包含重复值的多个字段删除索引或通过允许覆盖它重复值并重试。 "

换句话说,错误处理程序第一次正常工作,当我重新触发时,我得到了一个错误。

问题。
如何让代码按照描述的逻辑工作?

Private Sub btnAddRecord_Click()
Dim nameStud As String

Dim rstStud As DAO.Recordset '
Dim rstGroupStud As DAO.Recordset '

Set rstStud = CurrentDb.OpenRecordset("tbl_02_Students", dbOpenSnapshot) '
Set rstGroupStud = CurrentDb.OpenRecordset("tbl_03_GruopsStudents", dbOpenDynaset) '

' *** rstStud
With rstStud
Do Until .EOF = True
nameStud = !nameStud

On Error GoTo errend
' *** rstGroupStud
With rstGroupStud
.AddNew

!idGroup = Me.id_GroupFrm
!nameStud = nameStud
' nameStud
.Update
End With
rstGroupStud.Close
Me.frm_03_GruopsStudents_tbl.Requery

Exit Sub
errend:
.MoveNext
Loop
End With

On Error Resume Next
rstStud.Close
Set rstStud = Nothing
End Sub

enter image description here enter image description here enter image description here enter image description here

Update_1
文件 - link

最佳答案

您需要理清执行路径;正常和错误执行状态交织在一起,这就是为什么第一个错误之外的任何错误都无法处理的原因。

Private Sub btnAddRecord_Click()
Dim nameStud As String

Dim rstStud As DAO.Recordset '
Dim rstGroupStud As DAO.Recordset '

Set rstStud = CurrentDb.OpenRecordset("tbl_02_Students", dbOpenSnapshot) '
Set rstGroupStud = CurrentDb.OpenRecordset("tbl_03_GruopsStudents", dbOpenDynaset) '

' *** rstStud
With rstStud
Do Until .EOF = True
On Error GoTo ErrHandler
nameStud = !nameStud

' *** rstGroupStud
With rstGroupStud
.AddNew

!idGroup = Me.id_GroupFrm
!nameStud = nameStud
' nameStud
.Update
End With
rstGroupStud.Close
Me.frm_03_GruopsStudents_tbl.Requery

Exit Do
TryNext:
On Error Resume Next
.MoveNext
If Err.Number <> 0 Then Exit Do
On Error GoTo 0
Loop
End With

On Error Resume Next
rstStud.Close
Set rstStud = Nothing
On Error GoTo 0
Exit Sub

ErrHandler:
Resume TryNext
End Sub

这样 ErrHandler 只会在错误状态下运行; TryNext 在“happy path”中运行,Exit Do 跳出循环(但不跳出过程),这样无论结果如何,清理代码都可以运行.

关于ms-access - 当错误再次出现时错误处理不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54657999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com