Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.25;
Скачать: CL | DM;

Вниз

обработка ошибки   Найти похожие ветки 

 
Bolek ©   (2003-09-02 18:45) [0]

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

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


 
Deniz ©   (2003-09-03 06:54) [1]

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


 
Bolek ©   (2003-09-03 08:02) [2]

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

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 08:21) [3]

Если 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:31) [4]

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

if ModalResult <> mrOK then Exit;

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

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


 
Deniz ©   (2003-09-03 08:52) [5]

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


 
Bolek ©   (2003-09-03 09:02) [6]

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


 
Nikolay M. ©   (2003-09-03 09:15) [7]


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

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

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

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


 
Deniz ©   (2003-09-03 09:32) [8]

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

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

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

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



Страницы: 1 вся ветка

Текущий архив: 2003.09.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
3-82093
Слава
2003-09-04 19:08
2003.09.25
ClientDataSet


6-82373
SergeySEM
2003-07-25 15:52
2003.09.25
еще вопрос про Streame


14-82428
michael
2003-09-04 16:29
2003.09.25
Какая книга считается классикой по ООП ?


14-82418
Dilezzz
2003-09-07 17:16
2003.09.25
Глюки с сохраненными играми в Delta Force: Black Hawk Down


3-82054
SkullNet
2003-09-02 18:12
2003.09.25
Определение кол-ва записей отображаемых DBGrid