Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

обработка ошибки [D6, IB6.x]


Bolek ©   (2003-09-02 18:45:00) 

помогите, плз.
жму на кнопку "добавить запись" открывается вторая форма с DBEdit"ами. нужно чтобы при нажатии на кнопку "ок" прога проверила все ли поля заполнены и выдав сообщение типа "не всё заполнено" вернулась к заполнению полей

база InterBase"овская


Deniz   (2003-09-03 09:32:00) [1]

> Nikolay M. © (03.09.03 09:15) [7]
А вопрос ты внимательно прочитал?

прога проверила все ли поля заполнены и выдав сообщение типа "не всё заполнено" вернулась к заполнению полей

Не значит ли это, что форма редактирования не должнав принципе закрываться до ввода правильных значений или отмены действия. Конечно каждый пишет по своему, но ... я привык, что вся обработка(добавление/редактирование/поиск) правильно введенной информации делается в "основной" форме (та, из которой вызывалась вторая)

А по поводу кнопки Power обрабатывать... будет надо, и ее будем обрабатывать :))


Nikolay M.   (2003-09-03 09:15:00) [2]


> Нужна обработка события OnCloseQuery для формы
> CanClose:=True; - можно закрыть форму
> CanClose:=False; - нельзя закрыть форму

Ты бы еще посоветовал нажатие кнопки Power обрабатывать...

Масса способов проверить непустоту поля:
указать у поля Required := True;
проверять непустоту вручную при нажатии кнопки ОК (сделав у кнопки ModalResult := mrNone, а если поля заполнены правильно, делать форме ModalResult := mrOk);
опять же вручную проверять непустоту полей в обработчике BeforePost и, если что-то не так, вызывать Exception, перехватывать его в обработчике OnPostError и красиво показыать пользователю...

Но вешаться на OnCloseQuery - это нечто... :))) LOL :)


Bolek   (2003-09-03 09:02:00) [3]

Всем, кто отозвался - спасибо


Deniz   (2003-09-03 08:52:00) [4]

Давай лучше по асе(207645235), что бы не засорять форум


Bolek   (2003-09-03 08:31:00) [5]

Спасибо. база однопользовательская, локальная.
с ИДом я разберусь, конечно.

if ModalResult <> mrOK then Exit;

и куда она пойдёт после Exit?

может по почте лучше или по асе?


Deniz   (2003-09-03 08:21:00) [6]

Если Form2 это та форма, которая открывается для редактирования, то:
procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:=True;
if ModalResult <> mrOK then Exit;
if (Form2.DBEdit1.Text = "") or
(Form2.DBEdit2.Text = "") then
begin
MessageDlg("Не все поля заполнены!", mtError, [mbOK], 0);
CanClose:=False;
Exit;
end;
end;

N := Form1.IBTable1.RecordCount + 1;
Form1.IBTable1ID.AsInteger := N;

Так делать НЕЛЬЗЯ, потому как если в таблице ID = (1, 2, 4), то после выполнения будет (1, 2, 4, 4), что не есть гуд!!!
Для IB есть генераторы и ими надо пользоваться.
Посмотри в этом форуме, я уже не раз давал почти полное описание.
Если не хочешь, то для твоего примера надо поменять код, вместо
N := Form1.IBTable1.RecordCount + 1;
надо
Query.SQL.Clear;
Query.SQL.Add("select max(ID) from table");
Query.Open;
N:=Query.Fields[0].AsInteger + 1;
Query.Close;

Но этот метод не будет работатьпри одновременной работе нескольких пользователей


Bolek   (2003-09-03 08:02:00) [7]

плз, поподробнее. вот кусок кода, а точнее процедура кнопки.

procedure TForm2.BitBtn1Click(Sender: TObject);
begin
if (length(Form2.DBEdit1.Text)=0) or
(length(Form2.DBEdit2.Text)=0) then ShowMessage("Не все поля заполнены")
else
begin
N := Form1.IBTable1.RecordCount + 1;
Form1.IBTable1ID.AsInteger := N;
Form1.BitBtn1.Enabled:=true;
Form1.BitBtn2.Enabled:=true;
Form1.IBTable1.Post;
Form2.Close;
end
end;


Deniz   (2003-09-03 06:54:00) [8]

База без разницы.
Нужна обработка события OnCloseQuery для формы
CanClose:=True; - можно закрыть форму
CanClose:=False; - нельзя закрыть форму


Наверх

Титульная страница Поиск, карта сайта Написать письмо