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

Вниз

Как перехватить ошибку записи?   Найти похожие ветки 

 
SkullNet   (2003-09-09 18:43) [0]

Проблема такая, есть поле формате Money, куда пользователь по ошибке может ввести всякую хрень явно не денежного формата, на что программа завопит ему дурным голосом о EDatadaseError и затем прервет свое выполнение. Я хочу чтобы при возникновении этой ошибки у пользователя появлялось бы мое предупреждение (MessageDlg) и была возможности все исправить.
Пробовал
Try TableName.Post;
except MessageDlg();
end;
Не помогает...
Благодарю за внимание...


 
HSolo ©   (2003-09-09 18:59) [1]

try
...
except
On EТакой-тоException do
...
end;


 
Hawk2 ©   (2003-09-09 19:08) [2]

Если данные в поля заводятся через Edit-ы, то можно контролировать ввод и разрешать вводить только цифры.

P.S. В серйозных программах никто данные в гриде не редактирует.


 
SkullNet   (2003-09-09 19:20) [3]

To: Hawk2
Данные-то вводятся через Edit"ы, но котролировать надо ввод и цифр, и знаков (разделитель только ","), а мне это делать лень проще перехватить ошибку...


 
SkullNet   (2003-09-09 19:21) [4]

To HSolo:
Спасибо, сейчас попробую...


 
Anatoly Podgoretsky ©   (2003-09-09 19:48) [5]

SkullNet (09.09.03 19:21) [4]
Различий нет, в твоем варианте обрабатываются все ошибки, в его только определенного класса.


 
Bob ©   (2003-09-09 19:52) [6]

Контролировать ввод цифр и знаков можно через MaskEdit, главное - правильно задать маску и все. Описано в примерах.


 
SkullNet   (2003-09-09 20:07) [7]

Вот кусок кода:

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"

Что подскажите? Как мне самому все же обработать ошибку...


 
SkullNet   (2003-09-09 20:10) [8]

To Bob:
Контролировать ввод через MaskEdit можно, если наперед знаешь кол-во вводимых символов. Я не знаю какую сумму наберет пользователь... Или я не прав?


 
SkullNet   (2003-09-09 20:12) [9]

To: Anatoly Podgoretsky
Различий действительно нет, ни в одном, ни в другом варианте ошибка не ловиться...


 
Bob ©   (2003-09-09 20:18) [10]

Ну во-первых:
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:30) [11]

To Bob:
И все равно эта зараза не выдает мое сообщение...
Предложения?


 
Bob ©   (2003-09-09 20:32) [12]

Какое сообщение-то?


 
SkullNet   (2003-09-09 21:20) [13]

То, что я хочу вывести вместо системного, у тебя это "Invalid Data"...


 
panov ©   (2003-09-09 21:36) [14]

>SkullNet
странно, но у меня вот такой код отрабатывает совершенно спокойно, выдает только мое сообщение об ошибке.

try
tbl.Append;
tbl.FieldByName("m").AsString:=Edit1.Text;
tbl.Post;
except
ShowMessage("Err");
end;


 
Rol   (2003-09-10 05:58) [15]

All, а вам не кажется, что это исключение у него вываливается при запуске из IDE, а на Ф9 он почему-то нажать не хочет?


 
Bob ©   (2003-09-10 11:09) [16]

Абсолютно согласен с Panov. У меня тоже этот код прекрасно работает. А вместо моего "Invalid Data" напиши свое сообщение. Только лови ошибку конвертации из String в Money. Все должно быть пучком.


 
Bob ©   (2003-09-10 11:20) [17]

И еще. Если хочешь контролировать цифирь и только цифирь у компонента TField есть такое веселое свойство как EditMask:string. Делаешь приблизительно так FieldByName("...").EditMask:="#,##0.00". При использовании DBEdit прилепленного к этому полю программа не даст тебе ввести ничего кроме цифири. По-моему так. Если я где-то ошибся то народ или Help меня поправят.


 
Alexander_K ©   (2003-09-10 16:23) [18]

Да можно в евенте OnPressKey просто проверять чтобы вводимое было бы цифрами


 
Alexander_K ©   (2003-09-10 16:23) [19]

Да можно в евенте OnPressKey просто проверять чтобы вводимое было бы цифрами


 
Alexander_K ©   (2003-09-10 16:25) [20]

Сорри за 2 раза...


 
stud ©   (2003-09-10 16:35) [21]

а можно проще - использовать компонент типа currenceedit и не надо ничего отлавливать, и пользователь не введет чего не надо



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

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

Наверх




Память: 0.51 MB
Время: 0.023 c
1-96197
Memoring
2003-09-16 04:35
2003.09.29
avi внутри екзешника


8-96305
zumozzz
2003-06-04 07:22
2003.09.29
Язык


1-96231
Term
2003-09-17 17:47
2003.09.29
как удалить сом-объект


9-96049
Lavo4nik
2003-03-21 20:33
2003.09.29
А можно ли рисунок прикрепить к курсору?


14-96358
Mr@MsGuns
2003-09-11 19:44
2003.09.29
Ловец снов Стивена Кинга