Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.065 c
3-82075
NewD
2003-09-05 13:48
2003.09.25
ADODATASET выдает ошибку при установке в clUseServer


3-82126
Ury
2003-09-04 13:54
2003.09.25
DBComboBox


3-82122
MishaS
2003-09-04 15:20
2003.09.25
Перескок курсора с текущей записи таблицы на последнюю


8-82335
Vlad2
2003-05-26 21:18
2003.09.25
Быстрая графика: как считать/задать цвет в виде TColor?


1-82297
InspectorNET
2003-09-14 07:36
2003.09.25
Как отобразить в Label титль веб-страницы (показываемой webbrowse





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский