![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
проверка вводимого значения
kxft78 © (2011-02-03 12:46:00)Господа подскажите, дело не хитрое но "прогуглив" пол дня так ничего и не нашел дельного.
Ситуация:
При выполнении sql скрипта (insert строки), необходимо сделать проверку на наличие содержимого поля в справочной таблице и если его там нет то обругать юзера.
сделал просто - select field from spr_table where field='edit.text'
затем
perem1:= AOQuery.FieldValues['field'];
если в запросе пусто то я соответственно получаю ошибку о невозможности присвоения строковой переменной значения null.
И все хорошо если не одно но... необходимо обругать юзера по русски и указать где он напортачил.
Пытался через try ...except наткнулся на грабли что после обработки исключения он благополучно выполняет дальнейший код, а мне это не надо!
kxft78 (2011-02-03 13:22:00) [61]И. Павел тоже спасибо, сижу выбирая как бы лучше сделать, мне кажется решение Сергея более правильно чтоли. Или в моем случае все равно? а проверяю я перед инсертом всей строки целиком, так что ситуации с Пупкиным я думаю не будет :)
Ega23 (2011-02-03 13:18:00) [62]
> IsEmpty работает не так, и поэтому не исключено, что может
> не работать вместе с RecordCount
Гы, ну тебя за язык никто не тянул, давай объясняй, чего не так в
function TDataSet.IsEmpty: Boolean;
begin
Result := FActiveRecord >= FRecordCount;
end;
и как оно может работать "не так" вместе с RecordCount.
И. Павел (2011-02-03 13:13:00) [63]> Это называется DataSet.IsEmpty
Нет. IsEmpty работает не так, и поэтому не исключено, что может не работать вместе с RecordCount.
Ega23 (2011-02-03 13:11:00) [64]
> if AOQuery.bof and AOQuery.eof
Это называетсяDataSet.IsEmpty
> все не то.
> Мне необходимо чтобы после обругания юзера дальнейший код
> не выполнялся...
Если делать идеально, то все проверки должны происходить в одной транзакции со вставкой. Ибо никто не даёт гарантии, что ты проверил 6 полей из 10, проверяешь 7-е, а Вася Пупкин в это время не обновляет 1-е.
Я в таких случаях стараюсь логику на сторону СУБД вынести и хранимку пишу.
И. Павел (2011-02-03 13:11:00) [65]А блоки перехвата ошибок в коде, где есть abort стройте так, чтобы исключение EAbort ими не обрабатывалось:
except
on EAbort do abort;
on Exception do
...
kxft78 (2011-02-03 13:10:00) [66]Сергей М твой пример работает как надо, спасибо!
чет я совсем плохой стал....
И. Павел (2011-02-03 13:07:00) [67]if AOQuery.bof and AOQuery.eof then
begin
ShowMessage('Ах ты гад! Ты что только что ввел!? Теперь все вводи заново!');
Abort;
end;
kxft78 (2011-02-03 13:06:00) [68]все не то.
Мне необходимо чтобы после обругания юзера дальнейший код не выполнялся...
Anatoly Podgoretsky (2011-02-03 13:03:00) [69]IsNull/IsEmpty
И. Павел (2011-02-03 12:52:00) [70]if AOQuery.bof and AOQuery.eof then ShowMessage('Ах ты гад! Ты что только что ввел!?');
Сергей М. (2011-02-03 12:51:00) [71]try
..
except
on e:ESomeKnownException do begin
raise EMyExceprion.Create('Юзер, ты тупорылый !');
end;
end;