![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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 только отображает результат их работы Последний раз редактировалось Yurk@, 23.06.2013 в 10:46. |
|
#3
|
||||
|
||||
|
О ужас.
Заведите себе хорошую привычку работать с базой через запросы, а не через аппенды и посты. |
|
#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 на отображение |
| Этот пользователь сказал Спасибо Yurk@ за это полезное сообщение: | ||
sAVe (03.07.2013)
| ||
|
#9
|
|||
|
|||
|
УРА!!! Спасибо большое! Эх... невнимательность моя, там должен был запускаться другой запрос
|
|
#10
|
|||
|
|||
|
Вот ещё одна проблема Master-Detail почему-то не работает, много где читал, но что-то так и не получается у меня... Только не отправляйте на другие сайты, я там уже был
|
|
#11
|
||||
|
||||
|
ну а что не получается то?
|
|
#12
|
||||
|
||||
|
Кстати, база не нормированная (если вы конечно слыхали про нормализацию БД) получается, в 3-й таблице по идее должна пара ключей храниться.
|
|
#13
|
|||
|
|||
|
Да про нормализацию я знаю, но пока такая база есть.
Так что не получается с Master-Detail: Связываю 2 таблицы DBGrid1 и DBGrid2; DBGrid1 - должен быть Master, а DBGrid2 - Detail соответственно. В IBQuery3 который относится DBGrid2 в DataSourse2 указываю DataSourse1, относящийся к DBGrid1. Никаких MasterSourse я что-то не нашёл... |
|
#14
|
|||
|
|||
|
Разобрался, всем спасибо!
Может позже ещё что-нибудь спрошу |