Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Когда можно добавлять записи в запрос? 
:(
    Опции темы
Dims
Дата 27.8.2008, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



При каких условиях MS Access разрешает добавлять записи прямо в запрос (открытый в виде таблицы), связывающий несколько таблиц?
PM MAIL   Вверх
Akina
Дата 27.8.2008, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Только когда соблюдается правило однозначности для всех участвующих в запросе таблиц.
Ройте справку по словам "обновляемый рекордсет", "updatable recordset".


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Dims
Дата 27.8.2008, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



Конкретизирую вопрос на примере.

Есть таблица (одна) для иерархического хранения территорий. Пример её заполнения показан в прикреплённом файле.

В ней три поля: ID, Nam и UpID. UpID -- это идентификатор вышестоящей территории. Он не обязателен; в этом случае в данном поле стоит NULL и описываемая строкой территория является корневой.

Далее делаем вот такой запрос:

SELECT Land_1.Nam AS UpperNam, Land.Nam AS LowerNam
FROM Land INNER JOIN Land AS Land_1 ON Land.UpID = Land_1.ID;


Я хочу внести в него новую строку: Луна - Тихо. 

Почему не получается?


Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  landtablesample.jpg 11,04 Kb
PM MAIL   Вверх
bopoha
Дата 27.8.2008, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Таблицы должны быть связаны один-к-одному. Также есть ситуации, когда MS Access разрешает редактирование один-ко-многим, со стороны один. Если попробовать ввести данные в несуществующую запись, то будет ругаться или запись уйдет "в никуда", т.е. связи не будет. Точно не помню.

Если вы создадите схему данных и укажите соблюдать целосность, то появится больше возмжоностей.

Я же порекомендовал не играться с огнем и один-ко-многим не исользовать для редактирования и добавления. Для этого есть подчиненные формы.
PM MAIL WWW ICQ Skype GTalk   Вверх
Dims
Дата 27.8.2008, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



По моим представлениям, системе вполне достаточно информации, чтобы добавить в таблицу Land две строки, одну для Луны, с UpID=NULL и с новым значением счётчика ID, а другую -- для кратера Тихо, придав ему UpID равный ID-у Луны.

Никакий неоднозначности я не вижу.

Добавлено через 1 минуту и 58 секунд
Цитата(bopoha @  27.8.2008,  11:29 Найти цитируемый пост)
Я же порекомендовал не играться с огнем

Этот подход мною широко используется smile

Но всё же, интересно было бы понять, какие принципы управляют поведением MSAccess в данном случае.

Добавлено через 9 минут и 45 секунд
Если переформулировать запрос вот так:

SELECT Land_1.Nam AS UpperNam, Land.UpID, Land.Nam AS LowerNam
FROM Land INNER JOIN Land AS Land_1 ON Land.UpID = Land_1.ID;

то есть, добавить в вывод поле UpID подчинённой таблицы, то всё начинает работать.

При этом, при добавлении записи, поле UpID надо не заполнять -- тогда оно заполнится само, правильно.

Почему так?

Добавлено через 11 минут и 29 секунд
Если пытаться редактировать поле UpID, то возникает сообщение об ошибке.
PM MAIL   Вверх
Akina
Дата 27.8.2008, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
bopoha
Дата 27.8.2008, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Dims, я рассматриваю использование не надежных способов очень сильным ударом по сопровождаемости продукта. Поэтому не рекомнедую это использовать.

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

Цитата(Dims @  27.8.2008,  11:29 Найти цитируемый пост)
Почему так?

Мне это не извесно, есть подозрение, что это реализация редактора.
А редактировать UpID нельзя, т.к. он исопльзуется в связи.


PM MAIL WWW ICQ Skype GTalk   Вверх
Dims
Дата 27.8.2008, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



Цитата(Akina @  27.8.2008,  12:32 Найти цитируемый пост)
Теперь сделайте маленький логический шажок вперед...

Подскажите! smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.0522 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.