Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.09.25;
Скачать: [xml.tar.bz2];

Вниз

Сист. таблицы, узнать 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.051 c
2-1124205803
Ксардас
2005-08-16 19:23
2005.09.25
Как програмно удалить файл?


3-1123592233
Shopot
2005-08-09 16:57
2005.09.25
ADO и база данных Access.


3-1123757311
Marat
2005-08-11 14:48
2005.09.25
Долгий поиск


1-1125599162
hgd
2005-09-01 22:26
2005.09.25
Внедрения google maps


1-1125816959
Dibroff
2005-09-04 10:55
2005.09.25
Как правильно нарисовать вне формы и поверх остальных форм





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский