Как я могу использовать формы в базе libreoffice для добавления / изменения данных в отношениях "многие ко многим"?

По сути, я пытаюсь создать прославленный список контактов с помощью LibreOffice Base. Многие из наших контактов имеют несколько адресов (офис, почта, дом), и иногда несколько человек имеют один и тот же адрес.

Я создал простую таблицу контактов с идентификатором контакта, фамилией и именем. Я создал таблицу адресов с идентификатором адреса, города, штата и т. Д. Я также создал таблицу соединений с идентификатором контакта и идентификатором адреса и соединил три таблицы с помощью инструмента связей.

Теперь я хочу добавить все в одну форму. Я смотрел это видео на YouTube, которое было очень полезным, но я хочу иметь возможность добавлять новые города, а не только выбирать из заранее установленного списка. Поэтому я последовал за видео, но установил в столбцах "поле со списком" вместо "список". Однако, когда я пытаюсь это сделать, я получаю сообщение об ошибке:

Ошибка при вставке новой записи

Состояние SQL: 23000 Код ошибки: -177

Нарушение ограничения целостности - нет родительской таблицы SYS_FK_94: Таблица адресов в операторе [INSERT INTO "Контакт-адрес-соединение" ( "Идентификатор адреса","Контактный идентификатор") ЗНАЧЕНИЯ (?,?)]

Я предполагаю, что есть кое-что очевидное, что я пропускаю, но в этот момент я довольно застрял.

E: Я сделал больше скриншотов, чтобы показать отношения, таблицы и как все соединяется в форме:

введите описание изображения здесь
введите описание изображения здесь
введите описание изображения здесь
введите описание изображения здесь
введите описание изображения здесь

1 ответ

В видео, которое вы цитируете, это глупо, потому что нет необходимости во многих отношениях. Автор мог бы просто добавить поле "Идентификатор фильма" в таблицу жанров (таким образом, несколько записей жанров могут указывать на каждую запись фильма).

У меня сложная структура контактов "многие ко многим", которую я перевожу из MS Access в LibreOffice. Он имеет 4 основные таблицы данных: группы, адреса, телефоны и люди. И есть 6 таблиц ссылок для подключения этих первичных таблиц: GroupAddress, GroupPhone, GroupPerson; AddressPhone, AddressPerson; и наконец PhonePerson. В отличие от видео, которое вы цитируете выше только с двумя полями, в моих таблицах ссылок есть три поля. Например, GroupAddress имеет GroupAddressID (уникальный идентификатор для самой таблицы ссылок), GroupID (который указывает на таблицу групп) и 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 форм редактирования для редактирования групп и ссылок, связанных с группой:

Надеюсь это поможет. Мне было бы интересно посмотреть, что вы развиваете. Благодарю.

Другие вопросы по тегам