我正在尝试使用Microsoft Access数据库创建数据库,但我遇到了问题。我想创建一个包含计算机组件信息的数据库和一个用于列出某些组件以构建计算机的表单。
例如,我想构建计算机A,并且我有一个所有硬盘驱动器的列表:hdd1,hdd2,hdd3,hdd4和hdd5,但只有hdd2和hdd4是兼容的。
我的方法是(其中bold =主键,而italic =外键:
HDD( hhd#,尺寸,成本, compA , compB , compC )
COMP( comp#, hdd#)
这是正确的做法吗?
答案 0 :(得分:1)
请注意:
我在这里提供了一个答案因为我感觉很好,但是将来要记住你的问题有点过于宽泛而不适用于 这个网站。但是,如果您是初学者,希望这会有所帮助。
我根据你的描述纯粹嘲笑了我自己的例子 说明了如何处理这个问题的想法。
我创建了2个表。第一个 tblCompBuilds 将列出计算机构建。这是它的结构:
...这里有一些虚拟数据:
我创建的另一个表格是 tblHdds ,它会列出硬盘驱动器和一些规格。这是它的结构:
...这里有一些虚拟数据:
我已经决定我将使用两个表格中显示的HddFormFactor
字段作为确定tblHdds
中的硬盘记录是否兼容的内容使用tblCompBuilds
中的计算机记录。
这是一个重要的问题,在设计数据库和表单时需要问自己......
"我可以使用哪些数据来确定硬盘与计算机兼容?" *
对于我的例子,我发明了1个字段,但你可能有一套更复杂的标准要求(可能需要多个字段和不同的条件/情况)。
无论如何,一旦我建立了数据以及我打算如何显示兼容的硬盘,我需要制作一个允许我选择计算机版本和兼容硬盘的表格。
创建一个空白表格后,我点击左上角的方格选择表格;黑色方块表示选择了表格:
在表单的属性表中,我转到"数据"选项卡和Record Source属性我使用下拉列表查找并选择tblCompBuilds
表:
这会将表单绑定到此表,这意味着您可以将绑定表中的字段添加到此表单,并使用表单移动这些记录以显示它们。
不是将绑定表中的字段添加到表单中,而是使用组合框向导创建新的组合框(组合框本质上是一个下拉列表选项)。
首先,我声明我想从表中获取组合框的选项。这是因为ComputerBuildName
表中tblCompBuilds
字段下列出的数据将为我提供可供选择的计算机列表:
然后我指定表格......
...然后是字段:
在这种情况下,我只使用ID
和ComputerBuildName
字段。 ComputerBuildName
字段将是用户在使用组合框时看到的选项,ID
字段将在以后使用组合框操作表单时帮助我。
然后我指定一个订单,我希望组合框中的选项出现。由于字段ComputerBuildName
中的数据最终是我想要在我的组合框中显示的内容,因此按字母顺序显示该用户是有意义的:
最后,您可以指定组合框中显示的列的宽度;我倾向于忽略这个并稍后手动执行(注意我已经要求向导隐藏我的主键字段,即ID
字段):
如果您进入表单视图,组合框如下所示:
因此我们现在可以选择我们的计算机构建,接下来我们需要显示相关/兼容的硬盘。有很多不同的方法可以做到,但我将使用子表单来说明这一点。
在表单中添加子表单并完成子表单向导;从指定我想使用现有表开始:
...然后我指定表格(tblHdds
)和我想要显示的字段:
下一阶段是我们在表单(我们之前通过将其记录源设置为tblCompBuilds
指定的)指定关联记录的方式在我们的子表单(我们刚刚指定为tblHdds
)。
子窗体向导将尝试通过查找绑定到具有同名的窗体和子窗体的表中的字段来提供窗体和子窗体之间的关系。
当我设计表格时,我小心翼翼地确保:
HddFormFactor
)
tblCompBuilds
至tblHdds
和这意味着已经有一种关系已经在等待我在子窗体向导中选择,而不是必须尝试创建自己的关系:
选择我希望我的表单tblCompBuilds
记录与我的子表单的tblHdds
记录相关联后使用HddFormFactor
我只需要命名我的子表单即可完成向导:
在表单视图中,表单现在看起来应该是这样的:
我们想要发生的是,当您从“计算机构建”组合框中选择一台计算机时,HDD的子窗体将更新为仅列出具有兼容HDD外形的那些。
如果您尝试这样做,子表单不会更新。
注意表单和子表单底部有一些关于绑定到表单和子表单的记录的信息:
当您在组合框中选择任何计算机构建时,请注意表单的记录号不会更改;它只停留在1/3之间并且不会移动。
子表单无法更新,因为表单的当前加载记录不会更改,因此子表单也不会更改。
要使用组合框更改表单上的加载记录,我们需要使用一点VBA。
进入设计视图,选择计算机构建组合框,然后从属性表"事件"选项卡,单击After Update事件的[...]按钮:
选择"代码生成器"并且您将被带到VBA编辑器,并且已经为您编写了以下代码:
在更新VBA之后填写组合框的中间位置,使其显示如下:
Private Sub cboCompBuild_AfterUpdate()
Dim rs As DAO.Recordset
Set rs = Me.RecordsetClone
rs.FindFirst "[ID] = " & Me.cboCompBuild
Me.Bookmark = rs.Bookmark
Set rs = Nothing
End Sub
请注意,cboCompBuild
是我给组合框的名称。您需要确保VBA中的这一行是指您所谓的组合框的名称;您可以在属性表中找到组合框的名称:
返回表单视图,希望当您选择不同的计算机构建时,子表单应该更新以显示那些兼容的。
您可以在此处执行更多操作,例如将子表单的“允许添加”属性设置为“否”"所以你不会在底部得到那个奇怪的空记录。如果您不希望用户能够更改子表单绑定表(tblHdds
)中的数据,您可能还需要考虑禁用子表单中的编辑和删除。同样值得注意的是,对于VBA,我使用的是Allen Browne的Using a Combo Box to Find Records方法的淡化版本;他的完整版本比我用于快速插图的版本更加强大。
Here's a link to Access file I created for this example
希望这有帮助。