【问题标题】:How can I use forms in libreoffice base to add/modify data in a many-to-many relationship?如何使用 libreoffice 基础中的表单以多对多关系添加/修改数据?
【发布时间】:2017-12-05 20:03:25
【问题描述】:

我实际上是在尝试使用 LibreOffice Base 创建一个美化的联系人列表。我们的许多联系人都有多个地址(办公室、邮寄地址、家庭),有时多个人有相同的地址。

我创建了一个简单的联系人表,其中包含联系人 ID、姓氏和名字。我创建了一个包含地址 ID、城市、州等的地址表。我还创建了一个包含联系人 ID 和地址 ID 的联结表,并使用关系工具连接了三个表。

现在我想将所有内容添加到一个表单中。我看了this youtube video,这很有帮助,但我希望能够添加新城市,而不是只从预先建立的列表中进行选择。所以我跟着视频,但将列设置为“组合框”而不是“列表框”。但是,当我尝试时,我收到一条错误消息:

插入新记录时出错

SQL 状态:23000 错误代码:-177

违反完整性约束 - 没有父 SYS_FK_94 表:地址表在语句 [INSERT INTO "Contact-Address Junction" ("Address ID","Contact ID") VALUES (?,?)]

我认为我缺少一些明显的东西,但在这一点上我很困惑。

E:我截取了更多的屏幕截图来展示表格中的关系、表格以及事物如何连接:





【问题讨论】:

  • 您的“外键”是否与父表中的对应项完全匹配?
  • 我之所以问,是因为 Google 搜索 similar problems 表明在这种情况下最有可能的问题是外键违规。
  • 我不认为是这样 - 如果我使用的是列表框,而不是组合框,则表单可以工作。不过,我不是 100% 确定,因为我还是个新手
  • 联结表应该有两个字段,1)两个字段需要指定为“key”字段,2)在Relationship设计中,这两个字段需要使用从原始表键延伸到相应联结表键的 1 对多关系(1 到 n)线连接到其他两个表的主字段。请检查这一点,甚至考虑发布一个指向图像的链接,以显示您的表格编辑的样子,以及您的关系是什么样的。如果您发布图片链接,我可以编辑您的问题并在您的问题中显示图片。
  • 例如,为您的人际关系链接到this 之类的图像。

标签: sql database many-to-many libreoffice-base


【解决方案1】:

在您引用的视频中,这有点愚蠢,因为不需要多对多关系。作者可以简单地将电影 ID 字段添加到流派表中(因此多个流派记录可以指向每个电影记录)。

我有一个复杂的多对多联系人结构,我正在将其从 MS Access 移植到 LibreOffice。它有 4 个主要数据表:组、地址、电话和人员。并且有 6 个链接表来连接这些主表:GroupAddress、GroupPhone、GroupPerson;地址电话,地址人;最后是PhonePerson。与您上面引用的只有 2 个字段的视频不同,在我的链接表中有 3 个字段。例如,GroupAddress 具有 GroupAddressID(链接表本身的唯一 ID)、GroupID(指向 Groups 表)和 AddressID(指向地址表)。这允许每个组有任意数量的地址,同时每个地址可以有任意数量的组。

所以整个事情具有最大的数据灵活性:例如,它允许每组无限数量的人,每个人可以拥有无​​限数量的电话或地址,每个地址无限数量的人,等等。

在 LO 中实现它:因为在 LO 中您不能编辑基于多个表的查询(您可以查看它,但不能编辑它),就像在 Access 中一样,(因此您也不能使用可以编辑基于多个表的查询的表构建一个表单),在 LO 中,这不像在 Access 中那样干净。

在 Access 中,它运行良好,并且链接表可以自行管理!在 LO 中,您必须在单独的表中手动编辑链接表。我开始考虑如何使用一些宏来改进这一点,但目前还只是简单的框架。

为了让您更好地了解,编辑组的第一个表单,它还编辑组的地址、人员和电话(不仅是这些表格,还包括这些表格的链接)如下所示:


Group lookup pulldown (used to find a group record)  
(this is a drop down box with custom code that helps me find group records)

Group editing fields, e.g. Group name, category, url, etc

然后在下面

Group-Person links table

然后在右边

Persons table (plural) - to create new person, then..  

在此之下

Person table (singular)   
 [pointed to by Group-Person link]  
 to view person pointed to.

组地址链接 || (结构同上)
(例如,当一家企业有两个或更多地址时)


群组电话链接 || (结构同上)
(这是针对群组直接拥有的电话号码,而不是群组成员的个人电话,也不是与特定地址绑定的电话)。

---------

那么还有其他3种类似的形式,

一个用于带有人员、组和电话链接的地址;

一个用于带有组、地址和个人链接的电话;

一个用于带有组、地址和电话链接的人员;

这是 4 个编辑表单中的第一个的屏幕截图,用于编辑组和与组关联的链接:

希望这会有所帮助。我很想看看你的发展。谢谢。

【讨论】:

  • 我刚刚在 LINKS 下注意到:pID 在它下面的 3 个表中。此列可能会更好地与其基础字段数据一起标记:分别为个人 ID、地址 ID 和电话 ID。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 2021-03-05
相关资源
最近更新 更多