Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];

Вниз

Дата в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.012 c
2-1139816777
Werwolf
2006-02-13 10:46
2006.03.05
Как работать со счетчиками производительности (counters)


1-1138803775
OlegNik
2006-02-01 17:22
2006.03.05
Перехват завершения работы Windows.


15-1139839786
Интересующийся
2006-02-13 17:09
2006.03.05
Borland отказывается от развития


15-1139670243
splr
2006-02-11 18:04
2006.03.05
Объясните плиз, как установить php


1-1138275877
Silver...
2006-01-26 14:44
2006.03.05
TFrame и событие "OnPaint"





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский