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

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

Как избежать исключения? [D7, FireBird]


denisych ©   (2005-01-03 23:29:00) 

Здравствуйте !

Delphi7 + FIBPlus + TDBEDIT

Поле в таблице Firebird - DATE.
Если на форме ввести в DBEDIT неправильную дату , то вылетает
EConvertError.
Как проверить дату ( типа OnValidate ) до исключения ?

С уважением , Денисыч


msguns   (2005-01-10 11:57:00) [1]

>denisych   (07.01.05 23:58) [2]
>> 1. Отказаться от редактирования в DB-aware контролах
Вообще - то я пишу так , как этого хочет клиент , а не так как это у меня получается

А клиент что, селезенкой чувствует, что поле, куда он вводит, "приклеено" к датасету ?

>> 2. Использовать соответствующие события DB-Aware контролов
>Конкретно. Умную мину сделать всегда легко. Что их надо использовать я и сам знаю , но
перехватывал я разные события разных элементов( начиная от OnExit DBEDIT и заканчивая OnPost Dataset ) , но все они
возникают ПОСЛЕ  EConvertError.  

Когда писал этот пост, мина у меня была вовсе не "умная". А вот события у контролов есть разные, в том числе и OnKeyPress/OnKeyDown

>> 3. Юзать гриды, где все это сделано "добрыми умными" дядями.
>Гриды я юзаю постоянно , но если все элементы DBEDIT , то
грид для даты тут мне совсем не подходит.  Если бы можно было в данном случае использовать грид , то на форум я бы не писал.

А вот опять же объясни дураку (мне то есть) КАК ЮЗЕР РАЗЛИЧАЕТ DBEDIT ОТ DBCTRLGRID ? Почему свет сошелся клином на dbEdit`ах я все же не понял (хотя и пытался при этом делать умное лицо)


Экспериментатор   (2005-01-10 11:23:00) [2]

Такой вариант у меня тоже возник.
Если уж такие траблы, то
почему бы не вводить дату в обычный едит, на событие OnChange навесить  проверку и передачу его в табличку


Дмитрий В. Белькевич   (2005-01-09 06:21:00) [3]

Может имеет смысл вообще от dbedit'а отказаться? Edit, а потом ручками одну команду на заполнение поля при открытии формы, при закрытии - вернуть данные в базу. Может так проще будет?


sniknik   (2005-01-08 18:15:00) [4]

чегото нифига не пойму, получить управление раньше исключения, получили... но не подщодит потому как исключение... (бред имхо)

тум же все в твоих руках...
вот так что тоже исключение
procedure TForm1.ADODataSet1BirthDateSetText(Sender: TField;
 const Text: String);
begin
 Sender.AsDateTime:= StrToDateTimeDef(Text, Now());
end;


и учти, на этот раз я уже проверил... ;о))


denisych   (2005-01-08 17:09:00) [5]


> нужно перехватить тогда OnSetText...


Спасибо. Толковый совет, но я это пробовал. OnSetText хорошо работает , когда у тебя дата введена в правильном формате, но
такой даты не существует (  33.33.33 ).  А если вводишь неправильный формат ( 33.__.33 ) , то вылетает что-то типа  
invalid input value , хотя точно не помню и это исключение возникает раньше всего.
Временно я написал глобальный обработчик Application.OnException , но если у кого-то есть идеи лучше ,
то буду благодарен за совет.


sniknik   (2005-01-08 00:46:00) [6]

сорри, тебе же не чтение а запись нужно перехватить тогда OnSetText... хотя не уверен. попробуй в обшем. (я не проверял)


sniknik   (2005-01-08 00:42:00) [7]

> Что их надо использовать я и сам знаю , но
> перехватывал я разные события разных элементов( начиная от OnExit DBEDIT и заканчивая OnPost Dataset ) , но все они
> возникают ПОСЛЕ  EConvertError.  
попробуй OnGetText у поля, может и подойдет.


denisych   (2005-01-07 23:58:00) [8]


> 1. Отказаться от редактирования в DB-aware контролах

Вообще - то я пишу так , как этого хочет клиент , а не так как это у меня получается


> 2. Использовать соответствующие события DB-Aware контролов

Конкретно. Умную мину сделать всегда легко. Что их надо использовать я и сам знаю , но
перехватывал я разные события разных элементов( начиная от OnExit DBEDIT и заканчивая OnPost Dataset ) , но все они
возникают ПОСЛЕ  EConvertError.  


> 3. Юзать гриды, где все это сделано "добрыми умными" дядями.

Гриды я юзаю постоянно , но если все элементы DBEDIT , то
грид для даты тут мне совсем не подходит.  Если бы можно было в данном случае использовать грид , то на форум я бы не писал.


msguns   (2005-01-04 10:24:00) [9]

1. Отказаться от редактирования в DB-aware контролах
2. Использовать соответствующие события DB-Aware контролов
3. Юзать гриды, где все это сделано "добрыми умными" дядями.


Наверх

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