imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 26.11.2003, 11:45     # 1
SemKam
Junior Member
 
Регистрация: 14.11.2002
Адрес: LTU
Сообщения: 50

SemKam Путь к славе только начался
Question ещё delphi

Как проверить, является ли текст в 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.
SemKam вне форума  
Старый 26.11.2003, 12:46     # 2
someone312002
Junior Member
 
Регистрация: 17.12.2002
Адрес: [EST], Tallinn
Сообщения: 120

someone312002 Путь к славе только начался
Открываешь вкладку Additional палитры компонентов и находишь там TMaskEdit и... наслаждаешься жизнью!!!
__________________
"я не волшебник - я только учусь..." (c)
...а зовут меня Олег...
someone312002 вне форума  
Старый 26.11.2003, 15:07     # 3
SemKam
Junior Member
 
Регистрация: 14.11.2002
Адрес: LTU
Сообщения: 50

SemKam Путь к славе только начался
Дело в том, что мне нужно вводить не только числа. Стоят radiobutton-ы, один из которых и даёт произвести фильтрацию по 'id'.
Но нечаянно окрыв вместо dpr файла exe, обнаружил, что уже скомпилленный файл рапортует как и надо, а в дельфи - выкидывает из программы
Это только у меня так, или так и должно быть?
SemKam вне форума  
Старый 26.11.2003, 15:21     # 4
someone312002
Junior Member
 
Регистрация: 17.12.2002
Адрес: [EST], Tallinn
Сообщения: 120

someone312002 Путь к славе только начался
о-па-на... приплыли казАки...
вопрос нескромный можно: А кто ж фильтрует (даёт возможность юзеру) знать ИД какой-либо записи ? РадоБаттон, говоришь, дык и сделай так, чтобы когда стоит режим активности фильтра, то проверялось бы наличие (и содержимое, ессно) поля фильтра, если нет - дейтсвовали бы СКЛ строки по-умолчанию. Ведь они есть ?
__________________
"я не волшебник - я только учусь..." (c)
...а зовут меня Олег...
someone312002 вне форума  
Старый 26.11.2003, 15:53     # 5
SemKam
Junior Member
 
Регистрация: 14.11.2002
Адрес: LTU
Сообщения: 50

SemKam Путь к славе только начался
Цитата:
someone312002:
СКЛ строки по-умолчанию. Ведь они есть ?
может и есть, если скажешь, кто они такие, эти СКЛ...
SemKam вне форума  
Старый 26.11.2003, 16:12     # 6
someone312002
Junior Member
 
Регистрация: 17.12.2002
Адрес: [EST], Tallinn
Сообщения: 120

someone312002 Путь к славе только начался
Тип TStrings компонента TQuery свойсвто SQL
__________________
"я не волшебник - я только учусь..." (c)
...а зовут меня Олег...
someone312002 вне форума  
Старый 26.11.2003, 16:49     # 7
aleks_k2
Junior Member
 
Регистрация: 13.09.2002
Сообщения: 105

aleks_k2 Нимб уже пробиваетсяaleks_k2 Нимб уже пробивается
Если в Delphi в Tools->Environment options->Break on Exception
стоит крестик, то под отладчиком тебя будет выбрасывать в
программу даже если это exception в дальнейшем нормально
обрабатывается.

При этом можно нажать F9 и программа пойдет дальше.
aleks_k2 вне форума  
Старый 26.11.2003, 23:39     # 8
SemKam
Junior Member
 
Регистрация: 14.11.2002
Адрес: LTU
Сообщения: 50

SemKam Путь к славе только начался
someone312002
ааааа, вот ты о чём... так эта... у меня без sql и tquery...

aleks_k2
Я так и думал, тока удостовериться хотел
SemKam вне форума  
Старый 27.11.2003, 13:30     # 9
SpacerV
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;
 
Старый 28.11.2003, 08:50     # 10
asdus
Junior Member
 
Аватар для asdus
 
Регистрация: 26.03.2003
Сообщения: 104

asdus Известность не заставит себя ждать
наибанальное...

Код:
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;
__________________
Секс - хорошая штука. Как ни крути...
asdus вне форума  
Старый 05.12.2003, 02:05     # 11
Izzyy
Junior Member
 
Аватар для Izzyy
 
Регистрация: 20.06.2003
Адрес: Israel
Сообщения: 106

Izzyy Путь к славе только начался
Можно эту же проверку делать в обработчике onChange и не давать юзеру вводить не нужные значения, выводить сообщение об ошибке и возвращать фокус на ввод.
Я только не совсем понял, а чем TMaskEdit не устроил?
Izzyy вне форума  
Старый 05.12.2003, 20:15     # 12
strah
Member
 
Регистрация: 16.10.2002
Адрес: Moscow
Сообщения: 312

strah Молодецstrah Молодецstrah Молодец
Гм может в лужу сяду,но в билдере есть такая функция как StrToInt , Создать обработчик ее ошибок и все.(Не знаю есть ли подобная функция в дельфях).
strah вне форума  
Старый 09.12.2003, 11:33     # 13
ASol
Member
 
Аватар для ASol
 
Регистрация: 02.12.2003
Адрес: Там где истина
Сообщения: 381

ASol Имеются все основания чтобы гордиться собойASol Имеются все основания чтобы гордиться собойASol Имеются все основания чтобы гордиться собойASol Имеются все основания чтобы гордиться собойASol Имеются все основания чтобы гордиться собойASol Имеются все основания чтобы гордиться собойASol Имеются все основания чтобы гордиться собойASol Имеются все основания чтобы гордиться собойASol Имеются все основания чтобы гордиться собойASol Имеются все основания чтобы гордиться собой
Ставишь TMaskEdit, а в зависимости от выбранного RadioButton назначаешь для TMaskEdit.EditMask строку маски и все, сможешь как текст вводить так и число!

А можно как Izzyy сказал, проверку делать в обработчике onChange и не давать юзеру вводить не нужные значения, я так тоже иногда пользую TEdit, причем один обработчик можно использовать сразу для нескольких полей ввода!
__________________
Молчание не всегда доказывает присутствие ума, но доказывает отсутствие глупости.
(с) Буаст
ASol вне форума  
Старый 09.12.2003, 13:21     # 14
ReapeR
Advanced Member
 
Аватар для ReapeR
 
Регистрация: 08.08.2002
Адрес: Nab. Chelny, Tatarstan
Сообщения: 447

ReapeR МолодецReapeR МолодецReapeR Молодец
Код:
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.
ReapeR вне форума  
Старый 20.12.2003, 15:32     # 15
Puh
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;
 
Старый 23.12.2003, 13:12     # 16
strah
Member
 
Регистрация: 16.10.2002
Адрес: Moscow
Сообщения: 312

strah Молодецstrah Молодецstrah Молодец
А еще была такая функция StrToIntDef
допустим:
i= StrToIntDef(edit1->text,0)
Если перевело нормально,то работает как обычный StrToInt, иначе i присваевается 0(ну или,что после запятой поставишь)
Единственная проблемма,приходится присваивать i целое значение,но в большинстве случаев можно найти значение,которого в реальности быть не может.
strah вне форума  

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 20:52.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.