![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как перехватить ошибку записи? [D7, Paradox]
SkullNet © (2003-09-09 18:43:00)
Проблема такая, есть поле формате Money, куда пользователь по ошибке может ввести всякую хрень явно не денежного формата, на что программа завопит ему дурным голосом о EDatadaseError и затем прервет свое выполнение. Я хочу чтобы при возникновении этой ошибки у пользователя появлялось бы мое предупреждение (MessageDlg) и была возможности все исправить.
Пробовал
Try TableName.Post;
except MessageDlg();
end;
Не помогает...
Благодарю за внимание...
stud (2003-09-10 16:35:00) [1]
а можно проще - использовать компонент типа currenceedit и не надо ничего отлавливать, и пользователь не введет чего не надо
Alexander_K (2003-09-10 16:25:00) [2]
Сорри за 2 раза...
Alexander_K (2003-09-10 16:23:00) [3]
Да можно в евенте OnPressKey просто проверять чтобы вводимое было бы цифрами
Alexander_K (2003-09-10 16:23:00) [4]
Да можно в евенте OnPressKey просто проверять чтобы вводимое было бы цифрами
Bob (2003-09-10 11:20:00) [5]
И еще. Если хочешь контролировать цифирь и только цифирь у компонента TField есть такое веселое свойство как EditMask:string. Делаешь приблизительно так FieldByName("...").EditMask:="#,##0.00". При использовании DBEdit прилепленного к этому полю программа не дасттебе ввести ничего кроме цифири. По-моему так. Если я где-то ошибся то народ или Help меня поправят.
Bob (2003-09-10 11:09:00) [6]
Абсолютно согласен с Panov. У меня тоже этот код прекрасно работает. А вместо моего "Invalid Data" напиши свое сообщение. Только лови ошибку конвертации из String в Money. Все должно быть пучком.
Rol (2003-09-10 05:58:00) [7]
All, а вам не кажется, что это исключение у него вываливается при запуске из IDE, а на Ф9 он почему-то нажать не хочет?
panov (2003-09-09 21:36:00) [8]
>SkullNet
странно, но у меня вот такой код отрабатывает совершенно спокойно, выдает только мое сообщение об ошибке.
try
tbl.Append;
tbl.FieldByName("m").AsString:=Edit1.Text;
tbl.Post;
except
ShowMessage("Err");
end;
SkullNet (2003-09-09 21:20:00) [9]
То, что я хочу вывести вместо системного, у тебя это "Invalid Data"...
Bob (2003-09-09 20:32:00) [10]
Какое сообщение-то?
SkullNet (2003-09-09 20:30:00) [11]
To Bob:
И все равно эта зараза не выдает мое сообщение...
Предложения?
Bob (2003-09-09 20:18:00) [12]
Ну во-первых:
try
Table.FieldbyName"Cost").AsString:=StrToFloat(Form2.Edit.Text);
Table.Post
except
on EConvertError do
begin
ShowMessage("Invalid data");
Edit.SetFocus
end//EConvertError
end//Try
SkullNet (2003-09-09 20:12:00) [13]
To: Anatoly Podgoretsky
Различий действительно нет, ни в одном, ни в другом варианте ошибка не ловиться...
SkullNet (2003-09-09 20:10:00) [14]
To Bob:
Контролировать ввод через MaskEdit можно, если наперед знаешь кол-во вводимых символов. Я не знаю какую сумму наберет пользователь... Или я не прав?
SkullNet (2003-09-09 20:07:00) [15]
Вот кусок кода:
procedure TForm1.ButonClick(Sender: TObject);
begin
with Form2 do
begin
Table.Insert;
Table.FieldbyName("Cost").AsString:=Form2.Edit.Text;
//поле Cost имеет формат Money.
try
Table.Post;
except
on EO: EDatabaseError do MessageDlg("",mtCustom,[mbOK],0);
end;
end;
при компиляции выдается:
[Error] ...Undeclared identifier:"EDatabaseError"
Что подскажите? Как мне самому все же обработать ошибку...
Bob (2003-09-09 19:52:00) [16]
Контролировать ввод цифр и знаков можно через MaskEdit, главное - правильно задать маску и все. Описано в примерах.
Anatoly Podgoretsky (2003-09-09 19:48:00) [17]
SkullNet (09.09.03 19:21) [4]
Различий нет, в твоем варианте обрабатываются все ошибки, в его только определенного класса.
SkullNet (2003-09-09 19:21:00) [18]
To HSolo:
Спасибо, сейчас попробую...
SkullNet (2003-09-09 19:20:00) [19]
To: Hawk2
Данные-то вводятся через Edit"ы, но котролировать надо ввод и цифр, и знаков (разделитель только ","), а мне это делать лень проще перехватить ошибку...
Hawk2 (2003-09-09 19:08:00) [20]
Если данные в поля заводятся через Edit-ы, то можно контролировать ввод и разрешать вводить только цифры.
P.S. В серйозных программах никто данные в гриде не редактирует.