Текущий архив: 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.46 MB
Время: 0.059 c