![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как на поле в таблице установить ограничение [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 "_______")