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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.06.2013, 10:32
sAVe sAVe вне форума
Прохожий
 
Регистрация: 20.06.2013
Сообщения: 40
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Добавление данных в таблицу из других таблиц

Есть такая задача:
3 таблицы (dbgrid1,dbgrid2,dbgrid3)
Пользователь выделяет в dbgrid1 и dbgrid3 необходимые ему записи (по одной в каждой таблице) и при нажатии на кнопку определённое поле например id_dbgrid1 и id_dbgrid3 попадали в новую запись (в определённые поля) dbgrid2 и сохранялись в БД на firebirde.
Покажите пример хотя бы...
Заранее спасибо!
Ответить с цитированием
  #2  
Старый 23.06.2013, 10:43
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

вот как-то так
Код:
Grid2.DataSource.DataSet.Edit;
Grid2.DataSource.DataSet.FieldByName('pole1').Value := Grid1.DataSource.DataSet.FieldByName('id').Value;
Grid2.DataSource.DataSet.FieldByName('pole3').Value := Grid3.DataSource.DataSet.FieldByName('id').Value;
Grid2.DataSource.DataSet.Post;
это в общем случае ... всё остальное подстраивай под себя
и да, с данными работает Table, Query, DataSet, а DBGrid только отображает результат их работы
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз

Последний раз редактировалось Yurk@, 23.06.2013 в 10:46.
Ответить с цитированием
  #3  
Старый 23.06.2013, 12:36
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

О ужас.
Заведите себе хорошую привычку работать с базой через запросы, а не через аппенды и посты.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #4  
Старый 03.07.2013, 09:31
sAVe sAVe вне форума
Прохожий
 
Регистрация: 20.06.2013
Сообщения: 40
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо!
Вот у меня что получилось:

Код:
procedure TNew_office_contact.Button1Click(Sender: TObject);
begin

with DataModule1.IBQuery6 do
   begin
    SQL.Text:= 'insert into office_contacts (oc_o_id, oc_cntt_id, oc_contact) values ( :oc_o_id, :oc_cntt_id, :oc_contact)';
    ParamByName('oc_o_id').AsString:=DataModule1.IBQuery1DB1.FieldByName('O_ID').AsString;
    ParamByName('oc_cntt_id').AsString:= vartostr(DBLookupComboBox1.KeyValue);
    ParamByName('oc_contact').AsString:=Edit1.Text;
    Transaction.StartTransaction;
    ExecSQL;
    Transaction.Commit;
    Transaction.Active:=false
   end;
   DataModule1.IBQuery6.Close;
   DataModule1.IBQuery6.Open;

end;
Но вот беда, почему-то добавляется 2 одинаковые записи, прога ругается:

Project Project1.exe raised exemption class EIBInterBaseError with message 'violation of PRIMARY or UNIQUE KEY constraint "PK_OFFICE_CONTACTS' on table "OFFICE_CONTACTS". Process stopped и бла бла бла...

Последний раз редактировалось sAVe, 03.07.2013 в 09:35.
Ответить с цитированием
  #5  
Старый 03.07.2013, 09:33
sAVe sAVe вне форума
Прохожий
 
Регистрация: 20.06.2013
Сообщения: 40
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

блин, дурацкие смайлы, как их отключить?

разобрался)

Последний раз редактировалось sAVe, 03.07.2013 в 09:35.
Ответить с цитированием
  #6  
Старый 03.07.2013, 09:53
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

А вот это зачем?
DataModule1.IBQuery6.Close;
DataModule1.IBQuery6.Open;
Ответить с цитированием
Этот пользователь сказал Спасибо icWasya за это полезное сообщение:
sAVe (03.07.2013)
  #7  
Старый 03.07.2013, 10:10
sAVe sAVe вне форума
Прохожий
 
Регистрация: 20.06.2013
Сообщения: 40
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от icWasya
А вот это зачем?
DataModule1.IBQuery6.Close;
DataModule1.IBQuery6.Open;

а без этого DBGrid не обновляется, всегда так делал, раньше на это как-то внимания не обращал.
Но вот сейчас поставил это в фигурные скобки и ошибку не выдаёт, но и данные появляются после перегрузке программы.
Ответить с цитированием
  #8  
Старый 03.07.2013, 10:16
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

дык у тебя в DataModule1.IBQuery6 лежит запрос на добавление, вот он 2й раз и вызывается ...
после того как выполнил Commit - перебивай DataModule1.IBQuery6.SQL.Text на новый(SELECT) запрос.
а вообще для такого лучше пользоваться двумя отдельными кверями: 1 на добавление и 1 на отображение
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
Этот пользователь сказал Спасибо Yurk@ за это полезное сообщение:
sAVe (03.07.2013)
  #9  
Старый 03.07.2013, 10:22
sAVe sAVe вне форума
Прохожий
 
Регистрация: 20.06.2013
Сообщения: 40
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

УРА!!! Спасибо большое! Эх... невнимательность моя, там должен был запускаться другой запрос
Ответить с цитированием
  #10  
Старый 03.07.2013, 11:53
sAVe sAVe вне форума
Прохожий
 
Регистрация: 20.06.2013
Сообщения: 40
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Вот ещё одна проблема Master-Detail почему-то не работает, много где читал, но что-то так и не получается у меня... Только не отправляйте на другие сайты, я там уже был
Ответить с цитированием
  #11  
Старый 03.07.2013, 12:30
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

ну а что не получается то?
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #12  
Старый 03.07.2013, 13:12
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Кстати, база не нормированная (если вы конечно слыхали про нормализацию БД) получается, в 3-й таблице по идее должна пара ключей храниться.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #13  
Старый 03.07.2013, 14:37
sAVe sAVe вне форума
Прохожий
 
Регистрация: 20.06.2013
Сообщения: 40
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Да про нормализацию я знаю, но пока такая база есть.
Так что не получается с Master-Detail:
Связываю 2 таблицы DBGrid1 и DBGrid2;
DBGrid1 - должен быть Master, а DBGrid2 - Detail соответственно.
В IBQuery3 который относится DBGrid2 в DataSourse2 указываю DataSourse1, относящийся к DBGrid1.
Никаких MasterSourse я что-то не нашёл...
Ответить с цитированием
  #14  
Старый 09.07.2013, 14:53
sAVe sAVe вне форума
Прохожий
 
Регистрация: 20.06.2013
Сообщения: 40
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Разобрался, всем спасибо!
Может позже ещё что-нибудь спрошу
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter