跨多个选项卡填充的唯一实验室条目
Posted
技术标签:
【中文标题】跨多个选项卡填充的唯一实验室条目【英文标题】:Unique lab entry populated across multiple tabs 【发布时间】:2016-09-26 22:06:00 【问题描述】:我正在利用我在 MS Access 2007(医院拥有的...)方面的 2 周经验从头开始创建数据库,以跟踪研究患者。信息的基本流程是这样的,从一个开始屏幕,这个人可以输入一个新病人或找到一个老病人(每个都从一个按钮) - 得到这些部分......(他们去一个病人人口统计表格)
找到患者后,他们可以从组合框中选择以前的就诊(获取该部分)或创建新就诊(通过一个按钮,然后弹出组合框的附加表单)- 获取该部分...(他们去访问表)
这就是我的问题所在。在访问表单上,我们需要能够生成实验室条目(每个实验室条目都有多个表来存储数据)。我已经创建了表单(患者信息区域和 12 个选项卡,每个选项卡在数据表视图中都有不同的子表单(一个除外)),并且我可以获得我在表中输入的当前“假”结果以显示在选项卡中。我的问题在于获取它,以便当我们在任何一个选项卡中输入新的实验室日期(确实会生成一个新的唯一 LabID)时,让它在其他 11 个选项卡(都与该唯一 LabID 相关联)中填充该日期和记录在每个基表中。如果访问没有与之关联的实验室,我的子表单应该只是空白数据表,可以输入新的 labID。否则,如果我们已经在访问中,则子表单数据表应显示与该访问相关的所有先前唯一 LabID 和值,并有一行用于输入新的实验室事件。 哦,是的....我们还必须能够回到那些其他实验室记录并在结果可用时对其进行编辑/添加(病理学比其他需要更长的时间 - 等等)。但是,如果 LabID 和相关日期填充在所有 12 个选项卡中的每个表单中,则应该有一个空白区域等待该信息可用时。所以这可能不是什么大问题。
本质上,一个独特的患者会产生多次独特的就诊 --> 每次就诊可以产生 1 个或多个独特的 LabID,然后与许多实验室数据点相关联(所有实验室 ID 都是唯一的)。迷茫了吗?如果我的想法是正确的,那是一对多对多对一的关系吗?
这是我的关系表的一部分:
这是访问表格:
对于访问表单选项卡中的每个子表单,我将“链接主字段”设置为 VisitID,并将“链接子字段”设置为 Lab ID。我已经设法用少量的 VBA 编码完成了所有这些工作,但这是让我从患者人口统计页面上的组合框中获得的编码:
Private Sub VisitCBO_Change()
Dim ptWHERE As String
ptWHERE = "[VisitID] = " & Me.VisitCBO.Value
DoCmd.OpenForm "NewVisitsF", acNormal, , ptWHERE, acFormEdit
VisitCBO = Null
End Sub
截至目前,我的构建器中没有访问页面的代码。子表单基于从实验室组表和 labID 表中提取的查询。
一周以来,我一直在网上和 Access 2007 圣经中寻找答案,但我可以承认,当我不知所措并陷入困境时……专家,请帮忙! - 如果需要,我可以提供指向数据库的链接。
【问题讨论】:
【参考方案1】:VisitsT 是您的父表单吗?您的每个子表单都以某种方式通过 LabsT 表单。您的父母/孩子应该将您的主要 VisitsT 数据链接到您的每个子表单,但现在看起来您正在通过 LabsT 并链接错误的字段。从您的加入关系来看,它看起来像 LabID = LabID(父/子),但是您没有链接它们。您的每个子表都应该有一个唯一的键(可能是 LABID 和 VISITS),看起来您尝试使用中间的 LabsT 表单来执行此操作。此信息应在每个子表单上重复。那么您的父母/孩子只能使用 VisitID。
【讨论】:
那么 LabsT 应该有一个使用 LabID 和 Visit_ID 的组合键?然后我需要将 Visit_ID 放入每个子表中?然后将父(VisitT)/子(LabsubT)链接设置为VisitID/Visit_ID?每个子表(Vitals/Chem10/CBC....)都必须相互关联(理论上通过相同的 LabID)。患者 A --> 就诊 A --> 实验室条目 A --> 实验室 (A, , C,D) B --> 实验室 (A,B,C) B --> 实验室条目 A --> 实验室 (F) 男孩...最后一个没有像我期望的那样格式化...无论如何,最后一点是确保无论输入哪个实验室值,它都会生成一个实验室 ID对于所有实验室子表... 我认为您的 LabsT 表不是必需的。如果 VisitID 在每个子表中,那么每当更新子表单上的记录时,该唯一的 VisitID 就会根据父/子关系记录在每个子表中。但是,我刚刚经历了一个类似的场景,其中拥有多个子表可能比它的价值更令人头疼(即归档等时),所以我只更新一个包含所有字段的大子表。然后你可以根据你需要的字段从一个大子表中创建子表单——这也解决了 LabID 的生成。 我认为您的 LabsT 表不是必需的。如果 VisitID 在每个子表中,那么每当更新子表单上的记录时,该唯一的 VisitID 就会根据父/子关系记录在每个子表中。然而,我刚刚经历了一个类似的场景,其中拥有多个子表可能比它的价值更令人头疼(即存档等时),所以我选择了一个包含所有字段的大子表。然后你可以根据你需要的字段从一个大子表中创建子表单——这也解决了 LabID 的生成。 但是每次就诊都可以生成多个实验室条目....可以这样想...一些患者将被送入医院,产生 REDICULOUS 数量的实验室数据点(每次我们对数据生成 LabID)。其他人(以及稍后的时间 - 相同的患者)将在办公室看到,这将产生非常少量的数据点。如果 LabsT 消失,我们还能在同一次入院时进行多次实验室采样吗?还是会产生另一次访问?【参考方案2】:我最终将所有数据子表重新粘贴到一个包含所有实验室变量的大表中,然后将变量划分为选项卡式子表单。现在,VisitT 和 LabsT 之间的父/子关系是 VisitID/Visit_ID。
我仍然想知道如何将数据拆分为不同的表格,就像我原来的问题一样,因为这样更容易概念化这些数据。所以如果有人有任何想法,请告诉我!
感谢 geeFlo 来回帮助我获得工作表格和流程!
【讨论】:
拆分表的工作方式相同。您要么最终得到没有记录的子表(即您有不适用于主表的子表),要么您可以通过在任何一个记录更新后创建一个循环遍历所有其他子表来强制记录到每个表. (也许用数字命名你的表,这样你就可以对所有“其他”子表进行简单的迭代,为这些子表分配相同的父 ID。) 我很想知道它的代码!就像我在 OP 中提到的那样,我只有 2 周的 Access 和 VBA 经验,所以我仍然是一个试图创建摩天大楼巢穴的新手。我想这可能是一个 if...then... until... else... 类型的语句? 我不会担心的。如果没有条目(即该记录的子表为 N/A),则不需要记录。例如。约翰去上学。在 10 门科目中,他选择了 4 门,并且必须说“是”才能申请。每个子表都有一个名称、应用字段。如果 John 是主表单上的记录,并且 10 个主题的 10 个子表单具有适当的父/子链接(John = John)。只有当他填写 [Applied] 字段时,子表单表才会填写记录(即 John,Yes)。对于他懒得填写的表格,没有 John 的记录。 (续...) (...cont) 如果要在其他表中回填 (John, No) 值,则可以使用 FOR-Next 循环遍历所有表,并填写 (John,不)在它不存在的地方。这可以通过 UPDATE 查询完成,或者您开始使用 RECORDSETS 将这些值写入其中。 这并不是说我需要在每个子表的每个容器中放入一些东西.....而是我需要在每个子表中为该实验室保留空容器 - 以防我们想要填充稍后,或者在我们生成初始 LabID 和 Lab 日期(同步生成)后几天返回给我们。这就是在每个子表中生成 LabID 的真正作用……它保留了与该 LabID 关联的位置。否则(续...)【参考方案3】:所以我最终彻底改变了周围的事情......我完全删除了 LabID 表,并将实验室组分成单独的表,每个表都有自己的 labgroupID 自动编号(CBCID、Chem10ID 等)。我不喜欢它,但它正在正确记录数据:实验室与按日期访问和通过对患者的访问相关联。如果我想随着时间的推移跟踪实验室,我会在患者报告中这样做,然后按日期分组。也许有一天,我将能够弄清楚如何拥有每个实验室子组所属的一个 LabID,以便它们都同时填充......可能涉及一些繁重的 VBA 编码。
【讨论】:
以上是关于跨多个选项卡填充的唯一实验室条目的主要内容,如果未能解决你的问题,请参考以下文章