Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Базы данных и репортинг > Релизация связи один ко многим |
Автор: NonStopAaa 17.6.2009, 18:28 | ||
Значит маленькое описание: не ругайтесь на непродуманную реализацию, ибо курсовой проект и требования не мои)) тема инф. система футбольного сезона, так уж получилось ![]() Изначально БД исп. технологию ADO, состоящая из 5-6 таблиц с разными связями (1-1, 1-*, *-* и т.д.). Интересуют собственно ттолько 3 таблицы назовем их Clubs, Clubs_Matches и Matches. Соответственно каждому клубу из табл Clubs соответствуют к-либо записи из таблицы Matches, что фиксируется связующей Clubs_Matches (состоит из трех полей id_club, id_matcha, id_sv). В Clubs_Matches они добавляются методом AfterPost у набора данных Matches, то есть если мы добавляем матч, то в связующую добавляется две связи, т.к. два клуба. Собственно проблема: добавляется все отлично, но при редактировании записи в Matches (меняем клуб: там поле выбора) в связующей таблице запись не редактируется! необходимо чтобы она сама автоматически исправляла id_club на тот что мы поменяли. Было два варианта: 1 - добавить в таблицу Матчи два поля которые будут отвечать за айди связи, потом локейтом перемещаться на них и перезаписывать, но получается что в методе AfterPost табл Matches нам необходимо сохранить эту же таблицу после добавление айди связи => бесконечный цикл)) уже пробовала)
второй вариант: просто удалять старые поля и добавлять новые, даже при редактировании. находим также две записи локейтом, и удаляем, после чего добавляем новые как описано выше. Но не работает :( то есть то ли локейт не работает, старые записи не удаляются, только 2 новые добавляются :(((( Каким еще образоам можно заставить связующую таблицу автоматически редактироваться при изменении таблицы Матчи???? Помогите плз, завтра курсач сдавать :( |
Автор: Keeper89 17.6.2009, 19:24 |
Вообще ключевые поля не должны редактироваться. Если же это приходится делать, надо пройтись по всем таблицам и заменить старый индекс на новый. |
Автор: NonStopAaa 17.6.2009, 19:29 |
хм. редактируется не ключевое поле. редактируется содержимое связи. то есть а таблице Клубы_Матчи заменяется айди клуба на другой айди, а ключевое поле остается тем же. так вот этого сделать не получается. |
Автор: Keeper89 17.6.2009, 19:37 |
Стоп, глюкануло. Связи точно проставлены в таблицах? Добавлено через 5 минут и 59 секунд Прикрепи саму БД на всякий случай, если она в Эксесе. |
Автор: NonStopAaa 17.6.2009, 20:05 |
бд прикреплена через адо, сделана в аксесе. - связи все там проставлены, собственно бд генерировалась из ер-вина, так что связи там стопроцентно правильные.. собственно проблема в том что запись просто сохраняется в таблице связующей, что позволяет сделать динамический запрос для отображения данных. но не меняется запись при изменении данных которые она должна связывать. |
Автор: NonStopAaa 17.6.2009, 20:28 |
проверила. связи стоят, целостность и каскадное обновление стоит. ![]() |
Автор: Keeper89 17.6.2009, 20:53 |
Прикрепи базу+проект здесь к посту, я посмотрю. |
Автор: NonStopAaa 17.6.2009, 21:06 |
он весит пять метров(( плюс для отображения таблиц нужен QuantumGrid. Если б меньше весил, я бы скинула ![]() |
Автор: Keeper89 17.6.2009, 21:09 |
Вообще странно... попробуй так: при обновлении поля в главной таблице, меняй его во всех сводных. Простым запросом UPDATE можно. |
Автор: flomaster 18.6.2009, 18:12 |
Вы явно накосячили со структурой базы и со связями. Даже хорошим инструментом можно по пальцу садануть. Архиватором пользоватья умеете? Ваш 5Мб-й мдб-шник в архиве превратится в 20кб. Сожмите и выкладывайте. С телепатами сегодня туго. |