Программы "Простой софт" www.prostoysoft.ru

ВНИМАНИЕ! РЕКЛАМНЫЕ СООБЩЕНИЯ И ГИПЕРССЫЛКИ В ФОРУМЕ ЗАПРЕЩЕНЫ (посты удаляются автоматически часто с пользователем)
Текущее время: 07.07.2022 00:14

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 54 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Подчиненная таблица не активна.
СообщениеДобавлено: 10.06.2014 13:02 
Не в сети

Зарегистрирован: 15.04.2014 10:50
Сообщения: 58
Здравствуйте :)

В каком случае подчиненная таблица подключается без возможности редактирования? Я сформировал представление (запрос), в котором посредством JOIN добавляется вычисляемое поле из другой таблицы. По этому полю делается связь подчинения с основной таблицей. Я предполагаю, что это из-за того, что поле связи - калькулироемое.
Но если его делать хранимым, то, поскольку оно джойнится из другой таблицы, в случае добавления записи в подчиняемом представлении добавятся строки в обеих таблицах, из которых оно собирается. Как правильно "разрулить" эту ситуацию?

_________________
Все сообщения относятся к программе "Мои диски" версии 2.х, актуальной на момент написания.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 10.06.2014 20:21 
Не в сети

Зарегистрирован: 25.04.2012 10:09
Сообщения: 2233
Откуда: Жуковский, Московская область
Естественно подчиненная таблица будет только для чтения, т.к. невозможно при добавлении записи в нее присвоить значение вычисляемому полю! Связь может строиться только по хранимым полям, иначе будет такая ситуация.

_________________
90% ответов на ваши вопросы находятся в руководстве, разделах "Вопросы" и "Видео" на нашем сайте.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 10.06.2014 20:23 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3851
Откуда: Санкт-Петербург
Создайте хранимое поле вместо вычисляемого, заполняемое по триггеру. Оно хоть и создает избыточность хранения данных, но является очень удобным решением многих подобных проблем.

_________________
2B OR NOT 2B = TRUE


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11.06.2014 09:22 
Не в сети

Зарегистрирован: 15.04.2014 10:50
Сообщения: 58
Спасибо за ответы. Но структура моей базы такова, что это поле не может быть хранимым. Есть таблица Compositions, в которую записываются уникальные версии без повторов. Есть таблица Albums, в которой перечислены альбомы. Бывает так, что в одна и та же композиция входит в несколько сборников, альбомов. Мне нужно это отслеживать, поэтому каждая запись в таблице Композиции должна быть уникальна. И есть таблица связей TracksPerAlbum, в которой сопоставляются CompositionID, AlbumID (по которым я легко могу сделать выборку повторов), а также есть поле порядкового номера в альбоме. Поэтому при выводе данных о содержании альбома в запросе к таблице Compositions джойнится таблица TracksPerAlbum, и данные отсеиваются по полю AlbumID. Если делать это поле хранимое, то тогда при добавлении новой строчки в форму будет создаваться новая строка в обеих таблицах, чего мне бы не хотелось...

У меня есть некоторые знания БД, но я не профессионал, так что вполне возможно, есть более красивое и правильное решение. Буду благодарен советам.

UPD: Попробовал сделать поле в запросе хранимым, редактирование стало возможным. Но при добавлении новой строки возникает предупреждение: "Внесено повторяющееся значение в уникальное поле!". Как такое может быть, если уникальное поле не доступно для редактирования и является автоинкрементным? Эта ошибка возникает, если я ввожу значения через подчиненный вид. Если открыть представление в окне и вводить строку там, ошибка не возникает.

_________________
Все сообщения относятся к программе "Мои диски" версии 2.х, актуальной на момент написания.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11.06.2014 15:56 
Не в сети

Зарегистрирован: 25.04.2012 10:09
Сообщения: 2233
Откуда: Жуковский, Московская область
А какой тип связи у таблиц Альбомы и Композиции?

_________________
90% ответов на ваши вопросы находятся в руководстве, разделах "Вопросы" и "Видео" на нашем сайте.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11.06.2014 23:14 
Не в сети

Зарегистрирован: 15.04.2014 10:50
Сообщения: 58
OMEN писал(а):
А какой тип связи у таблиц Альбомы и Композиции?

Orion33 писал(а):
И есть таблица связей TracksPerAlbum, в которой сопоставляются CompositionID, AlbumID (по которым я легко могу сделать выборку повторов), а также есть поле порядкового номера в альбоме.

Таким образом, для вывода в виде подчиненной таблицы нужно сформировать виртуальную таблицу-запрос, в котором к таблице композиций джойнится таблица треков по CompositionID, а затем формируется связь "Один ко многим" по полю AlbumID.

_________________
Все сообщения относятся к программе "Мои диски" версии 2.х, актуальной на момент написания.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 12.06.2014 20:15 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3851
Откуда: Санкт-Петербург
Пожалуйста, сопровождайте ваше описание поясняющими скриншотами. Иначе трудно понять.

_________________
2B OR NOT 2B = TRUE


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 12.06.2014 21:36 
Не в сети

Зарегистрирован: 25.04.2012 10:09
Сообщения: 2233
Откуда: Жуковский, Московская область
Orion33 писал(а):
Таким образом, для вывода в виде подчиненной таблицы нужно сформировать виртуальную таблицу-запрос, в котором к таблице композиций джойнится таблица треков по CompositionID, а затем формируется связь "Один ко многим" по полю AlbumID.
Упустил. Мне кажется, можно было бы обойтись и стандартным типом "Многие-ко-многим". Тогда бы не было таких проблем. Но опять же без скриншотов проблематично полностью вникнуть в суть вопроса.

_________________
90% ответов на ваши вопросы находятся в руководстве, разделах "Вопросы" и "Видео" на нашем сайте.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14.06.2014 00:18 
Не в сети

Зарегистрирован: 15.04.2014 10:50
Сообщения: 58
Просматривая ролик "Свойства таблиц и настройка полей" узнал про связь "Многие ко многим", которая, по идее, то, что нужно. Скачал демку программы "Учет книг", но там такой таблицы нет... Как быть? Не понятно, как этот механизм работает.

UPD. Разобрался, как подключать и делать связи. Но в таком режиме в подчиненной таблице редактирование также не доступно. Плюс не понятно, как в разных сборниках расставлять повторяющиеся треки, формируя треклист...

Картинки базы добавил. Запрос для формы "Содержание альбома":
Код:
SELECT C.ID, C.Composition AS CompositionCalc, C.Duration AS DurationCalc, C.Musician AS MusicianCalc, T.* FROM tblTracks AS T RIGHT JOIN tblCompositions AS C ON T.CompositionID = C.ID

Для "Композиции альбома":
Код:
SELECT c.*, A.ID AS AlbumIDCalc, t.CompositionID AS CompIDCalc FROM (tblCompositions AS c LEFT JOIN tblTracks AS t ON c.ID = t.CompositionID) LEFT JOIN tblMain AS A ON t.AlbumID = A.ID

Вложение:
PIC4.png
PIC4.png [ 215.72 КБ | Просмотров: 102359 ]

Вложение:
PIC5.png
PIC5.png [ 124.25 КБ | Просмотров: 102359 ]

Вложение:
PIC10.png
PIC10.png [ 197.58 КБ | Просмотров: 102359 ]

Прошу прощения за простыни, но тег spoiler у вас не работает. Может, проще базу выложить?

_________________
Все сообщения относятся к программе "Мои диски" версии 2.х, актуальной на момент написания.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14.06.2014 12:05 
Не в сети

Зарегистрирован: 25.04.2012 10:09
Сообщения: 2233
Откуда: Жуковский, Московская область
Что-то не так вы делаете, редактирование в т.ч. и при связи «многие-ко-многим» должно быть доступно, если только у Вас подчиненная таблица не является представлением, построенным по необновляемому запросу.
P.S. И соблюдайте правила форума, конкретно п.5 !

_________________
90% ответов на ваши вопросы находятся в руководстве, разделах "Вопросы" и "Видео" на нашем сайте.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14.06.2014 12:14 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3851
Откуда: Санкт-Петербург
1. Старая версия программы. Надо обновиться. Это раз!
2. При связи "Многие-ко-многим" в подчиненную таблицу добавляется только ссылка на запись из другой таблицы. А редактировать эту запись здесь зачем? Ее нужно редактировать в справочнике. Причем поведение при установленной галочке "Редактирование в форме" и без различное (если не ошибаюсь).
В общем, прежде всего обновление, потом рассматриваем возможность редактирования.

_________________
2B OR NOT 2B = TRUE


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14.06.2014 12:56 
Не в сети

Зарегистрирован: 15.04.2014 10:50
Сообщения: 58
OMEN писал(а):
И соблюдайте правила форума, конкретно п.5 !

К сожалению, не смог найти, где почитать...
Ivan писал(а):
1. Старая версия программы. Надо обновиться. Это раз!

Скачал обновление. Кроме отличия иконки в сообщении о запрете редактирования ничего не заметил.
Ivan писал(а):
2. При связи "Многие-ко-многим" в подчиненную таблицу добавляется только ссылка на запись из другой таблицы. А редактировать эту запись здесь зачем? Ее нужно редактировать в справочнике. Причем поведение при установленной галочке "Редактирование в форме" и без различное (если не ошибаюсь).

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

Пока база находится на стадии создания и отладки, я для удобства таблицы и запросы назвал по-разному: таблица так и называется, а запрос называется "Форма" (я посчитал, что qdf - это, видимо, queried data form :lol: )

Решил проверить, что будет при добавлении из формы "Композиции альбома". Запрос изменил, убрав признак вычисляемого поля:
Код:
SELECT c.*, A.ID AS AlbumID, t.CompositionID AS CompID FROM (tblCompositions AS c LEFT JOIN tblTracks AS t ON c.ID = t.CompositionID) LEFT JOIN tblMain AS A ON t.AlbumID = A.ID

По-прежнему выскакивает такая ошибка:
Вложение:
PIC4.png
PIC4.png [ 17.35 КБ | Просмотров: 102348 ]

_________________
Все сообщения относятся к программе "Мои диски" версии 2.х, актуальной на момент написания.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14.06.2014 21:36 
Не в сети

Зарегистрирован: 25.04.2012 10:09
Сообщения: 2233
Откуда: Жуковский, Московская область
Orion33 писал(а):
OMEN писал(а):
И соблюдайте правила форума, конкретно п.5 !

К сожалению, не смог найти, где почитать...
:shock:
Самая верхняя тема в любом форуме, в объявлениях!

_________________
90% ответов на ваши вопросы находятся в руководстве, разделах "Вопросы" и "Видео" на нашем сайте.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14.06.2014 23:09 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3851
Откуда: Санкт-Петербург
Orion33,
снимите видео файл и обратитесь к нам в поддержку с копией БД. Как снять видео, у нас сказано по ссылке "Поддержка".
Рассмотрим, поможем. Лишние и конфиденциальные данные можно удалить в копии.

_________________
2B OR NOT 2B = TRUE


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14.06.2014 23:42 
Не в сети

Зарегистрирован: 15.04.2014 10:50
Сообщения: 58
Спасибо. А без видео можно?
Получается, отсутствие возможности редактирования в подчиненной таблице по "многие ко многим" - это не ограничение движка?

_________________
Все сообщения относятся к программе "Мои диски" версии 2.х, актуальной на момент написания.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 54 ]  На страницу 1, 2, 3, 4  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB