Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Связь между таблицами


Автор: DDX 17.2.2005, 11:47
буду очень признателен за помощь

создаю базу ms access с помощью adox, как описано в drkb
создаю таблицы sql запросами

вопрос: как создать связь между таблицами, чтобы автоматически поддерживать целостность данных и каскадное удаление?

Delphi 6, к базе обращаюсь через ADO



Автор: Dimich 17.2.2005, 12:14
Использовать ограничения REFERENCES и FOREIGN KEY в операторе CREATE TABLE. Это обеспечит определенную ссылочную целостность. А вот насчет каскадного удаления в аксесе - то не знаю (я это обеспечиваю тригерами, которых в аксесе нет smile )

Автор: DDX 17.2.2005, 12:47
Dimich
спасибо за ответ
на sql.ru нашел, как создать связь:

one
---
o_id
o_text

many
---
m_id
o_id
m_text


ALTER TABLE many ADD CONSTRAINT FK_one_many FOREIGN KEY (o_id) REFERENCES one(o_id) ;

каскадное удаление как сделать неизвестно.. ручками наверно писать придется

Автор: Dimich 17.2.2005, 12:57
Думаю, что в аксесе только что ручками. smile

Автор: DDX 17.2.2005, 15:23
В итоге сделал так:

...
Код

adoconnection1.execute ('create table theme (t_id integer primary key , t_name string );');

adoconnection1.execute ('create table question (q_id counter primary key , q_blob image, t_id integer, constraint fk_theme FOREIGN KEY (t_id) REFERENCES theme);');

adoconnection1.execute ('create table answer (a_id counter primary key , q_id integer, a_blob image,  constraint fk_question FOREIGN KEY (q_id) REFERENCES question on delete cascade );');

...

причем, что любопытно: access при попытке выполнить такой запрос из констуктора запросов выдает "ошибка синтаксиса в предложении constraint"

при выполнении из Дельфи все тихо и мирно


Dimich, спасибо! )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)