|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Добавление данных в таблицу из других таблиц
Есть такая задача:
3 таблицы (dbgrid1,dbgrid2,dbgrid3) Пользователь выделяет в dbgrid1 и dbgrid3 необходимые ему записи (по одной в каждой таблице) и при нажатии на кнопку определённое поле например id_dbgrid1 и id_dbgrid3 попадали в новую запись (в определённые поля) dbgrid2 и сохранялись в БД на firebirde. Покажите пример хотя бы... Заранее спасибо! |
#2
|
||||
|
||||
вот как-то так
Код:
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
|
||||
|
||||
О ужас.
Заведите себе хорошую привычку работать с базой через запросы, а не через аппенды и посты. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#4
|
|||
|
|||
Спасибо!
Вот у меня что получилось: Код:
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; 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
|
|||
|
|||
блин, дурацкие смайлы, как их отключить?
разобрался) Последний раз редактировалось sAVe, 03.07.2013 в 09:35. |
#6
|
|||
|
|||
А вот это зачем?
DataModule1.IBQuery6.Close; DataModule1.IBQuery6.Open; |
Этот пользователь сказал Спасибо icWasya за это полезное сообщение: | ||
sAVe (03.07.2013)
|
#7
|
|||
|
|||
Цитата:
а без этого DBGrid не обновляется, всегда так делал, раньше на это как-то внимания не обращал. Но вот сейчас поставил это в фигурные скобки и ошибку не выдаёт, но и данные появляются после перегрузке программы. |
#8
|
||||
|
||||
дык у тебя в DataModule1.IBQuery6 лежит запрос на добавление, вот он 2й раз и вызывается ...
после того как выполнил Commit - перебивай DataModule1.IBQuery6.SQL.Text на новый(SELECT) запрос. а вообще для такого лучше пользоваться двумя отдельными кверями: 1 на добавление и 1 на отображение Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
Этот пользователь сказал Спасибо Yurk@ за это полезное сообщение: | ||
sAVe (03.07.2013)
|
#9
|
|||
|
|||
УРА!!! Спасибо большое! Эх... невнимательность моя, там должен был запускаться другой запрос
|
#10
|
|||
|
|||
Вот ещё одна проблема Master-Detail почему-то не работает, много где читал, но что-то так и не получается у меня... Только не отправляйте на другие сайты, я там уже был
|
#11
|
||||
|
||||
ну а что не получается то?
Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#12
|
||||
|
||||
Кстати, база не нормированная (если вы конечно слыхали про нормализацию БД) получается, в 3-й таблице по идее должна пара ключей храниться.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#13
|
|||
|
|||
Да про нормализацию я знаю, но пока такая база есть.
Так что не получается с Master-Detail: Связываю 2 таблицы DBGrid1 и DBGrid2; DBGrid1 - должен быть Master, а DBGrid2 - Detail соответственно. В IBQuery3 который относится DBGrid2 в DataSourse2 указываю DataSourse1, относящийся к DBGrid1. Никаких MasterSourse я что-то не нашёл... |
#14
|
|||
|
|||
Разобрался, всем спасибо!
Может позже ещё что-нибудь спрошу |