Как я могу использовать формы в базе 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 форм редактирования для редактирования групп и ссылок, связанных с группой:
Надеюсь это поможет. Мне было бы интересно посмотреть, что вы развиваете. Благодарю.