【问题标题】:Access 2007 create new record will not update formAccess 2007 创建新记录不会更新表单
【发布时间】:2015-01-22 16:56:57
【问题描述】:

我正在建立一个包含患者信息的数据库。现在,用户可以使用搜索/确认表单导航到特定的患者信息(患者主页)。主页具有指向其他表格的链接,其中包含其他患者信息。当用户搜索从一开始就放入的患者时,该代码起作用(也就是我在开始时作为测试人员放入的“患者”将出现并且代码的行为与预期的一样)。但是,当我尝试添加新患者时,确认表将不再起作用。新记录在患者列表中创建,搜索表单将找到新患者,但是当我单击确认表单上的继续按钮时,患者主页作为新(空白)记录拉出。该代码仅适用于新患者。

当我将新患者添加到主页表单时,我在“设备日志”表单中创建新记录时也遇到了问题。我在设备日志和患者主页之间有一对一的关系,pt ID 是两个表的主键。当我通过“pt 主页”添加新患者时,我需要在通过 pt ID 连接的设备日志中创建链接记录。到目前为止,我已经尝试过类似于下面的代码和其他类似的东西,但似乎没有任何效果。

下面是搜索和确认页面的代码,以及患者主页的部分代码(虽然我不知道那个代码很有用)。任何帮助表示赞赏,我已经坚持了一段时间。

患者搜索页面:

Private Sub Patient_Search_Click()
On Error GoTo Patient_Search_Click_Err

DoCmd.OpenForm "Confirmation", acNormal, "", "", acReadOnly, acNormal


Patient_Search_Click_Exit:
Exit Sub

Patient_Search_Click_Err:
MsgBox Error$
Resume Patient_Search_Click_Exit

End Sub

Private Sub add_new_Click()
On Error GoTo add_new_Click_Err

' _AXL:<?xml version="1.0" encoding="UTF-16" standalone="no"?>
' <UserInterfaceMacro For="Patient Search" Event="OnClick"   xmlns="http://schemas.microsoft.com/office/accessservices/2009/11/application" xmlns:a="http://schemas.microsoft.com/office/accessserv
' _AXL:ices/2009/11/forms"><Statements><Action Name="OpenForm"><Argument Name="FormName">Confirmation</Argument><Argument Name="DataMode">Read Only</Argument></Action></Statements></UserInterfaceMacro>
DoCmd.OpenForm "Patient Home Page"
DoCmd.GoToRecord , , acNewRec

add_new_Click_Exit:
Exit Sub

add_new_Click_Err:
MsgBox Error$
Resume add_new_Click_Exit

End Sub

患者确认页面(*注意:我对此进行了编辑并在 debug.print 处添加了一个断点。当我运行该命令时,什么都不会打印,现在什么都不会打开)

Private Sub confirm_Click() 
testid = [Patient List_ID]
Debug.Print 
DoCmd.OpenForm "Patient Home Page", acNormal, "", "[ID]=" & "'" & [Patient List_ID] & "'" 
End Sub

患者主页:

Private Sub Form_Current()
If Me.NewRecord Then
Me.equipment_log.Visible = False
Me.echos.Visible = False
Me.open_logs.Visible = False
Me.openadvisory.Visible = False
Me.save.Visible = True
Me.edit.Visible = False
Me.cancelupdate.Visible = True
Last_Name.Locked = False
First_Name.Locked = False
Middle_name.Locked = False
Device.Locked = False
Patient_List_ID.Locked = False
MRN.Locked = False
DOB.Locked = False
Implant_Date.Locked = False
Transplant_Goal.Locked = False
Status.Locked = False
Caregiver.Locked = False
Address.Locked = False
City.Locked = False
State.Locked = False
Zipcode.Locked = False
Phone_1.Locked = False
Phone_2.Locked = False
Phone_3.Locked = False
Else
Me.equipment_log.Visible = True
Me.echos.Visible = True
Me.open_logs.Visible = True
Me.openadvisory.Visible = True
Me.save.Visible = False
Me.edit.Visible = True
Me.cancelupdate.Visible = False
Last_Name.Locked = True
First_Name.Locked = True
Middle_name.Locked = True
Device.Locked = True
Patient_List_ID.Locked = True
MRN.Locked = True
DOB.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
End If
End Sub

根据患者列表中的新条目在设备日志中创建新记录(在 if 语句中创建新记录)

Dim crit As String
crit = [Patient List_ID]
DoCmd.OpenForm "Patient Equipment Log"
DoCmd.GoToRecord , , acNewRec
Forms![Patient Equipment Log]![Patient Equipment.ID] = crit

【问题讨论】:

  • 您能否详细说明关于设备日志的第二个问题?例如究竟什么不起作用以及到目前为止您已经尝试过什么。
  • 我无法确切告诉您我尝试了什么,因为我尝试了很多与其他帖子/网站不同的东西,并在它不起作用时将其删除。编辑原始问题以扩展该问题。
  • 希望对您有所帮助,如果我能澄清更多,请告诉我。在我尝试过的所有方法中,这种方法似乎最有意义。

标签: vba ms-access


【解决方案1】:

在您尝试打开表单查看新患者之前,您的新患者并未被保存。所以基本上你创建一个新的病人,并告诉第二个表格在他们真正“存在”在数据库眼中之前查看那个病人。

Private Sub Patient_Search_Click()
On Error GoTo Patient_Search_Click_Err

    DoCmd.Save
    DoCmd.OpenForm "Confirmation", acNormal, "", "", acReadOnly, acNormal


Patient_Search_Click_Exit:
    Exit Sub

Patient_Search_Click_Err:
    MsgBox Error$
    Resume Patient_Search_Click_Exit

End Sub

【讨论】:

  • 这仍然不起作用...我认为错误不在该页面上。患者正确地拉起确认。当我单击继续按钮时,它会在主页上拉出一个新表格,而不是查找新患者。我确实尝试将宏更改为 vba 代码以使其更易于操作,见下文。这与为新患者打开空白主页的作用相同。 Private Sub confirm_Click() DoCmd.OpenForm "Patient Home Page", , , "[Patient List_ID]=" & Patient_List_ID End Sub
  • 更新:我尝试重写 confirm_Click() 子并添加 debug.print 如下。 debug.print 不返回任何内容。任何想法(代码中的逗号分隔行,我不知道如何在注释中强制分隔行)? italic Private Sub confirm_Click() , testid = [Patient List_ID] , Debug.Print , DoCmd.OpenForm "Patient Home Page", acNormal, "", "[ID]=" & "'" & [Patient List_ID] & "'" , 结束小斜体
  • 你不能在 cmets 中换行,我只会将它附加到你的主帖子中,这样访问这里的每个人都可以看到。
【解决方案2】:

我终于明白了……显然,我在某个地方拥有 MRN 相关的设备和患者名单。我在患者主页的“保存”命令下添加了一条 if 语句,以检查患者设备列表中是否存在具有相同 MRN 的记录。如果没有,我创建了一条新记录。

Private Sub save_Click()
DoCmd.save
Dim crit As String
crit = [Patient List_ID]
DoCmd.OpenTable "Patient Equipment"
qcrit = DLookup("[ID]", "Patient Equipment", "[Patient List_ID]=" & "'" & crit & "'")
If StrComp(crit, qcrit) = 0 Then
    DoCmd.Close
Else
    DoCmd.OpenForm "Patient Equipment Log"
    DoCmd.GoToRecord , , acNewRec
    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]
    DoCmd.Close
End If

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多