[英]MS Access sub-subform data entry
我正在构建一个通信/任务记录系统,该系统记录传入的通信并根据它们分配任务。
我的数据库有一个便笺系统,以便用户可以对各种事情做便笺-例如,客户记录中可能有一个便笺,上面写着“该客户总是订购自己的窗框玻璃”。 所有这些操作都通过一个单独的“ Notes”表进行处理,该表具有一个PrimaryNoteTableID
和一个PrimaryTablePK
字段,该静态查找表标识了该注释所适用的主表,该静态查找表标识了该注释所适用的主表, PrimaryTablePK
字段存储了该表在该表中的记录。
为了避免损坏,建议将备注字段保留在自己的表中,该表与它们的父表保持1:1的关系( 请参阅此处 ),这是我所做的。
在添加新的通信和任务时,用户通常将需要添加以下内容:
考虑到这一点,我有:
tblCommTaskLog
,其字段为CommDate
, ActionRequiredTypeID(FK)
, ActionDeadlineDays
, CommAccountID(FK)
等。
tblNote
具有: NoteID(PK)
, PrimaryNoteTableID(FK)
PrimaryTablePK(FK)
, EnteredByUserID(FK)
, EntryDate
EnteredByUserID(FK)
, EntryDate
。
tblNoteText
与NoteTextID(PK)
, NoteID(FK)
, NoteText(Memo)
其中一些是其他表的外键,这些表应该是不言自明的。
本质上,我遇到问题的是这三个表的输入表单。 我发现子窗体的Access处理可能非常愚蠢,例如:
我想只是从田野tblCommTaskLog
和NoteText
一种形式的领域,从而使从细节用户填写tblCommTaskLog
(ActionRequired等)和注释文本,点击“保存”按钮,然后通过代码这些项目已正确保存,例如:
tblCommTaskLog
创建一个新记录,例如PK为72
(自动编号)。 tblNote
与PrimaryNoteTableID
的4
对应于tblCommTaskLog
,一个PrimaryTablePK
的72
和PK NoteID
例如422
(自动编号)。 tblNoteText
创建一个新记录,其NoteID
为422。 我认为我需要的是一种主要形式,其中包含来自tblCommTask
的字段以及未绑定的文本字段,以接收NoteText
的输入。 我只是不知道如何在tblNote
创建新记录,从该字段中获取AutonumberPK并将其插入tblNoteText
的FK中, tblNoteText
使所有内容都与正确的FK正确链接在一起。 我可以使用SQL INSERT然后在Autonumber字段上使用SELECT TOP来做到这一点吗? 使用Recordsets和Lastmodified这样做会更好吗? 还有我没有想到的其他方法吗?
@whatEvil:
您仍然可以将其设置为1:M。 如果允许您更改主表,请对其进行更改并添加
在您的tbl_note中
现在您只需执行1:M关系即可。 GUID是“全局唯一标识符”。 您所有的主表都将产生一个唯一键,您可以在任何阶段简单地将它们联接,而无需考虑它属于哪个表或如何保存父表名。
当然,您需要一个自定义函数来获取GUID:使用此代码创建一个
Public Function GET_UUID() As String
With CreateObject("Scriptlet.TypeLib")
GET_UUID = VBA.Left(.GUID, 38)
End With
End Function
编辑:想法是在每个主表(GUID / UUID)中都有一个全局唯一ID。 然后将其用于连接您的主要表和注释表。 注意:您需要在每个主表中添加一个触发器(在插入之前),以产生一个GUID。 另请注意,MS访问将其称为DataMacro(检查您的版本是否支持datamacro)有关datamacro的更多信息: https : //support.office.com/en-ca/article/Create-a-data-macro-b1b94bca-4f17-47ad- a66d-f296ef834200?ui = zh-CN&rs = en-CA&ad = CA
为什么这样呢? 当前,您的主表正在生成自动编号,一个或多个表可能具有相同的ID号。 毕竟,自动编号仅在整个表中唯一,而不在整个数据库中唯一。 为避免重复,您要添加另一个键(表标识键)以标识外键所属的主表。 这听起来很不错,直到您对主表进行了一次错误的更新,并为便笺ID设置了错误的值。
通过使用GUID,无论有多少个主表参与,您都可以简单地保持1:m关系。 我个人也喜欢GUID的想法,以防您的应用程序增长并且在整个数据库中需要真正的唯一ID。 这完全取决于您,您想走哪条路,我只是解释了一种方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.