Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2011, 23:26   #1
alexandro704
Пользователь
 
Регистрация: 18.04.2011
Сообщений: 15
По умолчанию Insert в несколько таблиц одновременно.

Доброго времени суток. Нуждаюсь в помоще.
Есть у меня база даних которая состоит из нескольких таблиц .

(Три таблицы заполнены , и они изменятся не будут.)
С помощью компонентов Zeos Access подключил базу к Делфи, делаю выборку всё работает. Базу я для примера заполнил вручную с помощью IBExpert.
Теперь же мне понадобилось через форму делфи добавлять записи в базу. И вот тут у меня возникла проблема.Как правильно?(С делфи работал года так 2 назад, а с базами не приходилось, только вот начинаю учить ).

Фамилия,Имя,Отчество, дата рождения табл. Persone
Должность табл. Posada
Дата прийома, и все эти связи табл Employee
LookupComboBox тоже выберают себе данные из уже заполненых таблиц.
Буду очень благодарен.
alexandro704 вне форума Ответить с цитированием
Старый 29.04.2011, 07:26   #2
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

когда выбираете из справочников сохраняйте id того что выбрали в переменную.... а потом эту переменную добавляйте в главную таблицу.
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 29.04.2011, 10:45   #3
alexandro704
Пользователь
 
Регистрация: 18.04.2011
Сообщений: 15
По умолчанию

Теоретически я понимаю что нужно сначала добавить записи в таблицу Persone (сохранить ID), потом добавить запись в таблицу Posada (сохранить ID), а в конце добавить остальные записи и сохраненные ID в Employee.
Но програмно я не понимаю как это реализовать. Может кто подкинет хотя бы какой-то пример.
alexandro704 вне форума Ответить с цитированием
Старый 29.04.2011, 10:57   #4
maLoy*508
Форумчанин
 
Аватар для maLoy*508
 
Регистрация: 28.03.2008
Сообщений: 672
По умолчанию

а чего должность нужно вводить руками? может лучше сделать выпадающий список? справочник должностей тоже лучше заполнить сразу....

в DBLookupComboBox есть свойсто KeyField (ключевое поле), ListField(отображаемое в списке поле)...
Код:
......
DBLookupComboBox.KeyValue ////будет содержать id выбранной записи...
.....
насчет одновременного insert-a в несколько таблиц - просто по очереди при помощи sql-запроса делаете insert в одну, потом в другую и т.д. таблицы....

Последний раз редактировалось maLoy*508; 29.04.2011 в 11:11.
maLoy*508 вне форума Ответить с цитированием
Старый 29.04.2011, 11:02   #5
alexandro704
Пользователь
 
Регистрация: 18.04.2011
Сообщений: 15
По умолчанию

Я зарание не знаю список всех должностей. Хотя есть вариант что бы добавлять вначале должность, а потом уже из списка делать выбор этой должности. Но это чертовски не удобно.
alexandro704 вне форума Ответить с цитированием
Старый 29.04.2011, 11:15   #6
maLoy*508
Форумчанин
 
Аватар для maLoy*508
 
Регистрация: 28.03.2008
Сообщений: 672
По умолчанию

Цитата:
Сообщение от alexandro704 Посмотреть сообщение
Я зарание не знаю список всех должностей. Хотя есть вариант что бы добавлять вначале должность, а потом уже из списка делать выбор этой должности. Но это чертовски не удобно.
не удобно первое время, пока справочник заполниться...
да и справочник должностей можно где нибудь нарыть в нете...

если сделают ошибку при вводе должности, например не Водитель, а Водител?

Последний раз редактировалось maLoy*508; 29.04.2011 в 11:19.
maLoy*508 вне форума Ответить с цитированием
Старый 29.04.2011, 11:32   #7
alexandro704
Пользователь
 
Регистрация: 18.04.2011
Сообщений: 15
По умолчанию

Цитата:
Сообщение от maLoy*508 Посмотреть сообщение
не удобно первое время, пока справочник заполниться...
да и справочник должностей можно где нибудь нарыть в нете...

если сделают ошибку при вводе должности, например не Водитель, а Водител?
Точно. Да и повторы могут быть. Спс.
Но как сохранить последний ИД табл. Persone и добавить его в основную таблицу Employee?
alexandro704 вне форума Ответить с цитированием
Старый 29.04.2011, 11:39   #8
Dark_Spirit
Форумчанин
 
Аватар для Dark_Spirit
 
Регистрация: 05.02.2009
Сообщений: 324
По умолчанию

мне больше нравиться работать через ADO компоненты.
при помощи этих компонент это будет выглядеть примерно так:

Код:
 var id_persone:integer;
      id_posada:integer;
 begin

  adocommand1.commandText:='insert into persone(<перечень полей для записи через запятую>)
 values(<значеня для записию колличество значений должно соответсвовать колличеству полей.
 значения через запятую>)';//sql-текст для записи в таблицу Persone
  adoconnection1.begintrans; // начало транзакции 
  try
   adocommand1.execute; // выполнение скрипта
   adoconnection1.commitTrans;// сохранение изменений в базе(таблица Persone)
  except
   adoconnection.rollbackTrans;// если по каким-то причинам данные не сохранены - откат
  end;
  adodataset1.last;// перемещение на последнюю запись в таблице Persone (при условии что
 набор связян с этой таблицей и открыт)
  id_persone:=adodataset1.fieldbyname('id').asinteger;// запоминаем id

// аналогично для таблицы Posada
  adocommand1.commandText:='';
  adoconnection1.begintrans; 
  try
   adocommand1.execute;
   adoconnection1.commitTrans;
  except
   adoconnection.rollbackTrans;
  end;
  adodataset2.last;
  id_posada:=adodataset2.fieldbyname('id').asinteger;

  // ну и сама запись в таблицу Employee
  adocommand1.commandText:='insert into(<поле_id_Persone>, <поле_id_Posada>, <остальные поля>)
 values(id_perdone, id_posada,<щстальные значения>)';
  adoconnection1.begintrans; 
  try
   adocommand1.execute;
   adoconnection1.commitTrans;
  except
   adoconnection.rollbackTrans;
  end;
 end;
примерно так
Тяжело быть бестолковым.....

Последний раз редактировалось Dark_Spirit; 29.04.2011 в 11:43.
Dark_Spirit вне форума Ответить с цитированием
Старый 29.04.2011, 11:42   #9
maLoy*508
Форумчанин
 
Аватар для maLoy*508
 
Регистрация: 28.03.2008
Сообщений: 672
По умолчанию

sql знаете?

Код:
with ADOQuery1.SQL do
          begin
           Clear;  
           Add('INSERT INTO (имя таблицы) ('список полей')');
           Add('values('список значений')');
          end;
         ADOQuery1.ExecSql;
_____
лучше делайте так как предложил Dark_Spirit

Последний раз редактировалось maLoy*508; 29.04.2011 в 11:49.
maLoy*508 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Несколько insert into в один. MrBobyara SQL, базы данных 2 07.02.2011 18:31
Заполнение двух таблиц одновременно Emprio Microsoft Office Excel 2 14.01.2011 13:08
Как вывести несколько одинаковых форм одновременно k1r1ch Общие вопросы Delphi 11 22.08.2009 18:07
несколько одновременно работающих копий программы - ? Evgenii Общие вопросы Delphi 3 06.07.2009 09:38
Вставка даты в несколько DBDateTimeEditEh одновременно!? John_chek Компоненты Delphi 3 12.02.2007 16:34