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

Вниз

Почему этот код не работает ?!!! Помогите!!!плиз   Найти похожие ветки 

 
Part   (2002-11-11 11:56) [0]

По идее этот код должен отлавливать неправильные числа, но когда туда записываешь стринг - возникает EDatabaseError который я не могу перехватить :( Помогите!!!

procedure TForm_R.DBEdit20Exit(Sender: TObject);
var
n : integer;
begin
try
n:= StrToInt(Form_R.DBEdit20.Text);


except
on EDatabaseError do
begin
ShowMessage("Incorrect format!!. Please enter number 1-31!");
DBEdit20.SetFocus;
end;
end;
if (n >31) or (n<1) then
begin
ShowMessage("Incorrect format!!. Please enter number 1-31!");
DBEdit20.SetFocus;
end;
end;


 
Alx2 ©   (2002-11-11 12:00) [1]

>Part (11.11.02 11:56)
>n:= StrToInt(Form_R.DBEdit20.Text);
> on EDatabaseError do

Вряд ли StrToInt вернет EDatabaseError

Вот пример из хэлпа

const

CRLF = #13 + #10;
var
TempDate: TDateTime;
begin
try
TempDate := StrToDateTime("99/99/1998");
except
on E: EConvertError do
ShowMessage(E.ClassName + CRLF + E.Message);
end;



 
Alx2 ©   (2002-11-11 12:03) [2]

>Part (11.11.02 11:56)
Вообще говоря, с помощью E.ClassName можно определить кто пришел.


 
KoluChi ©   (2002-11-11 12:05) [3]

во-первыx, лучше использовать
n := StrToIntDef(Form_R.DBEdit20.Text, 0);
а во-вторых согласен с Alx2
EDatabaseError - ошибка базы данных, а не преобразования





 
KoluChi ©   (2002-11-11 12:07) [4]

DBEdit20.Field.Value := StrToIntDef(Form_R.DBEdit20.Text, 0);


 
holy   (2002-11-11 12:09) [5]

Народ, не мучайте человека... Попробуй запустить прогу не из Делфей (ее обработчик сам все перехватывает и проге не достается)


 
Part   (2002-11-11 12:10) [6]

Я понимаю - но как отловить этот EDatabaseError? Когда переходишь с этого поля на другое возникает этот ерор :( У меня стоит обработчик на OnExit но ошибочка проходит мимо ???



 
Alx2 ©   (2002-11-11 12:14) [7]

>holy (11.11.02 12:09)
>Попробуй запустить прогу не из Делфей ( ее обработчик сам все
>перехватывает
и проге не достается)

Снять
Tools->Debugger->Language Exceptions->Stop on Delphi Exceptions


 
KoluChi ©   (2002-11-11 12:20) [8]

DataSource.AutoEdit := true - поэтому при выходе из DBEdit изменения пытаются сохранить в базе данных. Отловить можно
по событиям DataSource.DataSet.OnBeforePost;


 
holy   (2002-11-11 12:25) [9]

Тогда, если такое дело сделай проще... Судя по всему у тебя на форме DBEdit (и видимо ОнЭксит происходит позже, чем попытка записи в базу) махни его на едит просто и из него в соответствующее поле заноси руками. или же не меняя дбедита сделай ему обработчик события от кнопок клавиатуры и проверяй
if not Key in ["0".."9",#9,#8] then key:=0;
Тогда символы не описанного здесь кода просто не введутся.


 
Part   (2002-11-11 12:43) [10]

to KoluChi

я посмотрел DataSource.AutoEdit := false и все равно сначала пытается сделать апдейт базе , а потом эксит :((

всем спасибо holy - попробую сделать как ты посоветовал - вносить то в Едит просто - а вот чтоб пользователь видел значения базы когда ничего не меняет ?


 
Holy   (2002-11-11 12:58) [11]

2Part
Вноси в едит значения из поля... Еще можно попробовать у Table событие вроде BeforeEdit,BeforePost,BeforeInsert oбрабатывать или After... Попробуй.


 
MsGuns ©   (2002-11-11 13:09) [12]

ИМХО, здесь делается попытка проверить корректность введенного ЧИСЛА даты. Я в таких случаях проверяю в защищенном блоке ВСЮ дату, т.е. ЧЧММГГГГ. Если все три составляющих в разных контролах, то не следует фокусировать именно ошибочный контрол, а просто давать одну мессагу. Контроль же делать не по OnExit каждого DBEDIT, а по кнопке "Записать". Да, ессно, вместо DBEdit использовать обычные TEdit на отдельной панельке рядом с гридом.
Что есть лучше хотя бы потому, что Датасет находится не в броузерном стате минимальное время (что, например, весьмо критично для формата Paradox)



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

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

Наверх




Память: 0.5 MB
Время: 0.013 c
1-69388
123000
2002-11-10 16:19
2002.11.21
Image lists


3-69197
AM
2002-11-01 12:02
2002.11.21
Как выловить соб. OnMouseDown() для самих строк DBGrid?


1-69382
greenrul
2002-11-10 15:15
2002.11.21
Как преобразовать дату в удобный формат?


7-69595
isc
2002-09-20 18:36
2002.11.21
Работа с LPT портом


1-69227
Fog
2002-11-09 15:05
2002.11.21
Как создать...