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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2014, 04:42   #1
serg1980serg
Пользователь
 
Регистрация: 01.08.2011
Сообщений: 12
По умолчанию Связь данных в MDI приложениии

Если скажем расположить грид и эдиты на одной форме и естественно связать всё это с БД, то по выделению строк в гриде, данные тут же отображаются и в эдитах, что дает используя эдиты редактировать записи. Тоже самое можно проделывать и когда грид находится на одной форме а эдиты на другой.
Но у меня несколько другая ситуация. Т.к. приложение у меня MDI, эдиты находятся на форме которая ещё не создана. И по нажатию кнопки "Изменить", форма создается (TfrmFofmaSoobshenie.Create(Self).S how) и лишь после создания подгружаются данные в эдиты. При этом нет связи выделенной строки в гриде с эдитами на созданной форме.
Вот я и ищу способ сохранить (передать) связь грида с эдитами, чтоб редактировать в них именно выделенную строку грида.

Имеется БД:
00.jpg

Есть главная форма (frmMaim):
01.jpg

Нажимаем на кнопку "Организации"
Код:
procedure TfrmMaim.largebtnОрганизацииClick(Sender: TObject);
begin
  TfrmForms.Create(Self).Show; // создается форма Организаций
  largebtnОрганизации.Enabled:=False; // делается не активной кнопка создания формы
  ActiveMDIChild.WindowState:= wsMaximized; // форма разворачивается на всё окно
  RibbonTabFirms.Visible:= True; // делается видимой вкладка Организаций
  RibbonTabFirms.Active:= True; // делается активной вкладка Организаций
  DataModule1.qryОрганизации.Requery; // обновляем запрос
end;
Получаем форму с гридом (frmForms):
02.jpg

На ней нажимаем кнопку "Добавить"
Код:
procedure TfrmMaim.largebtnInsertClick(Sender: TObject);
begin
  TfrmFofmaSoobshenie.Create(Self).Show; // создается форма Сообщение
  ActiveMDIChild.WindowState:= wsMaximized; // форма разворачивается на всё окно
  RibbonTabFirms.Visible:= False; // делается НЕ видимой вкладка Организаций
  RibbonTabSoobshenie.Visible:= True; // делается видимой вкладка Сообщение
  RibbonTabSoobshenie.Active:= True; // делается активной вкладка Сообщение
    // добавление новой записи
  DataModule1.dsФирмы.DataSet.Insert; // в таблицу Фирмы
  DataModule1.dsБанки.DataSet.Insert; // в таблицу Банки
  DataModule1.dsФСС.DataSet.Insert; // в таблицу ФСС
  DataModule1.dsПФР.DataSet.Insert; // в таблицу ПФР
end;
Получаем форму для заполнения (frmFofmaSoobshenie):
03.jpg

По нажатию кнопки "Сохранить"
Код:
procedure TfrmMaim.largebtnSaveClick(Sender: TObject);
begin
  DataModule1.tableФирмы.Post; // сохраняем запись
  DataModule1.qryОрганизации.Requery; // обновляем запрос
  largebtnSave.Enabled:=False; // делается кнопка НЕ активной
end;
Запись благополучно записывается в конец таблицы
04.jpg

Далее у меня начинаются проблемы. Не знаю как сделать так, чтоб по нажатию кнопки "Изменить" (при выбранной в гриде какой-либо определенной строки) на форме в Edit-ах отображались данные не из первой строки, а именно из той строки которая была выделена в гриде.
serg1980serg вне форума Ответить с цитированием
Старый 13.01.2014, 09:24   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
на форме в Edit-ах
Поставь вместо них DBEdit и в нем укажи поле, откуда будет читаться. Тогда при перескоке по гриду, эдиты автоматом подтянут инфу из записи, на которой произошел перескок.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.01.2014, 09:34   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

вар 1 просто, но все каверзы глобальных переменных.
используем общий (глобальный) dataset (DataSource) из общего модуля данных
для обеих форм: формы с таблицей и формы редактора.

вар 2 данные раздельные, но чуть больше возни
в форму редактора передавать идентификатор (ключ) записи которую будем редактировать.
Код:
TformEditor =class(TMDIForm)
private
  procedure SetIDEditRecord(idrecord: integer);
public
  property IDeditrecord: integer write SetIDEditRecord; 
end;

procedure TformEditor.SetIDEditRecord(id: integer);
begin
//Устанавливаем НАШ(свой личный) НД (DataSet) на нужную запись
  MyEditData.Parameter('keyid').Value:=id;
end;
Код:
var
   Myeditor: TformEditor;

MyEditror:=TformEditor.Create;
MyEditor.IDEditRecord:=GridData.FieldByName('key').AsInteger;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 13.01.2014, 11:33   #4
serg1980serg
Пользователь
 
Регистрация: 01.08.2011
Сообщений: 12
По умолчанию

evg_m спасибо.
Чёта я сам себя заблудил. Воспользовался вариантом №1.
serg1980serg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связь через логические типы данных konanov SQL, базы данных 3 29.11.2012 18:03
Ощибка создания MDI формы. Cannot create form. No MDI forms are currently active LISTAT Общие вопросы Delphi 1 26.05.2012 21:06
База данных и связь aank10 C++ Builder 2 06.11.2011 00:10
Как установить связь с источником данных? Бурят Microsoft Office Word 2 31.10.2010 19:16
Передача параметра с MDI родителя в MDI child через DLL ByXalkin Общие вопросы Delphi 0 15.12.2009 17:21