Форум: "Базы";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
Внизобработка ошибки Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c