为什么 VBA 代码会创建部分重复记录?

Why is VBA code creating partial duplicate records?

我 运行 我的数据库出现了一个问题,我想我知道如何解决,但我想知道是否有人可以帮助我弄清楚为什么会这样。

我有 2 个表格,它们通过患者 ID 和 MRN(患者主页和患者设备日志)链接在一起。当用户在患者主页上输入新患者时,必须在设备日志表格中创建新记录并匹配 MRN,以便正确保存新患者并在以后查看。当我点击患者主页上的保存时,我有代码检查设备表格中是否有相同的患者 ID,并在设备日志中创建新记录,如果没有,则用适当的信息填写链接字段(见下文)。那部分工作正常。

Private Sub save_Click()
DoCmd.save
DoCmd.RefreshRecord
Dim crit As String
crit = [Patient List_ID]
Debug.Print crit
DoCmd.OpenTable "Patient Equipment"
qcrit = DLookup("[ID]", "Patient Equipment", "[Patient Equipment.ID]=" & "'" & crit & "'")
Debug.Print qcrit
If StrComp(crit, qcrit) = 0 Then
DoCmd.Close
Else
DoCmd.Close
DoCmd.OpenForm "Patient Equipment Log"
Forms![Patient Equipment Log]![MRN] = Forms![Patient Home Page]![MRN]
Forms![Patient Equipment Log]![Patient Equipment.ID] = Forms![Patient Home Page]![Patient List_ID]
Forms![Patient Equipment Log]![Implant Date]=Forms![Patient Home Page]![Implant Date]
Forms![Patient Equipment Log]![Device]=Forms![Patient Home Page]![Device]
DoCmd.save
DoCmd.Close
End If
First_Name.Locked = True
Last_Name.Locked = True
Middle_name.Locked = True
Patient_List_ID.Locked = True
MRN.Locked = True
Device.Locked = True
Implant_Date.Locked = True
Transplant_Goal.Locked = True
Status.Locked = True
Caregiver.Locked = True
Address.Locked = True
City.Locked = True
State.Locked = True
Zipcode.Locked = True
Phone_1.Locked = True
Phone_2.Locked = True
Phone_3.Locked = True
Me.equipment_log.Visible = True
Me.echos.Visible = True
Me.open_logs.Visible = True
Me.edit.Visible = True
Me.openadvisory.Visible = True
Me.edit.SetFocus
Me.save.Visible = False
Me.cancelupdate.Visible = False
End Sub

当我输入一个新病人时,在设备日志中创建了正确的对应记录。但是,也会创建部分重复记录。在包含植入日期和设备但不包含任何患者标识的设备日志中创建第二条记录。我尝试去掉这两行代码,但问题仍然存在,我不知道为什么。

Forms![Patient Equipment Log]![Implant Date]=Forms![Patient Home Page]![Implant Date]
Forms![Patient Equipment Log]![Device]=Forms![Patient Home Page]![Device]

我的代码中没有其他地方可以添加此类信息。我想我知道如何绕过它(if 语句检查设备日志中是否有没有 ID 的条目),但我不知道为什么会这样。任何想法表示赞赏!

编辑: 我现在知道它为什么要创建第二条记录(这 2 个问题字段实际上属于另一个 table,因此正在创建一条新记录)。我添加了以下代码来解决问题:

DoCmd.OpenForm "Patient Equipment Log", , , "[Patient Equipment.ID]=NULL & [Device]= Like 'h*'"

我在将其正确格式化为 运行 时遇到了很多问题。如果我离开 [Device]=Like 'h*',表单默认为新记录。该设备将始终以 h 开头。

我发现使用数据宏比 VBA 能更好地处理这个问题。当新条目添加到患者列表 table 时,我添加了一个数据宏来更新设备日志 table 并将设备日志中的所需变量设置为等于患者列表中给定的值 table。我现在需要找到一种方法来在未创建新记录时更新 table 值,但这是解决我原来问题的更简洁的方法。