我需要一些有关如何为以下方案构建某些MS Access 2007表单的建议。
我的表格结构如下:
产品
++++++
ID(pk)
产品名称
......
标签
++++
ID(pk)
TagName
ProductTag
+++++++++++
ProductID(fk)
TagID(fk)
我希望有一个主表单,允许我搜索并显示符合该标准的所有产品列表(以及每个产品的十几个属性)(我正在考虑产品的连续表单视图)
到目前为止一切顺利。没问题。
现在,我希望在我的连续表单产品列表的右侧有一个“标记”表单,该表单链接到当前具有焦点的产品。标签面板应始终显示所有标签的完整列表。我希望每个标签旁边都有一个复选框,我可以打开和关闭该标签是否适用于当前选定的产品。我还希望能够动态添加标签(不离开主窗体)。
我认为我有三种形式,但这是我需要一些建议的地方:
- 主要形式
- 产品表格(子表格到主要)我的产品搜索条件可能在此表格标题上
-Tag表格(也是主要的子表格)
但是使用这种方法我很难将两个子表单相互链接。实际上,我在确定如何显示所有标签列表时遇到了很大的麻烦,复选框在选中和关闭时会在ProductTag表中创建/删除记录,我真的希望Access尽可能多地执行CRUD。可能。我宁愿避免在事件上写出SQL INSERTS / DELETES的screeds。我是否过多地询问Access?
如果你能提供帮助,我们将不胜感激。如果在您的回复中您可以讨论我应该关注的RecordSource和Master / Child Link字段和/或事件触发器,这将是一个很大的帮助。
答案 0 :(得分:1)
首先,我不认为使用复选框是可行的,因为我认为未绑定的复选框不会以连续的形式工作。
我的解决方案如下。我使用TagList表单作为Product表单的子项,但还有其他方法。
首先在ProductTag表上创建一个查询'qryProductTags',该表选择与产品表单中当前所选产品相匹配的所有记录。
然后创建第二个查询 - 标签表左外连接(Access中的连接类型2)qryProductTags。在此查询的输出中包含TagID,TagName和fkProductID
此查询现在应该选择Tags标签中的所有记录,如果ProductTags表中存在当前Product的标签,它将显示ProductID,否则该字段将为null。
使用第二个查询作为Tags子表单的记录源。然后附加一个事件(双击标记名称)以运行查询,以根据Tag列表中fkProductID字段的值是否为null来插入或删除ProductTag表中的记录。
您可以在TagList表单上使用条件格式来显示所选标签,或使用单独的表单显示当前产品的标签。
我希望这是有道理的..你可以在这里找到一个'快速肮脏'的工作示例,如果这有帮助,因为我看不到上传文件的方法:https://drive.google.com/folderview?id=0B0J_JolN6f8GOXpKVVZJTHVJTWM&usp=sharing