![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
обработка ошибки [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; - нельзя закрыть форму