Форум: "Базы";
Текущий архив: 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.011 c