Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

проверка вводимого значения


Страницы:   1 2 3 4

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;


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо