我正在为我的公司开发一个新的实验室管理系统,我在实验室的金属部分遇到了麻烦。基本上,它的工作原理是我们获取一些东西的样本,将其记录下来,实验室技术人员运行分析,我们将结果输入,然后打印出报告。例如,我们可以获得客户希望进行铅、镉和铬测试的油漆样本。
我现在设置它的方式是,当您登录它时,如果您选择Metals作为模块,并将Paint作为Matrix,则会显示一个按钮,当单击该按钮时,将打开一个包含我们测试的所有元素的子窗体。您可以单击要测试的每个元素的复选框,然后当您打开结果表单时,只会显示您选择的元素。问题是,我们可以测试27+元素,每个元素都需要一个字段表示结果,3个字段表示分析人员,3个字段表示分析日期,另一个字段表示该元素的报告限制(根据一些情况而变化)。有没有更有效的方法来实现这一点,而不是粗暴地强迫数百个字段?我很乐意为我的数据库提供文件,如果任何人想要进一步查看。
发布于 2021-09-01 14:55:11
我认为你需要通过规范化来正确的设计你的数据库。作为建议,尝试使用以下三个表:
tblTest - TestID (主键,自动编号),TestName。有关测试的其他信息,如申请日期、完成日期等,也可以包括在内。
tblElement - ElementID (主键,自动编号),ElementName。
tblTestElement - TestElementID (主键,自动编号),TestID (来自tblTest的外键),ElementID (来自tblElement的外键),测试日期字段,分析它的人等等。
然后,您将基于tblTest创建主窗体。创建一个基于tblTestElement的连续窗体以用作子窗体(在TestID上链接),并将tblElement用作此子窗体上组合框的RowSource。
使用此结构,您将能够根据需要选择要执行的任意多个测试,而不会遇到字段限制。
有两种方法可以允许用户一次添加通用组。首先,如果只有一两个,您可以使用命令按钮将数据作为一组SQL INSERT语句插入到tblTestElement中。如果有许多测试,或者很可能是额外的测试,那么可以考虑使用一个表来存储这些测试的名称,并使用另一个链接表来存储各个测试。同样,您将对表tblTestElement执行INSERT操作。
要打印出报告,同样需要使用报告/子报告设置。将主报告基于tblTest (注意,当您执行.OpenReport时,会有一个参数来限制返回的记录- DoCmd.OpenReport "rptTest",acViewPreview,,"TestID=3")。创建一个连接tblElement (以获取元素的名称)和tblTestElement的查询,并在该查询上创建子报告。然后将此子报表添加到主报表中,加入到TestID中。
https://stackoverflow.com/questions/69015169
复制相似问题