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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.05.2012, 00:50
coolon coolon вне форума
Прохожий
 
Регистрация: 15.10.2010
Сообщения: 16
Репутация: 131
По умолчанию Банальный вопрос...

Прошу прощения если повторюсь но суть вопроса следующая.
Возможно ли добавление с помощью Query записи в несколько связанных таблиц. Проблема в следующем есть схема БД. В приложении форма для заполнения и данные в из этой формы должны записываться в разные таблицы. Если быть точным то в 4 одновременно ну и соответственно без нарушения связей базы.
Как реализовать ума не приложу. С помощью Table в принципе понимаю только не знаю как работать с ключевыми полями. Если не трудно объясните пожалуйста....
Изображения
Тип файла: jpg схема.JPG (35.9 Кбайт, 19 просмотров)
Ответить с цитированием
  #2  
Старый 04.05.2012, 01:51
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,031
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Для этого сущесвует несколько способов.
Собственно, если перефразировать задачу, то надо не то, что бы за один запрос вставить данные в несколько таблиц, а просто обеспечить вставку либо всех данных, либо никаких.

Способ первый, применяемый достаточно редко - создание view с тригерами на insert и update (ну и delete). Недостатки: 1. Надо поддерживать дополнительные объекты в БД. 2. Не всегда возможно применение (в зависимости от струкруры данных).

Способ второй. Хранимая процедура. Все действия выполняются одним вызовом с клиента. Однако, опять же требуется поддержка доп. объекта, да и при большом кол-ве параметров имеет место быть некоторое неудобство.

Способ третий. Транзакция. Позволяет выполнить несколько запросов как один. Т.е. если где-то происходит ошибка, то просто откатывается вся транзакция и получается, как будто бы ничего не делали.
Ответить с цитированием
  #3  
Старый 04.05.2012, 07:10
coolon coolon вне форума
Прохожий
 
Регистрация: 15.10.2010
Сообщения: 16
Репутация: 131
По умолчанию

Про транзакции я слышал. Именно это и пришло в голову. Но как реализовать не знаю если не трудно то можно пример....

По моей схеме БД. Суть транзакции: добавление записи в таблицу Uvedomlenie и двух связанных с ней таблиц Rels и Defp
Буду очень благодарен особенно если по подробнее объясните как первичный ключ из главных поместить в подчиненную....
Ответить с цитированием
  #4  
Старый 06.05.2012, 16:14
Аватар для Voron
Voron Voron вне форума
Новичок
 
Регистрация: 16.09.2010
Сообщения: 61
Репутация: 10
По умолчанию

Подобную проблему я как-то решал. Использовал 2 метода:
1. Можно написать хранимую процедуру, передавать в нее параметры добавляемых данных, и внутри нее реализовывать логику добавления.
2. Создать модуль-парсер, в который будет загружаться последовательность команд insert/update и выполняться в определенной последовательности, следуя логике БД.
Ответить с цитированием
  #5  
Старый 06.05.2012, 17:56
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

Цитата:
Сообщение от lmikle
Способ второй. Хранимая процедура. Все действия выполняются одним вызовом с клиента
в данном случае, как мне кажется, это будет оптимальный вариант
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #6  
Старый 10.05.2012, 18:10
coolon coolon вне форума
Прохожий
 
Регистрация: 15.10.2010
Сообщения: 16
Репутация: 131
По умолчанию

спасибо большое. А пример хоть какой нибудь не подскажите?
Ответить с цитированием
  #7  
Старый 10.05.2012, 18:43
Vocabulary Vocabulary вне форума
Новичок
 
Регистрация: 17.09.2009
Сообщения: 85
Репутация: 9
По умолчанию

А открыть секрет, какая СУБД у нас - сложно?
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter