代码返回错误的记录/无法正确更新表单

时间:2019-04-18 11:01:46

标签: vba ms-access

因此,我将尽力解释背景,以澄清对我希望实现的目标的理解。我有一个带有选项卡控件的表单(事件),该选项卡控件有3个不同的页面,每个页面上都有不同的子表单。

其中一个子表单(发言人)具有一个按钮控件,用于检查“发言人”的与会者ID,如果存在匹配项,则会向匹配的记录打开“入职”表单。

如果记录不匹配,该怎么办是打开一个新记录并插入ContactID,AttendeeID和EventID。

这是代码的第四次迭代,并且在一定程度上/没有返回错误

Dim myR As Boolean
Dim strSQL As String
Dim myV1 As Integer
Dim myV2 As Integer
Dim myV3 As Integer

'Define the variables to be input
myV1 = Me.AttendeeID
myV2 = Me.ContactID
myV3 = Me.EventID

'Is there a Matching Onboard Record for the current Attendee Record?
myR = DCount("*", "tbl_Onboarding", "[AttendeeID] = " & Me.AttendeeID) > 0

If myR = True Then
  DoCmd.OpenForm "usf_Onboarding", acNormal, , , acFormEdit, acWindowNormal     'Edit Mode
Else        'No Matching Record, so Add one
  If Me.Dirty = True Then Me.Dirty = False      'Save pending Edits
  DoCmd.OpenForm "usf_Onboarding", acNormal, , , acFormAdd, acWindowNormal      'Add Mode

  Forms!usf_Onboarding!txt_ForceFocus.SetFocus

  strSQL = "INSERT INTO tbl_Onboarding (AttendeeID,ContactID,EventID) VALUES (" & myV1 & ", " & myV2 & ", " & myV3 & ")"

  Debug.Print strSQL

  CurrentDb.Execute strSQL, dbFailOnError

  Me.Requery

  DoCmd.Close acForm, "usf_Events", acSaveYes

End If

立即使用我已确认myV1,myV2和myV3都保持正确的值,并且我使用断点逐行检查,并且一切似乎都可以正常运行,并返回了零错误,但是根据是否是否存在,我仍然存在以下问题myR是对是错

  1. 如果记录存在(myR = TRUE),则是由于某种原因导致的 只加载表的第一条记录(而不是 与会者ID匹配)。
  2. 如果运行此记录后该记录不存在(myR = FALSE),则 表中包含具有contactID / AttendeeID / EventID的新记录 但表单不会更新以显示此信息(已设置表单控件 锁定= False),这将导致关闭时出错。所以 选择不保存数据(在框上单击“是”以放弃) 更改)允许强制退出,但记录/数据与 contactID / AttendeeID / EventID

Debug.Print strSQL也没有做任何奇怪的事情。

1 个答案:

答案 0 :(得分:0)

问题1:“如果记录存在(myR = TRUE),则说明是某种原因导致该记录仅加载表的第一条记录(而不是与与会者ID匹配的记录)。”

我需要在openform命令中添加where子句

DoCmd.OpenForm "usf_Onboarding", acNormal, , "AttendeeID = " & Me.AttendeeID, acFormEdit, acWindowNormal 

问题2:“如果在运行该记录后该记录不存在(myR = FALSE),则该表中包含具有contactID / AttendeeID / EventID的新记录,但是该表单不会更新以显示此信息(表单控件设置为锁定= False)这将导致关闭时出错。因此,选择不保存数据(在框上单击“是”以放弃更改)将允许强制退出,但记录/数据将保存为contactID / AttendeeID / EventID” < / p>

在创建新记录之前,我正在加载表单,然后尝试重新查询另一个新记录而不是它创建的记录。我需要做的就是先添加记录,然后使用上面的打开代码加载该记录

Else        'No Matching Record, so Add one
  If Me.Dirty = True Then Me.Dirty = False      'Save pending Edits

  strSQL = "INSERT INTO tbl_Onboarding (AttendeeID,ContactID,EventID) VALUES (" & myV1 & ", " & myV2 & ", " & myV3 & ")"

  CurrentDb.Execute strSQL, dbFailOnError

  DoCmd.OpenForm "usf_Onboarding", acNormal, , "AttendeeID = " & Me.AttendeeID, acFormEdit, acWindowNormal