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

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

Ограничения полей в IB [IB6.x]


Анатолий ©   (2002-11-29 15:09:00) 

Как в IB описать поля (домены?) startDate & endDate при ограничениях
startDate >= "сегодня" DEFAULT "сегодня"
endDate >= startDate


kaif   (2002-11-30 03:23:00) [1]

Если сегодня юзер требует таких ограничений на возможность ввода дат договоров, то завтра он потребует все эти ограничения снять и позволить вводить договора задним числом. Это как пить дать. И что тогда делать с доменом, если даже такое удалось бы в нем реализовать?
Вообще рекомендую, прежде, чем вводить такие жесткие ограничения, получить с клиента бумагу с его подписью, что его эти ограничения устраивают и заверить ее нотариально, положить в банковский сейф и застраховать от потери.


Tlotr   (2002-11-30 02:05:00) [2]

Рекомендую отказаться от консоли в пользу IBExpert.
www.ibexpert.com/download
Для xUSSR бесплатно, за что разработчикам ОГРОМНОЕ ПАСИБО.
Наиболее удобная программа управления IB.


Victor_Cr   (2002-11-29 22:03:00) [3]

Понимаешь на уровне домена типа ты можешь указать только ограничения для данного поля. Все остальные проверки делаются из триггеров, это хороший стиль программирования баз данных. Покрайней мере надежность БД, защита от случайных изменений (ошибок, диверсий) повышается. Будет лучше делать проверку именно в триггере. Если чего-то непонятно в самом процессе создания триггера, то поищи в интернете документацию. Это не сложно (я имею в виду написание триггеров), и достаточно познавательно. :-)


Анатолий   (2002-11-29 17:17:00) [4]

Я имел ввиду такое вот решение проверки D2>D1:
CREATE TABLE TEST
(
D1 DATE,
D2 DATE,
CHECK(D2>D1)
);
Это я пишу в окне InteractiveSQL, но во вкладке IBCOnsole-TableProperties-Metadata по непонятным мне причинам прописано:
CREATE TABLE TEST
(
D1 TIMESTAMP,
D2 TIMESTAMP
);
Эта конструкция работает.
А для DEFAULT "сегодня" предполагал написаить что-то типа
CREATE TABLE TEST
(
D1 DATE DEFAULT "не знаю какая сис. переменная",
D2 DATE,
CHECK(D2>D1)
);


Victor_Cr   (2002-11-29 16:36:00) [5]


Пишешь триггер, который проверяет перед вставкой или изменением,
для вставки даты создания договора:
new.BeginDate := "now";

для проверки даты закрытия:
if new.BeginDate < new.EndDate then
Создаешь исключительную ситуацию или new... := old...;


Val   (2002-11-29 16:21:00) [6]

сорри за некоторый повтор Prooksius ©, отвлекся и опоздал запостить :(


Val   (2002-11-29 16:20:00) [7]

По теме:
"сегодня" - это, кажется, Now, вернее это "сейчас", но, если нет сис. переменной типа Today, то можно просто обрезать время у Now.
Но, если, проблема стоит, как описано в Анатолий (29.11.02 16:05), то это несколько некорректное решение. Удобнее и правильнее решать эти вопросы с помощью средств сервера.
>roottim (29.11.02 16:12) - именно сервера, для чего существуют триггера и хп?


Prooksius   (2002-11-29 16:17:00) [8]

2 roottim (29.11.02 16:12)
Если это возможно, лучше перенести такие проверки на сервер.
В данном случае это возможно.


Prooksius   (2002-11-29 16:16:00) [9]

Конечно можно и нужно по-другому.
В таблице делаешь проверку, не является ли поле начала договора больше, чем окончания (check BeginDate < EndDate)
А в триггере проверяешь, чтобы BeginDate был = сегодня
В клиенте при новом договоре по умолчанию ставишь в соотв. поле сегодня.


roottim   (2002-11-29 16:12:00) [10]

если вы даже зададите такие ограничения, то как вы хотите хранить вчерашние докуметы?, ведь они уже непопадают в вашу область.
Выход. Реализовывать ограничение на уровне клиента.


Анатолий   (2002-11-29 16:05:00) [11]

Таблица должна содержать колонки
Дата начала договора
Дата закрытия договора.
Здравый смысл подсказывает, что договор не может быть закрыт раньше, чем он составлен. При этом доовор не может быть составлен вчерашним числом. Кроме того, удобно было бы автоматически проставлять текущую дату для поля Дата начала договора.


Victor_Cr   (2002-11-29 15:26:00) [12]

А для каких целей, можно узнать? Я к тому что, а вдруг это можно сделать по другому.


Наверх

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