Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.051 c
2-1159384087
ABS
2006-09-27 23:08
2006.10.15
Не получается вычислить оставшееся время


1-1157528777
Zilog_
2006-09-06 11:46
2006.10.15
Перевод с С на Delphi


15-1158863556
McSimm
2006-09-21 22:32
2006.10.15
17-ая ежегодная выставка информационных технологий Softool 2006


15-1158747060
VitV
2006-09-20 14:11
2006.10.15
Покупать или не покупать


5-1141105299
MiHoY
2006-02-28 08:41
2006.10.15
idDecoderMIME




   Наверх