Главная страница
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.03 c
15-1158680769
Marser
2006-09-19 19:46
2006.10.15
Читабельно или красиво - что приоритетнее?


2-1159119975
ZiTrAX
2006-09-24 21:46
2006.10.15
Минимальный размер программы


4-1148624062
Antonyan
2006-05-26 10:14
2006.10.15
Политика безопасности XP SP2


15-1158964082
KonstantinTM
2006-09-23 02:28
2006.10.15
Rundll32 и "Показать/скрыть скрытые файлы"


15-1159107170
MixAnOL
2006-09-24 18:12
2006.10.15
OLE сервер и JavaScript в IE