Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Релизация связи один ко многим, помогите плз :'( 
:(
    Опции темы
NonStopAaa
  Дата 17.6.2009, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 17.6.2009

Репутация: нет
Всего: нет



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

procedure TDM.MatchesBeforePost(DataSet: TDataSet);
begin
 If DM.Matches.State=dsInsert then
  Dobavit_v_Clubs_Matches:=true;
  end;

procedure TDM.MatchesAfterPost(DataSet: TDataSet);
begin
       with DM do begin
  if Dobavit_v_Clubs_Matches=true then begin
     Clubs_Matches.Append;
     Clubs_Matches.FieldByName('id_club').AsVariant:=Matches.FieldByName('id_club1').AsVariant;
     Clubs_Matches.FieldByName('id_matcha').AsVariant:=Matches.FieldByName('id_matcha').AsVariant;
     Clubs_Matches.Post;
     Matches.Append;
     Matches.FieldByName('id_sv1').AsVariant:=Clubs_Matches.FieldByName('id_sv').AsVariant;
     Matches.Post;
     Clubs_Matches.Append;
     Clubs_Matches.FieldByName('id_club').AsVariant:=Matches.FieldByName('id_club2').AsVariant;
     Clubs_Matches.FieldByName('id_matcha').AsVariant:=Matches.FieldByName('id_matcha').AsVariant;
     Clubs_Matches.Post;
     Matches.Append;
     Matches.FieldByName('id_sv2').AsVariant:=Clubs_Matches.FieldByName('id_sv').AsVariant;
     Matches.Post;
     end
  else begin

  Clubs_Matches.Locate('id_sv',Matches.FieldByName('id_sv1').AsVariant,[]);
  Clubs_Matches.FieldByName('id_club').AsVariant:=Matches.FieldByName('id_club1').AsVariant;
  Clubs_Matches.Locate('id_sv',Matches.FieldByName('id_sv2').AsVariant,[]);
  Clubs_Matches.FieldByName('id_club').AsVariant:=Matches.FieldByName('id_club2').AsVariant;
  Clubs_Matches.Post;
          Dobavit_v_Clubs_Matches:=false;
  end;
end; end;

  второй вариант: просто удалять старые поля и добавлять новые, даже при редактировании. находим также две записи локейтом, и удаляем, после чего добавляем новые как описано выше. Но не работает :( то есть то ли локейт не работает, старые записи не удаляются, только 2 новые добавляются :(((( 

Каким еще образоам можно заставить связующую таблицу автоматически редактироваться при изменении таблицы Матчи????
Помогите плз, завтра курсач сдавать :(

Это сообщение отредактировал(а) Rrader - 17.6.2009, 18:31
PM MAIL ICQ   Вверх
Keeper89
Дата 17.6.2009, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 1
Всего: 58



Вообще ключевые поля не должны редактироваться. Если же это приходится делать, надо пройтись по всем таблицам и заменить старый индекс на новый.


--------------------
PM MAIL WWW   Вверх
NonStopAaa
Дата 17.6.2009, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 17.6.2009

Репутация: нет
Всего: нет



хм. редактируется не ключевое поле. редактируется содержимое связи. то есть а таблице Клубы_Матчи заменяется айди клуба на другой айди, а ключевое поле остается тем же. так вот этого сделать не получается.
PM MAIL ICQ   Вверх
Keeper89
Дата 17.6.2009, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 1
Всего: 58



Стоп, глюкануло. Связи точно проставлены в таблицах?

Добавлено через 5 минут и 59 секунд
Прикрепи саму БД на всякий случай, если она в Эксесе.


--------------------
PM MAIL WWW   Вверх
NonStopAaa
Дата 17.6.2009, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 17.6.2009

Репутация: нет
Всего: нет



бд прикреплена через адо, сделана в аксесе. - связи все там проставлены, собственно бд генерировалась из ер-вина, так что связи там стопроцентно правильные.. собственно проблема в том что запись просто сохраняется в таблице связующей, что позволяет сделать динамический запрос для отображения данных. но не меняется запись при изменении данных которые она должна связывать. 
PM MAIL ICQ   Вверх
Keeper89
Дата 17.6.2009, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 1
Всего: 58



Цитата(NonStopAaa @  17.6.2009,  21:05 Найти цитируемый пост)
собственно проблема в том что запись просто сохраняется в таблице связующей, что позволяет сделать динамический запрос для отображения данных. но не меняется запись при изменении данных которые она должна связывать.  

что значит ПРОСТО сохраняется? ErWin Erwin'ом, но еще раз советую проверить схему данных Access, только что проверил у себя БД - есть связи, все меняется.


--------------------
PM MAIL WWW   Вверх
NonStopAaa
Дата 17.6.2009, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 17.6.2009

Репутация: нет
Всего: нет



проверила. связи стоят, целостность и каскадное обновление стоит.  smile 
PM MAIL ICQ   Вверх
Keeper89
Дата 17.6.2009, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 1
Всего: 58



Прикрепи базу+проект здесь к посту, я посмотрю.

Это сообщение отредактировал(а) Keeper89 - 17.6.2009, 20:55


--------------------
PM MAIL WWW   Вверх
NonStopAaa
Дата 17.6.2009, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 17.6.2009

Репутация: нет
Всего: нет



он весит пять метров(( плюс для отображения таблиц нужен QuantumGrid. Если б меньше весил, я бы скинула smile
PM MAIL ICQ   Вверх
Keeper89
Дата 17.6.2009, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 1
Всего: 58



Вообще странно...
попробуй так: при обновлении поля в главной таблице, меняй его во всех сводных. Простым запросом UPDATE можно.


--------------------
PM MAIL WWW   Вверх
flomaster
Дата 18.6.2009, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 28.12.2007
Где: СПб

Репутация: нет
Всего: нет



Вы явно накосячили со структурой базы и со связями.
Даже хорошим инструментом можно по пальцу садануть.
Архиватором пользоватья умеете?
Ваш 5Мб-й мдб-шник в архиве превратится в 20кб. Сожмите и выкладывайте. 
С телепатами сегодня туго.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0955 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.