Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.15;
Скачать: CL | DM;

Вниз

MDI - сохранение и востановления   Найти похожие ветки 

 
AdminSKBZ ©   (2006-09-27 11:27) [0]

У меня такой вопросик. Надо написать программу, которая содержит главное окно MDI и дочерние. В дочерних окнах находятся компоненты Edit, CommoBox, Button. И при нажатии кнопки второй раз данные с  Edit, CommoBox заносятся в базу данных. Но вопрос стоит так чтоб при первом нажатии кнопки данные с Edit, CommoBox сохранялись, где ни будь, я организовал сохранение в базу данных, отличную от той в которую вносятся при втором нажатии кнопки. Далее если при случайном закрытии программы, данные которые сохранились при нажатии первый раз кнопки, восстанавливались в дочерние MDI окна вновь запущенную программу, если сбоя или закрытия программы не произошло, то удалялись при нажатии второй раз кнопки из базы данных, которая сохраняет эти данные.
Организацию сохранения и удаления при сбоя организовал, осталось при сбое их вернуть в дочерние окна. Заранее благодарю!


 
ЮЮ ©   (2006-09-27 11:43) [1]

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

Проще защититься от "случайного" закрытия окна, чем изобретать такое


 
MsGuns ©   (2006-09-27 14:00) [2]

1. Править информацию БД в MDI-режиме - штука опасная и требует как минимум понимания основ хранения и доступа в СУБД (в частности такие вещи, как конфликты, транзакции, блокировки и т.д.). Рекомендую интерфейс изменения в БД реализовать в модальном режиме, в котором обеспечится принцип "пока не подтвердил или не отменил, уйти с формы нельзя".
2. Форма для правки (та самая, где расположены указанные в сабже "Edit, CommoBox", а говоря проще - визуальные контролы для ввода значений в таблицы БД) должна иметь у себя (в секции Public) переменные, куда вызывающий модуль перед ShowModal помещает значения полей записи перед правкой.
Например, в главной форме:

procedure TForm1.ButtonEditClick(Sender: TObject);
begin
 with TUpdateForm.Create(Self) do
   try
     sFldTN := Table1.FieldByName("TN").AsString;
     sFldFIO := Table1.FieldByName("FIO").AsString;
     nFldRng := Table1.FieldByName("Rng").AsFloat;
     InitControls;
     ShowModal;
   finally
     Free;
   end;
end;


В "правочной" форме написать:

type
 TUpdateForm = Class(Tform);
  ....
 public
    sFldTN := String;
    sFldFIO := String;
    nFldRng := double;
    procedure InitControls;
    function CheckControls: boolean;
 end;

implementation

procedure TUpdateForm.ButtonCancel(Sender: TObject);
begin
 InitControls;  // Отмена изменений и восстановление исходных значений полей
end;

procedure TUpdateForm.ButtonPost(Sender: TObject);
begin
 // Формирование запроса на изменение данных в таблице
 Close;
end;

procedure TUpdateForm.ButtonClose(Sender: TObject);
begin
 Close;
end;

procedure TUpdateForm.InitControls;
// Данные из "буферных" переменных разносятся по визуальным контролам
begin
 Edit1.Text := sFldTN;
 Edit2.Text := sFldFIO;
 ...
end;

function TUpdateForm.CheckControls: boolean;
// Контроль корректности введенных (измененных) данных
begin
 result := false;
 with Edit1 do
    if Length(Trim(Text))<5 then
      begin
       ShowMessage("Ошибка в фамилии");
       SelectAll;
       SetFocus;
       exit;
      end;
 with Edit2 do
     ....  
 result := true;
end;    

   end; := sFldTN;
 Edit2.Text := sFldFIO;
 ...
end;



Страницы: 1 вся ветка

Текущий архив: 2006.10.15;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.044 c
15-1158503223
DiX
2006-09-17 18:27
2006.10.15
Защита от вмешательства


2-1159467945
Ezorcist
2006-09-28 22:25
2006.10.15
Выдернуть подструку из строки


3-1155627561
Death
2006-08-15 11:39
2006.10.15
Создание индексов в THalcyonDataSet


2-1159196913
handler
2006-09-25 19:08
2006.10.15
Виндовые потоки.


1-1157456812
dracula
2006-09-05 15:46
2006.10.15
Как сохранить компонент в регистре? А потом его загрузить.