Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Связь между таблицами делает запрос необновляемым.  [new]
Benzin
Member

Откуда:
Сообщений: 523
Таблица Товары, поле Производитель(целое), поле Производится(флажок).
Таблица Фирмы, поле КодФирмы(целое).
Запрос1:
SELECT Товары.Производитель, Товары.Производится
FROM Товары;
- запрос изменяемый.
Ввожу в поле Производитель условие равное коду одного из производителей.
Запрос2:
SELECT Товары.Производитель, Товары.Производится
FROM Товары
WHERE (((Товары.Производитель)=220));
- запрос изменяемый.
Заношу в табл.Фирма в поле КодФирмы число 220.
Запрос3:
SELECT Товары.Производитель, Товары.Производится
FROM Фирмы INNER JOIN Товары ON Фирмы.КодФирмы= Товары.Производитель;
- запрос становится неизменяемым. Почему?!!
24 авг 04, 18:07    [905059]     Ответить | Цитировать Сообщить модератору
 Re: Связь между таблицами делает запрос необновляемым.  [new]
Темный
Member

Откуда:
Сообщений: 11941
INNER JOIN
24 авг 04, 18:10    [905064]     Ответить | Цитировать Сообщить модератору
 Re: Связь между таблицами делает запрос необновляемым.  [new]
tim2
Member

Откуда:
Сообщений: 430
И что? Поменял на LEFT JOIN - запрос необновляемый.
Чего надо изменить-то?
24 авг 04, 18:39    [905109]     Ответить | Цитировать Сообщить модератору
 Re: Связь между таблицами делает запрос необновляемым.  [new]
tim2
Member

Откуда:
Сообщений: 430
Изменил:
...FROM Товары INNER JOIN Фирмы...
- результат не изменился
24 авг 04, 18:42    [905115]     Ответить | Цитировать Сообщить модератору
 Re: Связь между таблицами делает запрос необновляемым.  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
tim2
И что? Поменял на LEFT JOIN - запрос необновляемый.
Чего надо изменить-то?

А если так: RIGHT JOIN, и при этом Фирмы.КодФирмы - первичный ключ?
24 авг 04, 18:45    [905123]     Ответить | Цитировать Сообщить модератору
 Re: Связь между таблицами делает запрос необновляемым.  [new]
Gyslik.
Member

Откуда: Москва
Сообщений: 748
Left, right, inner      join
Делают запрос необновляемым.

Это можно обойти, например, сделав запрос на добавление.

Или иногда можно отказаться от связей для таблиц.
24 авг 04, 18:45    [905124]     Ответить | Цитировать Сообщить модератору
 Re: Связь между таблицами делает запрос необновляемым.  [new]
tim2
Member

Откуда:
Сообщений: 430
Вот так, конечно, работает:
SELECT Товары.Производитель, Товары.Производится
FROM Товары
WHERE (((Товары.Производитель) In (SELECT Фирмы.КодФирмы
FROM Фирмы;)));
но долго, блин, открывается...
24 авг 04, 18:48    [905130]     Ответить | Цитировать Сообщить модератору
 Re: Связь между таблицами делает запрос необновляемым.  [new]
Varan
Member

Откуда:
Сообщений: 1258
Benzin
С чего это вдруг он необновляемый? У меня он обновляемый.
SELECT tovar.Name, tovar.firmid, firm.Name
FROM tovar INNER JOIN firm ON tovar.firmid = firm.id
;
24 авг 04, 18:54    [905138]     Ответить | Цитировать Сообщить модератору
 Re: Связь между таблицами делает запрос необновляемым.  [new]
Benzin
Member

Откуда:
Сообщений: 523
2 tim2:
Твой способ и у меня работает, но мои таблицы, наверно, еще больше потому что задержка в открытии запроса обалденная.
2 Varan: может у нас в ключах разница?
24 авг 04, 19:00    [905147]     Ответить | Цитировать Сообщить модератору
 Re: Связь между таблицами делает запрос необновляемым.  [new]
Varan
Member

Откуда:
Сообщений: 1258
Gyslik
Left, right, inner join
Делают запрос необновляемым..

Разве? Тогда 99% запросов - необновляемые.
Агрегатные функции делают запрос необновляемым, насколько мне известно.

Это можно обойти, например, сделав запрос на добавление.

Это как это?
24 авг 04, 19:03    [905155]     Ответить | Цитировать Сообщить модератору
 Re: Связь между таблицами делает запрос необновляемым.  [new]
Varan
Member

Откуда:
Сообщений: 1258
Benzin ,
А мне кажется ты что-то недоговариваешь. Не может запрос от join-a стать необновляемым.
24 авг 04, 19:05    [905157]     Ответить | Цитировать Сообщить модератору
 Re: Связь между таблицами делает запрос необновляемым.  [new]
Latuk
Member

Откуда: N 54°38', E 037°35'
Сообщений: 7310
Может если это ADP и не прописаны свойства однозначной таблицы и команды синхронизации или например пермишн на апдейт таблицы юзеру не дан
PS чувак же не написал что это MDB поди разбери.
24 авг 04, 19:10    [905170]     Ответить | Цитировать Сообщить модератору
 Re: Связь между таблицами делает запрос необновляемым.  [new]
Varan
Member

Откуда:
Сообщений: 1258
Benzin ,
У тебя mdb или ADP?
24 авг 04, 19:13    [905180]     Ответить | Цитировать Сообщить модератору
 Re: Связь между таблицами делает запрос необновляемым.  [new]
Latuk
Member

Откуда: N 54°38', E 037°35'
Сообщений: 7310
>Это как это?
апдейтиш через execute поля какие хочеш по каким хочеш правилам
потом делаеш реквери
например подкладываеш под контрол связанный с необновляемыми данными
несвязанный контрол такого же размера
при получении фокуса необновляемым контролом
копируеш его содержимое в несвязанный и передаеш туды фокус
а на его обновление апдейтиш соотв образом соотв таблицу
потом реквериш необновляемый набор желательно чтобы он оставался
на том же месте на экране
в результате у юзера полная илюзия что он редактирует,
хотя на самом деле набор не редактируемый.
24 авг 04, 19:17    [905185]     Ответить | Цитировать Сообщить модератору
 Re: Связь между таблицами делает запрос необновляемым.  [new]
Latuk
Member

Откуда: N 54°38', E 037°35'
Сообщений: 7310
>У тебя mdb или ADP?
поди свалил чувак с работы уже
для дальнейшего глумления придется подождать минимум до завтра
24 авг 04, 19:20    [905191]     Ответить | Цитировать Сообщить модератору
 Re: Связь между таблицами делает запрос необновляемым.  [new]
Varan
Member

Откуда:
Сообщений: 1258
Latuk ,
Хорошо, что я adp не занимаюсь, а то тоже, поди, пришлось бы так извращаться.
24 авг 04, 19:22    [905194]     Ответить | Цитировать Сообщить модератору
 Re: Связь между таблицами делает запрос необновляемым.  [new]
Gyslik.
Member

Откуда: Москва
Сообщений: 748
Varan
Gyslik
Left, right, inner join
Делают запрос необновляемым..

Разве? Тогда 99% запросов - необновляемые.
Агрегатные функции делают запрос необновляемым, насколько мне известно.

Это можно обойти, например, сделав запрос на добавление.

Это как это?

1. Я имел ввиду для данного примера.
2. INSERT INTO.
24 авг 04, 19:24    [905199]     Ответить | Цитировать Сообщить модератору
 Re: Связь между таблицами делает запрос необновляемым.  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Ишо раз...
Владимир Саныч
Фирмы.КодФирмы - первичный ключ?
24 авг 04, 19:57    [905237]     Ответить | Цитировать Сообщить модератору
 Re: Связь между таблицами делает запрос необновляемым.  [new]
Benzin
Member

Откуда:
Сообщений: 523
Прошу прощения, но вчера я, действительно, "свалил с работы".
-----------------------------------------------------------------
Вообщем так: поле Товары.Производитель - ключевое, если ключ убрать, то запрос становится обновляемым. В чем причина - не пойму, но пока остановился на этом варианте.
25 авг 04, 10:49    [905969]     Ответить | Цитировать Сообщить модератору
 Re: Связь между таблицами делает запрос необновляемым.  [new]
Benzin
Member

Откуда:
Сообщений: 523
Забыл: поле Фирмы.КодФирмы - ключевое, если и этот ключ убрать - запрос опять необновляется.
25 авг 04, 10:53    [905980]     Ответить | Цитировать Сообщить модератору
 Re: Связь между таблицами делает запрос необновляемым.  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Benzin
Забыл: поле Фирмы.КодФирмы - ключевое, если и этот ключ убрать - запрос опять необновляется.

О! Ну так вот и ответ. Сочетание ключей обязано быть именно таким. Иначе Аксесс не знает, какие записи обновлять.
25 авг 04, 11:06    [906041]     Ответить | Цитировать Сообщить модератору
 Re: Связь между таблицами делает запрос необновляемым.  [new]
Benzin
Member

Откуда:
Сообщений: 523
Непонятки не кончились: на базе описанного запроса делаю запрос на обновление:
UPDATE (Товары LEFT JOIN Партия ON
Товары.Модель = Партия.Модель) INNER JOIN Фирмы ON Товары.Производитель = Фирмы.КодФирмы SET
Товары.Производится = False
WHERE (((Товары.Производится)=True) AND ((Партия.Модель) Is Null))
WITH OWNERACCESS OPTION;
, он должен: сбросить флажок Производится у записей табл.Товары, которые не имеют связанной записи в табл.Партия.
Открываю запрос в режиме таблицы - записи доступны для редактирования, т.е прямо в запросе можно сбросить флажки.
Запускаю запрос, получаю сообщение: "Записи не могут быть изменены, отсутствует разрешение на обновление данных для объекта Товары".
Вот тут и не понятно - почему прямо в запросе можно обновлять? Почему прямо в таблице можно обновлять? Наконец, почему спокойно работает запрос в этой же базе, который тоже обновляет записи табл.Товары?
Все мыслимые разрешения я для себя установил.
25 авг 04, 12:01    [906287]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить