【发布时间】:2014-12-02 19:52:09
【问题描述】:
我正在构建一个通信/任务记录系统,用于记录传入的通信并根据它们分配任务。
我的数据库有一个笔记系统,这样用户就可以对各种各样的事情做笔记——例如。客户记录可能有一条注释,上面写着“该客户总是订购自己的窗框玻璃”。这一切都是通过一个“Notes”表处理的,该表有一个PrimaryNoteTableID,它链接到一个静态查找表,该表标识了注释适用的主表,还有一个PrimaryTablePK字段,用于存储该记录的PK它适用的表。
为了避免损坏,建议将备注字段保留在自己的表中,并与其父表 (see here) 保持 1:1 的关系,这就是我所做的。
当添加新的通信和任务时,用户通常会想要添加以下内容:
- 通讯对象的详细信息。
- 通信的主题。
- 所需操作的类型和该操作的截止日期。
- 附有已讨论内容等详细信息的注释。
考虑到这一点,我有:
tblCommTaskLog 带有字段CommDate、ActionRequiredTypeID(FK)、ActionDeadlineDays、CommAccountID(FK) 等
tblNote 与:NoteID(PK)、PrimaryNoteTableID(FK)、PrimaryTablePK(FK)、EnteredByUserID(FK)、EntryDate。
tblNoteText 与 NoteTextID(PK)、NoteID(FK)、NoteText(Memo)
其中一些是其他表的外键,应该是不言自明的。
基本上我遇到的问题是这三个表格的输入表格。我发现子表单的 Access 处理可能非常愚蠢,例如:
- 如果您想使用子表单或子表单的子表单,您会被锁定以某种方式显示内容。
- Access 会在您单击保存之前保存记录。它还将记录保存在子表单中,这些记录无法通过表单代码中的简单“me.undo”处理,导致您必须在子表单中找到记录并使用代码将其删除。
- 子表单以愚蠢的方式行事,因为它们分配自动编号 PK 并在子表单和主表单之间的链接中选择这些。
我只想在一个表单上包含来自 tblCommTaskLog 和 NoteText 字段的字段,以便用户填写来自 tblCommTaskLog 的详细信息(ActionRequired 等)和注释文本,点击“保存”按钮,然后通过代码正确保存项目,例如:
- 在
tblCommTaskLog中创建了一条新记录,例如72的 PK(自动编号)。 - 在
tblNote中创建了一条新记录,其中PrimaryNoteTableID对应于4,对应于tblCommTaskLog,PrimaryTablePK对应72和PKNoteID,例如422(自动编号)。 - 在
tblNoteText中创建了一条新记录,其中NoteID为422。
我认为我需要一个主表单,其中包含来自tblCommTask 的字段和一个未绑定的文本字段来获取NoteText 的输入。我只是不知道如何在 tblNote 中创建新记录,从该字段中获取 AutonumberPK 并将其插入到 tblNoteText 的 FK 中,以便所有内容都与正确的 FK 正确链接在一起。我可以使用 SQL INSERT 然后在 Autonumber 字段上使用 SELECT TOP 来执行此操作吗?使用 Recordsets 和 Lastmodified 这样做会更好吗?还有其他我没有想到的方法吗?
【问题讨论】:
-
你有多少个主表?为什么不为每个 [customers, users, xxx, asdb] 使用注释表,这样您就可以强制执行简单的 1:m 关系??
-
目前有 11 个表需要存储关于它们的注释。我确定这是做事的最佳方式here。
-
我不将便笺(备忘录类型)存储在自己的表中,并且多年来没有遭受数据库损坏的困扰。还有其他更重要的事情,例如拆分 FE / BE。
标签: sql database forms vba ms-access