Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.11.2015, 12:47
funchosa funchosa вне форума
Прохожий
 
Регистрация: 03.11.2015
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Обновление записи в связанных таблицах

Здраствуйте,

возник вопрос. Как программно сделать, так что бы при изменении записи в таблице, изменялись так же запись в связанных таблицах.

Удаление записи в связанных таблицах делал с помощью события OnBeforeDelete. А вот изменение записи в связанных таблицах с помощью события OnBeforEdit, почему то не прокатывает...
Ответить с цитированием
  #2  
Старый 03.11.2015, 15:50
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Не знаю правда, зачем программно это делать, когда на уровне движка для большинства СУDB существуют такие вкусности как триггера и процедурные сохранки, можно один раз подобное засоздать прям в среде, и больше не вспоминать

Цитата:
...
Обновление связанных таблиц
Если в наборе данных содержится несколько таблиц, то их необходимо модифицировать индивидуально, вызывая отдельно метод Update каждого адаптера данных. Если таблицы имеют реляционные отношения, то потребуется специфическое обновление базы данных.
Обычно в этом случае изменяются и родительская и связанные дочерние записи набора данных. Например, при добавлении нового клиента формируется одна или более связанных записей заказов этого клиента. Если в самой базе данных заданы правила обеспечения целостности, то при обновлении возможно возникновение ошибок. Например, если переслать в базу данных вновь появившиеся дочерние записи раньше, чем была переслана родительская запись. Поэтому необходимо выполнять определенную последовательность в пересылке: сначала должны послаться новые родительские записи, а потом дочерние.
Наоборот, если вы удаляете связанные записи в наборе данных, необходимо посылать обновления в базу данных в обратном порядке: сначала от дочерней таблицы, потом от родительской. В противном случае при обновлении информации в базе данных возникнет ошибка, потому что правила обеспечения целостности не позволят удалить родительскую запись, пока существуют связанные дочерние записи.
Последовательность обновления связанных таблиц
При обновлении связанных таблиц набора данных очень важно соблюдать определенную последовательность, чтобы не нарушить целостность данных основного источника и не сгенерировать ошибочную ситуацию. Чтобы предотвратить возможные ошибки нарушения целостности данных необходимо модернизировать источник данных в следующей последовательности:
Q дочерняя таблица: удалить записи;
Q родительская таблица: добавить, изменить или удалить записи;
Q дочерняя таблица: добавить или изменить записи.
Для модернизации источника данных из набора данных, который содержит две или более связанных таблиц вызовите метод Update каждого адаптера
данных
...
Похоже всёж BeforeEdit нужно терзать, потому как там прописывается условия для событий связанного набора данных, а может просто метод Post не был вызван, без кода не видно
Ответить с цитированием
  #3  
Старый 03.11.2015, 16:53
funchosa funchosa вне форума
Прохожий
 
Регистрация: 03.11.2015
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Не знаю правда, зачем программно это делать, когда на уровне движка для большинства СУDB существуют такие вкусности как триггера и процедурные сохранки, можно один раз подобное засоздать прям в среде, и больше не вспоминать


Похоже всёж BeforeEdit нужно терзать, потому как там прописывается условия для событий связанного набора данных, а может просто метод Post не был вызван, без кода не видно

да действительно про Post совсем не подумал, я в этом еще полный новичок

Последний раз редактировалось funchosa, 07.11.2015 в 21:07.
Ответить с цитированием
  #4  
Старый 03.11.2015, 18:14
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Edit переводит запись в режим редактирования, но изменения будут внесены лишь после вызова Post, этот метод делает следующее: записывает новые/изменённые данные физически в таблицу, затем снимает блокировку с этой записи и переводит её обратно в режим просмотра. Если в визуальных компонентах изменения не сразу отображаются, то тогда нужно вызвать метод Refresh, а при выходе из программы желательно выполнить, если не ошибаюсь, ещё и UpdateBatch
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:46.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter