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

Вниз

Работа с MS Access   Найти похожие ветки 

 
Sword-Fish   (2002-12-16 20:17) [0]

Здравствуйте многоуважаемые....
Мне нужна пооооомощь !!!!!
Я пишу программу для туристической фирмы и работаю с БД через ADO !!!
У меня есть 2 таблицы: со списком туристов и со списком информации на каждого туриста.
Так вот мне надо сделать так, чтобы когда я удаляю рейс, то вместе с ним удалялась инфа на этого туриста из 2-ой таблицы.
Можно конечно через циклы отслеживать и т.д. НО !!!!
Мне надо через Access !!! Там есть такая феня...
"Обеспечение целостности данных": каскадное обновление и каскадное удаление !!!!
Я пытаюсь делать но ..... (неудачи подстерегают меня)
Вот привожу данные 1-ой таблицы:
Code - счетчик
Name - название туриста

Вот привожу данные 2-ой таблицы:
Code - счетчик
Name - имя туриста
Age - возраст
и т.д
Я пытаюсь их в Access"e соединить и привязать но не получается!!!
please HELP MEEEEEE :) :) :)


 
menart   (2002-12-16 20:52) [1]

пробуй с помощью SQL-запросов досточно быстро получается


 
sniknik   (2002-12-16 23:41) [2]

Для создания внешнего ключа можно использовать зарезервированные слова FOREIGN KEY. Если ключ внешней таблицы состоит из нескольких полей, необходимо использовать предложение CONSTRAINT, предназначенное для создания составного индекса. При этом следует перечислить все поля, содержащие ссылки на поля во внешней таблице, а также указать имя внешней таблицы и имена полей внешней таблицы, на которые ссылаются поля, перечисленные выше, причем в том же порядке. Если адресуемые поля являются ключами внешней таблицы, указывать эти поля не следует. По умолчанию ядро базы данных воспринимает ключ внешней таблицы как адресуемые поля.
Ограничения для внешних ключей определяют конкретные действия, выполняемые в случае изменения значения соответствующего ключа:

Можно указать подлежащие выполнению действия с внешней таблицей, исходя из соответствующего действия, выполняемого над ключом в той таблице, для которой определено предложение CONSTRAINT. Например, рассмотрим следующее определение таблицы «Клиенты»:
CREATE TABLE Клиенты (ИндексКлиента INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))

Рассмотрим следующее определение таблицы «Заказы», в котором задано отношение для внешнего ключа, адресующее ключ в таблице «Клиенты»:

CREATE TABLE Заказы (КодЗаказа INTEGER PRIMARY KEY, ИндексКлиента INTEGER, ПримечанияЗаказа NCHAR VARYING (255), CONSTRAINT ВнКлЗаказыИндексКлиента FOREIGN KEY (ИндексКлиента) REFERENCES Клиенты ON UPDATE CASCADE ON DELETE CASCADE

Оба предложения ON UPDATE CASCADE и ON DELETE CASCADE определены для внешнего ключа. Предложение ON UPDATE CASCADE означает, что в случае обновления кода клиента (ИндексКлиента) в таблице «Клиенты», в таблице «Заказы» будет произведено соответствующее каскадное обновление. Каждый заказ, содержащий соответствующее значение кода клиента, будет автоматически обновлен с использованием нового значения этого кода. Предложение ON DELETE CASCADE означает, что в случае удаления клиента из таблицы «Клиенты», все строки таблицы «Заказы», содержащие код данного клиента, также будут удалены.
Рассмотрим другое определение таблицы «Заказы», где вместо операции CASCADE используется операция SET NULL:

CREATE TABLE Заказы (КодЗаказа INTEGER PRIMARY KEY, ИндексКлиента INTEGER, ПримечанияЗаказа NCHAR VARYING (255), CONSTRAINT ВнКлЗаказыИндексКлиента FOREIGN KEY (ИндексКлиента) REFERENCES Клиенты ON UPDATE SET NULL ON DELETE SET NULL

Предложение ON UPDATE SET NULL означает, что в случае обновления кода клиента (ИндексКлиента) в таблице «Клиенты», соответствующим значениям внешнего ключа в таблице «Заказы» будут автоматически присвоены значения NULL. Аналогично, предложение ON DELETE SET NULL означает, что в случае удаления клиента из таблицы «Клиенты», всем соответствующим внешним ключам в таблице «Заказы» будут автоматически присвоены значения NULL.



 
FLIZ   (2002-12-17 03:55) [3]

не понял, что конкретно не получается - связать
в самом Аксесе? не верю, там все просто :-)

сам работаю в АДО + Аксесс. в аксессе установленны
связи между таблицами, при удалении из дельфи
все прекрасно работает.

можно поточнее - в чем именно трабл. что именн
НЕ работает ?


 
Sword-Fish   (2002-12-17 09:58) [4]

У меня не получаеться связать таблицы так чтобы подчиненные сами обнавлялись и удалялись нужные данные из подчиненной таблицы !!!
Я ставлю обеспечение целостности данных и каскадное обновление и каскадное удаление связей !!!
Нажимаю Создать а он пишет: что так нельзя !!!
Может я не так делаю ???
У меня в обоих таблицах есть ключевые поля Code
В первой таблице 2 поля, во второй таблице 6 полей пытаюсь связать по ключевым полям а он пишет "Недопустимое описание поля при определении индекса или связи. (Ошибка 3409)"
Пытаюсь связать так: в главной таблице по CODE а в подчиненной по какому-нибудь полю, он пишет: "Отношение должно быть задано для одинакового количества полей с одинаковыми типами данных. (Ошибка 3368)"
Я ниче не ПОНИМАЮ !!!
ПОМОГИТЕ please !!!
Или дайте ссылку на хороший учебник...
С уважением, Sword-FISH


 
sniknik   (2002-12-17 10:34) [5]

У тебя пример перед носом (sniknik © (16.12.02 23:41)). подставь свои поля в запросы
CREATE TABLE Клиенты ....
CREATE TABLE Заказы ....
ну и поменяй имена таблиц на свои.
Хелп по SQL для Access (и для Delphi -> ADOCommand, ADODataSet,... ets.) лежит в файле JETSQL40.CHM (у тебя на компьютере, сделай поиск, при установленом в полном варианте Office2000 и ">")
Ссылка на хороший учебник -->> ближайщий технический магазин.


 
sniknik   (2002-12-17 10:36) [6]

Извиняюсь! неточность. "ближайщий магазин технической книги"


 
Sword-Fish   (2002-12-17 23:06) [7]

БОЛЬШОЕ SWORD-FISH"евское спасибо !!!!!!
:) :) :)


 
std79   (2002-12-18 16:25) [8]

sniknik
А можно дописать ON UPDATE CASCADE ON DELETE CASCADE,
чтобы при добавлении в главной таблице в таблице заказов тоже добавлялась строчка?


 
BlackTiger   (2002-12-18 16:56) [9]

Наколько я понял, "таблица туристов" это и есть "таблица рейсов"?

Ты пытаешься связать еще пустые таблицы или уже заполненные. Если заполненные, то видимо у тебя нарушена связанность. Сейчас сформулирую... Короче есть в рейсе есть ссылка на инфу туриста, которая уже удалена (кажется так, или наоборот). Внутренняя проверка integrity просто не дает создать тебе такую "непонятную" связь "чего-то" с "неизвестно-чем". Попробуй очистить таблицы от данных.

У тебя есть рейс под кодом "R1", есть инфа на туриста под кодом "T1". Но если та же инфа есть на другой рейс "R2", то каскадного удаления на получится.

Короче связать для каскада можно "что-то уникально проиндексированное" с "чем-то существующим и проиндексированным" (ОДИН-КО-МНОГИМ).


 
sniknik   (2002-12-18 17:00) [10]

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

а вообще поищи у себя JETSQL40.CHM (в руском офисе он даже будет на русском! скорее всего) и почитай что возможно что нет.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.008 c
4-37434
SYNthetic
2002-11-21 17:45
2003.01.13
Обновление устройств Plug&Paly


6-37266
kalishenko
2002-11-12 19:57
2003.01.13
Проблема с сокетами


4-37466
solo
2002-11-27 00:07
2003.01.13
Примеры использования функций ShellAPI, интерфейсов Shell s


1-37031
delta
2003-01-02 14:15
2003.01.13
Конвертация типов


4-37458
Демонов Е.В.
2002-11-26 05:36
2003.01.13
Вопрос о адресном пространстве.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский