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

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

Дата в DBGrid [D7, Access]


neat ©   (2006-01-10 09:47:00) 

Здравствуйте все! С прошедшими праздниками вас!

Вопрос такой. В DBGrid поле даты с маской '!99/99/9999;!;_'. Ввод неверной даты обрабатываю так как показано в справке Delphi

const
    LF = #10;
var
   TempDate: TDate;
begin
try
      TempDate := StrToDate(dbgridPRIHOD.Fields[2].Text);
except
      on E: EConvertError do
              ShowMessage(E.ClassName + LF + E.Message);
end;


Если пытаюсь ввести неверное значение даты моё ShowMessageпочему-то игнорируется, а появляется окно с сообщением " '  .  .    ' " is not a valid date and timeTools->Debugger Options->Language Exception->Stop on Delphi Exceptions выключен. Т.е. получается, что не могу обработать неправильный ввод даты.


Плохиш   (2006-01-11 12:43:00) [1]


> Моя мессага появляется, но всед за ней

После своего сообщения надо сообщить, что обработка закончена, вызовом Аборт.


neat   (2006-01-11 12:37:00) [2]

Здравствуйте все! Извиняюсь,  что не ответил вчера, ушёл домой. Сейчас отчаянно пытаюсь воплотить то что узнал дома и здесь.

> Запускаешь из под Delphi?
> Попробуй запустить откомпилированную прогу без оного


Так давно думал. Всё тоже.


сделай

on E: Exception do ...

и никто его не обойдет, заодно узнаешь его истинное лицо.


Обходит.


обработка "повешена" на кнопку грида, а ввод в гриде не идет, он идет в
InplaceEditor внутри грида. т.е. все правильно, надо сменить событие где
проверять. OnValidate уже советовали?


OnValidateвозникает перед сохранением в буфер записи(по справке D7), а
то сообщение выскакивает сразу после нажатия Enter на ячейке. Но всё равно попробовал - не выходит, вернее до этого события и не доходит дело(как написано в справке). Когда влепил InPlaceEditor стало чуть-чуть полегче. Моя мессага появляется, но всед за ней, вернее поверх неё, всё тоже
'  .  .    '  is not a valid date and time'. Почему приложение его генерит не пойму. В итоге добился результата лишь после того, как указал приложению как обрабатывать данный класс ошибки(пример из книги "Советы программистов").

procedure TMyForm.MyException(Sender: TObject; E: Exception);
begin
  if E.ClassType.ClassName = EConvertError then
      ShowMessage('Моё сообщение')
 else
     Application.ShowException(E);
end;

procedure TMyForm.FormCreate(Sender: TObject);
begin
 Application.OnException := MyException;
end;


Это хорошо, но EConvertError может возникнуть не только с датой. И вообще, теперь получается, что в MyException надо записать все случаи жизни?


sniknik   (2006-01-11 08:04:00) [3]

neat   (10.01.06 11:00) [3]
> procedure TfmMain.dbgridPRIHODKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
> ...

обработка "повешена" на кнопку грида, а ввод в гриде не идет, он идет в InplaceEditor внутри грида. т.е. все правильно, надо сменить событие где проверять. OnValidate уже советовали?


tech   (2006-01-11 00:24:00) [4]

сделай

 on E: Exception do ...

и никто его не обойдет, заодно узнаешь его истинное лицо.


Savek   (2006-01-10 17:38:00) [5]


> Проблема в том, что не могу обработать неправильную дату.
>  Выдаётся сообщение '  .  .    ' " is not a valid date and
> time, а мой Except обходится.

Запускаешь из под Delphi?
Попробуй запустить откомпилированную прогу без оного


Плохиш   (2006-01-10 13:17:00) [6]


> neat   (10.01.06 13:15) [8]

Читай раздел справки про использование отладчика и точки останова или так и будешь воду в ступе толочь.


neat   (2006-01-10 13:15:00) [7]

Вот что о EConvertError написано в справке Delphi.

EConvertError is raised when

An application makes an unsuccessful attempt to convert an integer, float, date, or time to a string, or to convert a string to one of these other types.

Там же пример, который использую практически без изменений. Отличие только в том что там  TempDate : TDateTime и StrToDateTime('99/99/1998').

Попробовал else- всё то же


Johnmen   (2006-01-10 13:02:00) [8]

Значит класс ексепшна другой.
try
...
except
  on E: EConvertError do ...
else ...
end;


neat   (2006-01-10 12:41:00) [9]

Проблема в том, что не могу обработать неправильную дату. Выдаётся сообщение '  .  .    ' " is not a valid date and time, а мой Except обходится.

tbl_PRIHOD.State = dsEdit - это точно.


Johnmen   (2006-01-10 12:17:00) [10]

А где здесь проблема?
М.б. у тебя tbl_PRIHOD.State = dsInsert ...


neat   (2006-01-10 12:14:00) [11]

Что, никто не сталкивался с такой проблемой?


neat   (2006-01-10 11:00:00) [12]


procedure TfmMain.dbgridPRIHODKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
   TempDate : TDate;
const LF = #10;
begin
   if Key = VK_RETURN then
       if tbl_PRIHOD.State = dsEdit then begin
           try
               StrToDate(dbgridPRIHOD.Fields[2].Text);
           except
               on E: EConvertError do
                   ShowMessage(E.ClassName + LF + E.Message);
           end;
       end;
end;


Плохиш   (2006-01-10 10:52:00) [13]


> В DBGrid поле даты с маской '!99/99/9999;!;_'.


> Если пытаюсь ввести неверное значение даты моё ShowMessage
> почему-то игнорируется, а появляется окно с сообщением

Ты сам попросил DBGrid проверять корректность ввода.


Desdechado   (2006-01-10 10:40:00) [14]

остается уточнить, куда ты всунул свой приведенный код, чтоб обработать ввод


Наверх

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