IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   ещё delphi (https://www.imho.ws/showthread.php?t=44383)

SemKam 26.11.2003 11:45

ещё 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;


someone312002 26.11.2003 12:46

Открываешь вкладку Additional палитры компонентов и находишь там TMaskEdit и... наслаждаешься жизнью!!!

SemKam 26.11.2003 15:07

Дело в том, что мне нужно вводить не только числа. Стоят radiobutton-ы, один из которых и даёт произвести фильтрацию по 'id'.
Но нечаянно окрыв вместо dpr файла exe, обнаружил, что уже скомпилленный файл рапортует как и надо, а в дельфи - выкидывает из программы :)
Это только у меня так, или так и должно быть?

someone312002 26.11.2003 15:21

о-па-на... приплыли казАки...
вопрос нескромный можно: А кто ж фильтрует (даёт возможность юзеру) знать ИД какой-либо записи ? РадоБаттон, говоришь, дык и сделай так, чтобы когда стоит режим активности фильтра, то проверялось бы наличие (и содержимое, ессно) поля фильтра, если нет - дейтсвовали бы СКЛ строки по-умолчанию. Ведь они есть ?

SemKam 26.11.2003 15:53

Цитата:

someone312002:
СКЛ строки по-умолчанию. Ведь они есть ?
может и есть, если скажешь, кто они такие, эти СКЛ... :)

someone312002 26.11.2003 16:12

Тип TStrings компонента TQuery свойсвто SQL

aleks_k2 26.11.2003 16:49

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

При этом можно нажать F9 и программа пойдет дальше.

SemKam 26.11.2003 23:39

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

aleks_k2
Я так и думал, тока удостовериться хотел :)

SpacerV 27.11.2003 13:30

Если тебе нужно проверить 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;


asdus 28.11.2003 08:50

наибанальное...

Код:

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;


Izzyy 05.12.2003 02:05

Можно эту же проверку делать в обработчике onChange и не давать юзеру вводить не нужные значения, выводить сообщение об ошибке и возвращать фокус на ввод.
Я только не совсем понял, а чем TMaskEdit не устроил?

strah 05.12.2003 20:15

Гм может в лужу сяду,но в билдере есть такая функция как StrToInt , Создать обработчик ее ошибок и все.(Не знаю есть ли подобная функция в дельфях).

ASol 09.12.2003 11:33

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

А можно как Izzyy сказал, проверку делать в обработчике onChange и не давать юзеру вводить не нужные значения, я так тоже иногда пользую TEdit, причем один обработчик можно использовать сразу для нескольких полей ввода!

ReapeR 09.12.2003 13:21

Код:

Function ValidInt (AText:String) : Integer;
Begin
  try
    Result:=0;
    StrToInt(AText);
  except
    on E:EConvertError do Result:=-1;
  end;
end;


Puh 20.12.2003 15:32

На основе вышесказанного напрашивается простая проверка:

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;

strah 23.12.2003 13:12

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


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

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