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

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

Как на поле в таблице установить ограничение [D7, IB6.x]


ZemA ©   (2003-11-04 14:23:00) 

Задача такая, есть поле INN, нужно что-бы в него можно было ввести только 7 цифр.
Я знаю что при создании таблици нужно установить check на поле.
Но какую надо задать маску?


Zacho   (2003-11-06 07:53:00) [1]


> ZemA (06.11.03 07:20) [15]

Ну а в IB тебе придется или написать триггера BEFORE INSERT и BEFORE UPDATE, либо написать UDF и сделать на поле CHECK CONSTRAINT


ZemA   (2003-11-06 07:20:00) [2]


> }|{yk © (04.11.03 17:18) [12]
> Не понял. 7 цифр или 7 любых символов? Если 7 цифр, то делай
> CAST а потом проверяй меньше ли число 10000000 (хотя зачем
> цифровому полю делять тип char?). 7 символов - так делай
> длину поля 7


Значение поля может быть "0000001" и если полю сделать числовой тип, то в итоге получится 1 а надо "0000001".
В Paradox 7 я делаю маску *7{#} на поле типа Alpha и могу ввести в поле только 7 цифр.


Zacho   (2003-11-04 17:31:00) [3]


> Johnmen © (04.11.03 17:15) [11]

Ага :))


mOOx_   (2003-11-04 17:27:00) [4]

Слыште, а веть Жук дело говорит :)


}|{yk   (2003-11-04 17:18:00) [5]

Не понял. 7 цифр или 7 любых символов? Если 7 цифр, то делай CAST а потом проверяй меньше ли число 10000000 (хотя зачем цифровому полю делять тип char?). 7 символов - так делай длину поля 7


Johnmen   (2003-11-04 17:15:00) [6]

>Zacho © (04.11.03 17:09)

Синхронизация продолжается...:))))))


Johnmen   (2003-11-04 17:12:00) [7]

>mOOx_ © (04.11.03 17:03)

Попытаться можно CAST"ом.
Если неудача, то будет возб Уждено исключение...:)))

Но, безусловно, UDF лучшее...


Zacho   (2003-11-04 17:09:00) [8]


> mOOx_ © (04.11.03 17:03) [8]

Решение проблемы 7-ми симвлолов - Johnmen © (04.11.03 14:36) [1], или примерно тоже самое в триггере с вызовом Exception
Пытаться пребразовать в integer - CAST(NEW.MY_FIELD AS INTEGER), обработка исключения - WHEN, а можно и не обрабатывать, если в триггере BEFORE INSERT или BEFORE UPDATE произойдет исключение, то текущая операция отмениться.


mOOx_   (2003-11-04 17:03:00) [9]

2Zacho ©: поясни, пожалуйста, как можно попытаться преобразовать значение поля в интегер? Ну, в смысле, понятно, как, но вот как обработать сам факт того, что преобразование завершилось неудачей. К тому же это не как не решит проблему 7-и символов :).
Мне кажется, что только УДФ. При этом ее можно и в триггер и в процедуру и в чек... Вообщем...
Удачи.


Zacho   (2003-11-04 16:53:00) [10]


> mOOx_ © (04.11.03 16:43) [5]

Нет, не глупость. Boolean без проблем эмулируется любым другим типом данных, например INTEGER. Кстати, в IB7 есть boolean.

2 ZemA: Пиши UDF. Или триггер BEFORE INSERT / BEFORE UPDATE с попыткой преобразовать значение поля в INTEGER.


Sandman25   (2003-11-04 16:44:00) [11]

Можно и триггер с проверкой попробовать прицепить.


mOOx_   (2003-11-04 16:43:00) [12]

Хотя может и глупость сказал. Булеан веть нет в ИБазе :(


mOOx_   (2003-11-04 16:42:00) [13]

Пиши УДФ, чтоб булеан возвращала. И что-то типа
CHECK MY_UDF(VALUE).
ЗЫ: вышеизложенное есть преположение и никак не притендует на истинность. Просто предположил :)


Sandman25   (2003-11-04 16:40:00) [14]

В IB есть что-нибудь типа matches "[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]"?


ZemA   (2003-11-04 16:25:00) [15]


> Johnmen © (04.11.03 14:36) [1]
> CHECK (VALUE LIKE "_______")

Так не пойдет. Тип поля char, а значение должно состоять из цифр.
Например: "1234567".


Johnmen   (2003-11-04 14:36:00) [16]

CHECK (VALUE LIKE "_______")


Наверх

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