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

Вниз

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

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

Наверх





Память: 0.48 MB
Время: 0.01 c
3-96156
rosl
2003-09-08 03:40
2003.09.29
сотрировка


14-96379
Mr@MsGuns
2003-09-11 11:35
2003.09.29
Все. Бросаем заниматься сексом. Прямо сейчас. Ни одной девочки.


1-96258
aldapooh
2003-09-17 13:33
2003.09.29
HTML Help


4-96480
shark
2003-07-26 19:19
2003.09.29
FindWindow(... , ...)


14-96436
Dimmu
2003-09-10 11:13
2003.09.29
NTFS





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