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

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

Синтаксическая ошибка в SQL. [D5, IB6.x]


koks ©   (2002-09-24 11:21:00) 

Уважаемые мастера, все делаю как в help-е по SQL, а вылетает синтаксическая ошибка.
Итак, создаю две таблицы: Factories и Tovar. Первая - справочник предпариятий. Вторая - Список товаров, в которой одно из полей указывает на предприятие.

CREATE TABLE "FACTORIES"
(
"ID" INTEGER NOT NULL PRIMARY KEY,
"FACTORY" VARCHAR(20) CHARACTER SET WIN1251
);

CREATE TABLE "TOVAR"
(
"ID" INTEGER NOT NULL PRIMARY KEY
"FACTORY_ID" INTEGER NOT NULL FOREIGN KEY REFERENCES Factories(ID)
);
Почему-то ругается на слово FOREIGN...

Не пойму...
Заранее благодарности..


koks   (2002-09-25 09:33:00) [1]

2 Johnmen
"Нет ! Синтаксис констрейнта на поле отличается от синтаксиса констрейнта на запись !
Ты пытаешься сделать на поле (неверный синтаксис !). А 3JIA9I CyKA © привел пример на запись.

На поле :
"FACTORY_ID" INTEGER NOT NULL REFERENCES FACTORIES(ID),"

Огромное спасибо. Вот за такие разъяснения я и люблю этот форум !
Теперь полная ясность


kaif   (2002-09-24 22:17:00) [2]

2 koks

Проблема скорее всего в том, что во второй таблице нет
PRIMARY KEY
Таблицы без PRIMARY KEY, насколько я помню, не могут иметь связей вида FOREIGN KEY.
Добавь PRIMARY KEY во вторую таблицу и попробуй еще.


Johnmen   (2002-09-24 17:07:00) [3]

>koks © (24.09.02 16:57)

Нет ! Синтаксис констрейнта на поле отличается от синтаксиса констрейнта на запись !
Ты пытаешься сделать на поле (неверный синтаксис !). А 3JIA9I CyKA © привел пример на запись.

На поле :
"FACTORY_ID" INTEGER NOT NULL REFERENCES FACTORIES(ID),


koks   (2002-09-24 16:57:00) [4]

2 3JIA9I CyKA © Да уж придется делать так...

2 Johnmen - так ведь я от туда и привел цитату... и сделал точно также.... разве нет? и ошибка..


Johnmen   (2002-09-24 16:28:00) [5]

Выкинь FOREIGN KEY - и все будет...
А вообще, посмотри InterBase SQL Reference - там подробно описан синтаксис...


3JIA9I CyKA   (2002-09-24 16:20:00) [6]

Блин! Напиши как у меня и не парься!


koks   (2002-09-24 15:49:00) [7]

Ребята, право же.... а то тут ща модераторы подтянутся.

привожу полный текст

CREATE TABLE "FACTORIES"
(
"ID" INTEGER NOT NULL,
"FACTORY" VARCHAR(20) CHARACTER SET WIN1251,
PRIMARY KEY ("ID")
);

CREATE TABLE "TOVAR"
(
"ID" INTEGER NOT NULL,
"FACTORY_ID" INTEGER NOT NULL FOREIGN KEY REFERENCES FACTORIES(ID),
"LOT" INTEGER NOT NULL,
"TYPE_ID" INTEGER NOT NULL,
"RNDFNC_ID" INTEGER NOT NULL,
"SIZECAT_ID" INTEGER NOT NULL,
"SIZEGROUP_ID" INTEGER NOT NULL,
"MAKE_ID" INTEGER NOT NULL,
"CUT_ID" INTEGER NOT NULL,
"COLOR_ID" INTEGER NOT NULL,
"CLARITY_ID" INTEGER NOT NULL,
"STONES" INTEGER NOT NULL,
"WEIGHT" FLOAT NOT NULL,
"PRICEPERCARAT" FLOAT NOT NULL,
"PRICE" FLOAT NOT NULL,
"CONTRACT" INTEGER NOT NULL,
"BOX" INTEGER NOT NULL
);

Вылетает:

Dynamic SQL Error
SQL error code = -104
Token unknown - line 4, char 31
FOREIGN



Johnmen   (2002-09-24 15:43:00) [8]

>3JIA9I CyKA ©

К сожалению, с теми, кто мне ВЫкает, я не предрасположен к общению...


3JIA9I CyKA   (2002-09-24 15:09:00) [9]

2Johnmen © (24.09.02 15:00)
Не знаю, что такое буквоедство.
Не в курсе, укого и что не стоит.
Не имею не малейшего представления о неявном создании constraint-ов.
Меня беспокоит только последнее.
Чем заниматься моим воспитанием, лучше перестаньте мне "тыкать" и уточните, что Вы имели ввиду.
>>Johnmen © (24.09.02 13:26)


Johnmen   (2002-09-24 15:00:00) [10]

>3JIA9I CyKA © (24.09.02 14:48)

Занимаемся буквоедством....? Не стоит, право... :-)))


3JIA9I CyKA   (2002-09-24 14:48:00) [11]

2kaif
Не надо меня лечить - я здоров:

constraint создается неявно...
Johnmen © (24.09.02 13:26)
Если constraints не названы явно

Вроде бы речь о разных вещах. Или нет?


koks   (2002-09-24 14:15:00) [12]

Пацаны, экскьюз меня, но я так и не понял, почему у меня синтаксическоя ошибка (-104) в символе, где начинается FOREIGN
(в свете приведенного из Help примера...) А запятую я пропуститл, когда копировал в сообщение. А так она у меня стоит.


Johnmen   (2002-09-24 13:46:00) [13]

>3JIA9I CyKA © (24.09.02 13:35)

Добрый день !

Я что й то не уловил твоих намеков....:))

С уважением, JM.


kaif   (2002-09-24 13:41:00) [14]

2 3JIA9I CyKA © (24.09.02 13:35)
Если constraints не названы явно, то они все равно создаются, но с внутренними именами.


3JIA9I CyKA   (2002-09-24 13:35:00) [15]

Что значит неявно?! Foreign key больше не constraint?!
Я ещё допускаю, что неявно создаются индексы, но чтобы так!

Johnmen, доброе утро!!

С уважением, 3C.


Johnmen   (2002-09-24 13:26:00) [16]

>koks © (24.09.02 12:34)

В этом случае constraint создается неявно...


kaif   (2002-09-24 13:17:00) [17]

Ты просто забыл запятую поставить между определениями полей второй таблицы.
:))


koks   (2002-09-24 12:34:00) [18]

Выдержки из Help-а по SQL:

In the next example, the F2 column in table T2 is a foreign key that references table T1 through T1"s primary key P1. When a row in T1 changes, that change propagates to all affected rows in table T2. When a row in T1 is deleted, all affected rows in the F2 column of table T2 are set to NULL.

CREATE TABLE T1 (P1 INTEGER NOT NULL PRIMARY KEY);

CREATE TABLE T2 (F2 INTEGER FOREIGN KEY REFERENCES T1.P1
ON UPDATE CASCADE
ON DELETE SET NULL);

Здесь нет никаких constraint. Поясните, на теоретическом уровне...

P.S. у меня там еще будет ON UPDATE CASCADE ON DELETE SET NULL


3JIA9I CyKA   (2002-09-24 11:27:00) [19]

Ку?

CREATE TABLE "FACTORIES" (
"ID" INTEGER NOT NULL,
"FACTORY" VARCHAR(20) CHARACTER SET WIN1251,
CONSTRAINT PK_FACTORIES PRIMARY KEY (ID)
);

CREATE TABLE "TOVAR" (
"ID" INTEGER NOT NULL,
"FACTORY_ID" INTEGER NOT NULL,
CONSTRAINT PK_TOVAR PRIMARY KEY (ID),
CONSTRAINT FK_TOVAR_FACTORIES FOREIGN KEY (FACTORY_ID) REFERENCES FACTORIES (ID)
);


Наверх

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