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