Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.05;
Скачать: CL | DM;

Вниз

Дата в DBGrid   Найти похожие ветки 

 
neat   (2006-01-10 09:47) [0]

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

Вопрос такой. В 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 time Tools->Debugger Options->Language Exception->Stop on Delphi Exceptions выключен. Т.е. получается, что не могу обработать неправильный ввод даты.


 
Desdechado ©   (2006-01-10 10:40) [1]

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


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


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


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

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


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


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;


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

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


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

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


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

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

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


 
Johnmen ©   (2006-01-10 13:02) [7]

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


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

Вот что о 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 - всё то же


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


> neat   (10.01.06 13:15) [8]

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


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


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

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


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

сделай

 on E: Exception do ...

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


 
sniknik ©   (2006-01-11 08:04) [12]

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

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


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

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

> Запускаешь из под 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 надо записать все случаи жизни?


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


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

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



Страницы: 1 вся ветка

Текущий архив: 2006.03.05;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.037 c
6-1132238881
Stealth
2005-11-17 17:48
2006.03.05
TCP клиент Indy в Delphi 2005


2-1140361582
Volf_555
2006-02-19 18:06
2006.03.05
Как перевести цвет из TColorBox в строку?


15-1139490644
Kerk
2006-02-09 16:10
2006.03.05
Собственно, о геморрое...


1-1138722806
pound
2006-01-31 18:53
2006.03.05
Графическое изображение


15-1139492085
Awex
2006-02-09 16:34
2006.03.05
TEditControl