Текущий архив: 2005.09.25;
Скачать: CL | DM;
Вниз
Сист. таблицы, узнать constraint некоего поля Найти похожие ветки
← →
Juice © (2005-08-09 14:25) [0]Доброго дня всем. Мне нужно узнать можно ли в поле с опр. именем опр. таблицы вносить значение null. Если поле обьявлено просто как not null то оно входит в check и это узнать получается:
select rdb$relation_constraints.rdb$constraint_type cType "+
" from rdb$relation_constraints join rdb$check_constraints "+
" on rdb$relation_constraints.rdb$constraint_name=rdb$check_constraints.rdb$constraint_name "+
" where rdb$relation_constraints.rdb$constraint_type=""NOT NULL"" "+
" and rdb$relation_constraints.rdb$relation_name=:ipTable "+
" and rdb$check_constraints.rdb$trigger_name=:ipField
Однако в поля PK, FK, UNIQUE тоже нельзя вносить null-значения, но они являются constraint а не check. Не могу найти инфу о том как узнать имя поля которое относится к определенному constraint ?
← →
Juice © (2005-08-09 14:57) [1]Нашел, constraint ссылается на index, и есть табл.rdb$index_segments.
← →
paul_k © (2005-08-09 15:18) [2]Juice © (09.08.05 14:25)
Посмотреть в модели(описании) базы. Если таковое отсутствует - составить и продумать.
Указанные Вами изращения возможны при обращении к базе данных с неизвестными разработчику сущностими. ИМХО это нонсенс.
← →
Desdechado © (2005-08-09 16:41) [3]анализируй RDB$RELATION_constraints->RDB$CONSTRAINT_TYPE
← →
Juice © (2005-08-10 16:38) [4]
> Juice © (09.08.05 14:25)
> Посмотреть в модели(описании) базы. Если таковое отсутствует
> - составить и продумать.
> Указанные Вами изращения возможны при обращении к базе данных
> с неизвестными разработчику сущностими. ИМХО это нонсенс.
Анекдот :)
← →
yk © (2005-08-10 16:43) [5]Установит IBExpert и посмотреть
← →
Juice © (2005-08-10 17:54) [6]
> Установит IBExpert и посмотреть
... и его продолжение.
← →
paul_k © (2005-08-11 10:24) [7]Juice © (10.08.05 17:54) [6]
Juice © (10.08.05 16:38) [4]
Отнюдь не анекдот.
Любая работа с БД начинается с проектирования сущностей оной базы. Следовательно анекдот - это когда вместо простого взгляда на проект програмись пытается обвешать программу всяким хламом.
Стандартный вопрос на собеседовании могут задать типа а как там устроено знаешь? а где описание таблиц хранитмя? а индексы где? и прочую чепуху. Спрашивают просто для понимания насколько ты врешь. При этом правильность твоих ответов по диаграмке системных таблиц сверяют, которая у тебя за спиной обычно висит. Ибо порочная это практика рыться в системных таблицах.
Структура таблиц базы предоставляется разработчику или разрабатывается им самостоятельно или "снимается" с базы (Reverse Engineering).
Если ты таким образом хочешь проверки накрутить это бред. Намного проще добавить к форме список имен контролов и при попытке подтверждения проверять входит ли данный контрол в список и если входит то заполнен ли. Или к компонентам прикрутить поле "обязательность". Лазить в базу за этими данными и тем более ездохать по системным таблицам - порочная практика.
← →
Juice © (2005-08-11 15:38) [8]
> paul_k © (11.08.05 10:24) [7]
Я пишу компонент и этим все сказано.
Взгляните на IBTable.TableName, например, и сразу все поймете.
← →
paul_k © (2005-08-11 15:48) [9]Juice © (11.08.05 15:38) [8]
Бред Вы пишите. Ибо не продумали.
пример. Есть три поляя А, В, С. Если поле А заполнено то поле С обязательно иначе поле В обязательно. Отловите такую гадость с Вашим подходом?
Мой вам совет - не мучайте кошек тем более если компонент пишите. Насасывайте все поля в список и отмечайте галочками редактируемые обязательные и прочее. И не суйте этот список в базу ибо нефих.
И опять же прежде чем писать попробуйте описать его на бумаге. детально.
← →
Juice © (2005-08-11 16:18) [10]
> Если поле А заполнено то поле С обязательно иначе поле В
> обязательно. Отловите такую гадость с Вашим подходом?
А нафига спрашивается мне это нужно ?
> Мой вам совет - не мучайте кошек тем более если компонент
> пишите. Насасывайте все поля в список и отмечайте галочками
> редактируемые обязательные и прочее. И не суйте этот список
> в базу ибо нефих.
Что-то я вообще не понял, кто и что за список сует в базу, и как отмечать галочками (и вообще какая разница чем отмечать) обязательные поля если предварительно не узнать их ? Или юзер сам для себя отмечает какие поля обязательніе а какие нет?
← →
Sergey13 © (2005-08-11 16:27) [11]2paul_k ©
ИМХО ты не прав. Нормальный подход для написания более "интелектуального" датасета нежели стандартный.
← →
paul_k © (2005-08-11 16:29) [12]Sergey13 © (11.08.05 16:27) [11]
я не прав в том что его проектировать надо?
или я не прав что надо смотреть в настройки что это за поле в данном случае а не шарится по системным таблицам?
или?
или?
← →
Sergey13 © (2005-08-11 16:41) [13]2 [12] paul_k © (11.08.05 16:29)
Ну а если человек хочет на уровне датасета знать о заложенных в БД ограничениях, а не писать обработчики на каждый экземпляр (лично я так его понял/сам домыслил 8-)? Что неправильного в этом подходе?
Лично мне такой компонент не нужен, ибо я сомневаюсь что он будет способен разбирать запросы, а я работаю в основном с ними. Хотя для простых справочников - почему нет.
ЗЫ: Все исключительно по моим домыслам. 8-)
← →
paul_k © (2005-08-11 17:32) [14]Sergey13 © (11.08.05 16:41) [13]
Насколько я понял афтору надо проверять бизнес-логику.
то есть если поле по каким либо причинам не может быть пустым то оное надо заполнить. Если оно не заполнено обругатся.
Так вот как показывает практика - ругатся надо до отправки данных на сервер. ибо нефих на сервер некорректные данные отправлять. И тут автор прав.
С моейточки зрения автор виляет в сторону пытаясь анализировать системные таблицы. Я на его месте расширил бы TFields дополнительными полями типа "Обязательное", "Обязательное по условию...", "Редактируемое" и так далее.
Ну хочет автогр лезть на стену - пусть лезет Посмотрим что будет когда он с такими проверками будет открывать формы по 40-50 и больше полей..
← →
paul_k © (2005-08-11 17:33) [15]вместо TFields читать TFieldsDefs - описание полей датасета
← →
Juice © (2005-08-12 10:21) [16]Раскрою секрет :) Это маленький компонентик, предназначеный для простого переноса данных из одной таблицы в другую, возможно и в разные базы, ну плюс там еще несколько особенностей. Писал я его только для нужд своей организации. Т.е. схема работы типа такой - связали его с БД источника, БД приемника, выбрали для обеих таблицы (откуда-куда) а потом грид с выбором соответствий - это поле оставить, в это вставить значение такого-то поля, в это null, а это генератором получить и т.д. Там в табличке и подсказочки выводятся - тип поля источника, тип поля приемника, PK/FK.
← →
paul_k © (2005-08-12 10:43) [17]Juice © (12.08.05 10:21) [16]
А средствами сервера это никак?
странная задача...
Напоминает мне знакомого одного. все норовил требования выкатывать по прнцыпу "а сейяас этому кролику мы гланды автогеном через ж..у вырежем". Когда его задачка разбиралась по косточкам то выяснялос что ни кролик ни автоген ни гланды тут и рядом не лежали..
← →
Juice © (2005-08-13 14:01) [18]
> А средствами сервера это никак?
Думаю, что никак, хотя утверждать не буду - просто таковых не знаю (кроме как AutoPump, который совсем не вписывается в мою задачу ). Все дело в том, что выполнять перенос нужно строго в момент происхождения опр. действия и в опр. программмном обеспечении, коррегируя при этом набор данных источника или приемника, плюс предоставить удобный пользовательский интерфейс который есс-но должен отражать предметную область переносимых данных.
Страницы: 1 вся ветка
Текущий архив: 2005.09.25;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.042 c