| imho.ws |
![]() |
|
|
|
# 1 |
|
Junior Member
Регистрация: 14.11.2002
Адрес: LTU
Сообщения: 50
![]() |
Как проверить, является ли текст в Edit1 - integer? Делаю фильтрацию по разным критериям, один из них - как раз integer. Если в Edit1 текст не будет числовым, программа накрывается. А охота бы сделать мессагу, мол "Чё ты в самом-то деле, поле в базе числовое, а ты, ***** чё пишешь?!"
Кста, пробовал сделать try... except, но вот чё писать в этом except? "Поможите, люди добрые, чем сумеете..." Добавлено: чтоб было понятнее - try begin Table1.Filtered := False; Table1.Filter := 'Id = ' + QuotedStr(Edit1.Text); --> На этой строке останавливается и рапортует об ошибке.... Table1.Filtered := True; end; except begin MessageDlg('Error', mtError, [mbOK], 0); exit; end; end; Последний раз редактировалось SemKam; 26.11.2003 в 12:18. |
|
|
|
|
# 3 |
|
Junior Member
Регистрация: 14.11.2002
Адрес: LTU
Сообщения: 50
![]() |
Дело в том, что мне нужно вводить не только числа. Стоят radiobutton-ы, один из которых и даёт произвести фильтрацию по 'id'.
Но нечаянно окрыв вместо dpr файла exe, обнаружил, что уже скомпилленный файл рапортует как и надо, а в дельфи - выкидывает из программы Это только у меня так, или так и должно быть? |
|
|
|
|
# 4 |
|
Junior Member
Регистрация: 17.12.2002
Адрес: [EST], Tallinn
Сообщения: 120
![]() |
о-па-на... приплыли казАки...
вопрос нескромный можно: А кто ж фильтрует (даёт возможность юзеру) знать ИД какой-либо записи ? РадоБаттон, говоришь, дык и сделай так, чтобы когда стоит режим активности фильтра, то проверялось бы наличие (и содержимое, ессно) поля фильтра, если нет - дейтсвовали бы СКЛ строки по-умолчанию. Ведь они есть ?
__________________
"я не волшебник - я только учусь..." (c) ...а зовут меня Олег... |
|
|
|
|
# 7 |
|
Junior Member
Регистрация: 13.09.2002
Сообщения: 105
![]() ![]() |
Если в Delphi в Tools->Environment options->Break on Exception
стоит крестик, то под отладчиком тебя будет выбрасывать в программу даже если это exception в дальнейшем нормально обрабатывается. При этом можно нажать F9 и программа пойдет дальше. |
|
|
|
|
# 9 |
|
Guest
Сообщения: n/a
|
Если тебе нужно проверить Edit1.Text, не изменяя исходный пример, то можно так:
try begin Table1.Filtered := False; Table1.Filter := 'Id = ' + QuotedStr(IntToStr(StrToInt(Edit1.Text))); --> На этой строке останавливается и рапортует об ошибке.... Table1.Filtered := True; end; except begin MessageDlg('Error', mtError, [mbOK], 0); exit; end; end; StrToInt сгенерирует исключение, если не сможет перевести строку в число. Хотя смотрится все это не очень-то красиво. Добавлено через 16 минут: Вот чего получилось: Код:
try
Table1.Filtered := False;
Table1.Filter := 'Id = ''' + IntToStr(StrToInt(Edit1.Text) + '''';
Table1.Filtered := True;
except
MessageDlg('Error', mtError, [mbOK], 0);
exit;
end;
|
|
|
# 10 |
|
Junior Member
Регистрация: 26.03.2003
Сообщения: 104
![]() |
наибанальное...
Код:
function TForm1.CheckStr(sstr: string): boolean; var i: integer; begin CheckStr:=false; for i:=1 to length(sstr) do begin if (copy(sstr, i, 1)[i] in ['a'..'z']) or (copy(sstr, i, 1)[i] in ['A'..'Z']) or (copy(sstr, i, 1)[i] in ['А'..'Я']) or (copy(sstr, i, 1)[i] in ['а'..'я']) then CheckStr:=true; end; end;
__________________
Секс - хорошая штука. Как ни крути... |
|
|
|
|
# 13 |
|
Member
Регистрация: 02.12.2003
Адрес: Там где истина
Сообщения: 381
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Ставишь TMaskEdit, а в зависимости от выбранного RadioButton назначаешь для TMaskEdit.EditMask строку маски и все, сможешь как текст вводить так и число!
А можно как Izzyy сказал, проверку делать в обработчике onChange и не давать юзеру вводить не нужные значения, я так тоже иногда пользую TEdit, причем один обработчик можно использовать сразу для нескольких полей ввода!
__________________
Молчание не всегда доказывает присутствие ума, но доказывает отсутствие глупости. (с) Буаст |
|
|
|
|
# 14 |
|
Advanced Member
Регистрация: 08.08.2002
Адрес: Nab. Chelny, Tatarstan
Сообщения: 447
![]() ![]() ![]() |
Код:
Function ValidInt (AText:String) : Integer;
Begin
try
Result:=0;
StrToInt(AText);
except
on E:EConvertError do Result:=-1;
end;
end;
__________________
-=Nomen est Omen=- Последний раз редактировалось ReapeR; 09.12.2003 в 13:24. |
|
|
|
|
# 15 |
|
Guest
Сообщения: n/a
|
На основе вышесказанного напрашивается простая проверка:
procedure TForm1.Edit1Change(Sender: TObject); var i:integer; Str:string; begin for i:=1 to Edit1.GetTextLen do begin if (not (copy(Edit1.Text, i, 1)[1] in ['0'..'9'])) then begin Str:=Edit1.Text; SetLength(Str,Edit1.GetTextLen-1); Edit1.Text:=Str; MessageDlg('Очепятка',mtError,[mbOk],0) end end end; |
|
|
# 16 |
|
Member
Регистрация: 16.10.2002
Адрес: Moscow
Сообщения: 312
![]() ![]() ![]() |
А еще была такая функция StrToIntDef
допустим: i= StrToIntDef(edit1->text,0) Если перевело нормально,то работает как обычный StrToInt, иначе i присваевается 0(ну или,что после запятой поставишь) Единственная проблемма,приходится присваивать i целое значение,но в большинстве случаев можно найти значение,которого в реальности быть не может. |
|
|