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

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

INTERBASE и CONSTRAINT [D5, IB5.x, IB6.x]


fishka ©   (2002-05-24 12:05:00) 

Не получается добавить новые ограничения целостности для таблицы (пробую и из программы и через SQL EXplorer).
Выдается ошибка: object PPP is in use. Но я же ничего не открываю. Вот код:
ALTER TABLE BBB ADD CONSTRAINT BBB_KS
FOREIGN KEY (ks)
REFERENCES PPP

или так:
ALTER TABLE BBB ADD CONSTRAINT BBB_KS
FOREIGN KEY (ks)
REFERENCES PPP (OWK)

Для таблицы PPP построен первичный ключ по столбцу OWK.
Где ошибка? Помогите, пожалуйста.


Val   (2002-05-24 17:41:00) [1]

я имел ввиду только ограничение NOT NULL, поскольку при вашем его определении сервер все равно создаст констреинт, но с системным именем, а так вы имеете констреинт, по имени которого с первого взгляда можно понять что он означает. Также и для других, желательно давать понятные имена, например используя префиксы FK_,PK_ и т.д.


fishka   (2002-05-24 17:27:00) [2]

Val © (24.05.02 17:02)
Непонятно в данном синтаксисе, где указывается тип столбца (SMALLINT, Integer и т.п.).


Val   (2002-05-24 17:02:00) [3]

>fishka (24.05.02 13:51)
создать таблицу с 2 внешними ключами не удалось
почему, что за ошибка?
code_1 SMALLINT NOT NULL
лучше объявить так:
constraint NN_BBB_code_1 check (code_1 is not null)


fishka   (2002-05-24 14:59:00) [4]

kaif © (24.05.02 14:01)
У меня тоже таблица создается только с одним внешним ключом.
А если пишу больше, то возникает ошибка. Буду создавать с одним, а потом уже ALTER TABLE ADD CONSTRAINT. Спасибо.


kaif   (2002-05-24 14:01:00) [5]

Я не пробовал прямо в тексте CREATE TABLE создавать более 1 внешнего ключа, но я знаю, что ряд отдельных команд
ALTER TABLE ADD CONSTRAINT...
подряд сработают. Если ты извлечешь скрипт базы, то там это будет происходить именно так. сначала создание таблицы, затем ряд отдельных команд ALTER TABLE с добавлением внешних ключей.


fishka   (2002-05-24 13:51:00) [6]

Спасибо всем за советы. Вечером попробую (сейчас нет 6 IB).
И еще вопрос: если внешних ключей несколько, как будет выглядеть текст запроса при создании таблицы:
CREATE TABLE BBB
( OWK SMALLINT NOT NULL,
code_1 SMALLINT NOT NULL,
code_2 SMALLINT NOT NULL,
.........,
NAME CHAR(25),
PRIMARY KEY (OWK),
constraint po_1
foreign key (code_1) references bd1 (code_n1),
constraint po_2
foreign key (code_2) references bd2 (code_n2))


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


Alexandr   (2002-05-24 12:34:00) [7]

или сам этот индекс юзал раньше .
перестартуй ibserver и все должно быть ОК


kaif   (2002-05-24 12:28:00) [8]

Может оказаться 2 коннекта по причине того, что один коннект из проекта в Delphi (например, в данный момент IBDatabase.Connected = True), а второй коннект из запущенного из-под Delphi приложения. Или включена IBConsole и сейчас работает с базой. Важно не количество разных юзеров, а количество коннектов (attachments).


fishka   (2002-05-24 12:22:00) [9]

>Alexandr ©
Спасибо за совет. Но сервер локальный, никаких пользователей вроде бы нет.


kaif   (2002-05-24 12:18:00) [10]

Это ошибка IB. Она есть даже в FireBird.
Ошибка проявляется следующим образом.
При попытке создать FOREIGN KEY сервер говорит, что таблица используется, хотя это не так, если:
1. К данной базе подключено более 1 пользователя.
2. Есть другая база с одноименной таблицей и к ней подключен хоть 1 пользователь.
Единственный способ избавиться от этой ошибки - переподключиться к базе + пользователь только Вы.

Ошибка очень неприятная.:((


Alexandr   (2002-05-24 12:07:00) [11]

1) выгони нахер пользователей из базы
2) Перезапусти ibserver


Наверх

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