powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / В операции должен использоваться обновляемый запрос
25 сообщений из 31, страница 1 из 2
В операции должен использоваться обновляемый запрос
    #32399356
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть запрос с подзапросами. Не работает и выдает ошибку "В операции должен использоваться обновляемый запрос". Если результаты хранимого запроса сохранить в таблицу и использовать ее в самом последнем запросе, все работает.
Но хотелось бы по-человечески.
В чем смысл данного сообщения об ошибке и как его избежать?
...
Рейтинг: 0 / 0
В операции должен использоваться обновляемый запрос
    #32399358
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Смысл в том, что данный запрос необновляемый, а требуется обновляемый. Чтобы этого избежать, надо использовать обновляемый запрос.
...
Рейтинг: 0 / 0
В операции должен использоваться обновляемый запрос
    #32399362
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч , а в чем разница? У меня сейчас нет доступа к нормальному HELP.
...
Рейтинг: 0 / 0
В операции должен использоваться обновляемый запрос
    #32399381
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Обновляемый = updatable. Такой, в котором можно менять данные. Необновляемый - такой, в котором нельзя.

Пример.

select * from A, B

Если в обеих таблицах по 2 записи, то всего будет показано 4. Но редактировать это нельзя - Аксесс не поймет, к какой именно записи относятся изменения. И добавлять данные он тоже не даст. Это даже на экране видно - он не покажет внизу строчку со звездочкой. Вот это и есть необновляемый запрос.
...
Рейтинг: 0 / 0
В операции должен использоваться обновляемый запрос
    #32399397
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понял я ничего.
Почему же с temp-таблицей прошло? Ведь там те же данные, что и в хранимом подзапросе?
...
Рейтинг: 0 / 0
В операции должен использоваться обновляемый запрос
    #32399425
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Varan
Какая разница, какие там данные?:)
Смысл в том, что в таблице можно данные редактировать, а в этом запросе нет.
Написали уже, для того, чтобы данные можно было редактировать - нужен обновляемый источник данных для формы, ваш запрос таковым не является.
...
Рейтинг: 0 / 0
В операции должен использоваться обновляемый запрос
    #32399432
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Таблица всегда обновляемая. Есть разница, физические ли данные перед нами (прямо из таблицы) или результат хитрого запроса.
...
Рейтинг: 0 / 0
В операции должен использоваться обновляемый запрос
    #32399438
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а необновляемым бывает:

запрос с group by / distinct

запрос по прилинкованной таблице (файлу) драйвер у которой не поддерж обновления

любые их комбинации

явно что-нибудь еще
...
Рейтинг: 0 / 0
В операции должен использоваться обновляемый запрос
    #32399445
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну как же, у тебя теперь есть таблица и выборка по ней стала обновляемая.

Если продолжать аналогию Саныча - , мы из A и B создаем общую временную таблицу и теперь простая выборка (по сути возвращающая те же записи) будет уже обновляемая.

У Гетца в главе про SQL всегда написана какие команды какие выборки возращают: обновляемые или необновляемые.
...
Рейтинг: 0 / 0
В операции должен использоваться обновляемый запрос
    #32399458
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо будет устранить пробел в знаниях в этом вопросе. А пока обойдусь темп таблицей.
Вообще мне хотелось бы обсудить этот запрос в упрощенном варианте, он достаточно интересный.
Если вы не против, попозже я здесь это сделаю
...
Рейтинг: 0 / 0
В операции должен использоваться обновляемый запрос
    #32399609
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так а что его обсуждать... тем более в упрощенном виде.
Просто есть запросы которые возвращают необновляемые наборы. Это не какое-то шаманство, есть ряд характерных признаков, который приведет к тому что запрос станет не обновляемым. Их надо просто знать применительно к Access.
Ну и просто логическим путем можно домыслить, что большинство таких не обновляемых наборов получается тогда , когда выводимые записи уже не соответствуют исходной таблице. Например ты применяешь группировку, естветственно полученная запись никак не может быть соотнесена ни с одной записью из таблицы. Просто задайся вопросом, если в показаном запросе я изменю значение одного из поля, как Access догадается в какой реальной записе надо поменять значение.
Бывают конечно исключения, когда вроде бы по идее есть прямое соответствие, а запрос - необновляемый. Просто на какую-то команду SQL команду Access всегда возвращает необновляемый набор, программисты мелкософта решили перестраховаться. Ну такие варианты надо просто знать.

На мой взгляд обсуждать требуется именно конкретные задачи. Когда надо из работающего необновляемого запроса кровь из носу получить обновлямый. Вот эта задачка...
...
Рейтинг: 0 / 0
В операции должен использоваться обновляемый запрос
    #32399619
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Кстати, в исходном вопросе я ожидал, что будет приведен селект. И будет спрошено, как привести его к обновляемому виду.
...
Рейтинг: 0 / 0
В операции должен использоваться обновляемый запрос
    #32399670
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я приведу Select, (вернее Update), только таблицы и поля переименую и еще раз подумаю над всем этим делом.
...
Рейтинг: 0 / 0
В операции должен использоваться обновляемый запрос
    #32399743
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я приведу Select, (вернее Update),

Ну родной, Update ты каким макаром должен сделать обновляемым????
...
Рейтинг: 0 / 0
В операции должен использоваться обновляемый запрос
    #32399763
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вернее как он получился необновляемым то...?!
...
Рейтинг: 0 / 0
В операции должен использоваться обновляемый запрос
    #32399784
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Update - обновляет записи в талблице - что ты хочешь обновить в самом запросе и как ты себе это представляешь?:)

Оновляемой может быть инструкция SELECT.
...
Рейтинг: 0 / 0
В операции должен использоваться обновляемый запрос
    #32399799
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 SergeySV
авторКогда надо из работающего необновляемого запроса кровь из носу получить обновлямый. Вот эта задачка...
Обычно не получается переписать запрос на обновляемый.
Решения: Создаём дополнительные формы для обработки информации по критериям и в запросе но на однозначных талицах либо на обновляемых запросах. Либо темповая таличка - самый распространнённый вариант (много тем про кростабы на форуме тому пример).
...
Рейтинг: 0 / 0
В операции должен использоваться обновляемый запрос
    #32399967
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hummer,
"Ну родной, Update ты каким макаром должен сделать обновляемым"
Я хочу, чтобы моя цепочка запросов, последний из которых - запрос на обновление, отработала без сообщений об ошибках.
Сейчас, если не использовать временной таблицы, запрос на обновление не работает, выскакивает сообщение "В операции должен использоваться обновляемый запрос"
...
Рейтинг: 0 / 0
В операции должен использоваться обновляемый запрос
    #32399977
vlad_707
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы писали :Я хочу, чтобы моя цепочка запросов, последний из которых - запрос на обновление, отработала без сообщений об ошибках

можно пошутить (хорошее настроени)
повесь последний запрос на кнопку и "отключи обработчик ошибок"
тогда всё будет работать как ты хочешь...
...
Рейтинг: 0 / 0
В операции должен использоваться обновляемый запрос
    #32400062
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad_707, :-)

Тестовый пример лежит тут

Тексты внешних запросов

Нерабочий:

UPDATE t2 INNER JOIN (qryOldPercent INNER JOIN t3 ON qryOldPercent.t4_fk = t3.t4_fk) ON (t2.t2_id = t3.t2_fk) AND (t2.t1_FK = qryOldPercent.t1_FK) SET t3.t3_Value = [t2]![t2_Value]*[qryOldPercent]![t3_Persent], t3.t3_Persent = [qryOldPercent]![t3_Persent]
WHERE (((t2.isActive)=True));

Рабочий:
UPDATE (temp INNER JOIN t2 ON temp.t1_FK = t2.t1_FK) INNER JOIN t3 ON (t2.t2_id = t3.t2_fk) AND (temp.t4_FK = t3.t4_fk) SET t3.t3_Value = [t2]![t2_Value]*[Temp]![t3_Percent], t3.t3_Persent = [Temp]![t3_Percent]
WHERE (((t2.isActive)=True));
...
Рейтинг: 0 / 0
В операции должен использоваться обновляемый запрос
    #32400105
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Получилось. Я убрал из апдейта запрос qryOldPercent, который был нужен только для извлечения новых значений, и обратился к нему через DLookUp.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
UPDATE t2 INNER JOIN t3 ON t2.t2_id = t3.t2_fk
SET
t3.t3_Value = [t2]![t2_Value]*
    DLookUp( "t3_Persent" , "qryOldPercent" , "t1_fk="  & CStr([t2].[t1_fk]) &  " and t4_fk="  & CStr([t3].[t4_fk])),
t3.t3_Persent =
    DLookUp( "t3_Persent" , "qryOldPercent" , "t1_fk="  & CStr([t2].[t1_fk]) &  " and t4_fk="  & CStr([t3].[t4_fk]))
WHERE t2.isActive;

Отдаю себе отчет, что DLookUp - это медленно. Но зато работает.

Кроме того, я несколько упростил запрос qryOldPercent. Я убрал из него одну лишнюю таблицу и одно лишнее поле.

Код: plaintext
1.
2.
SELECT t3.t3_Persent, t3.t4_fk, qryNotActive2.t1_FK
FROM qryNotActive2 INNER JOIN t3 ON qryNotActive2.[Max-t2_id] = t3.t2_fk;
...
Рейтинг: 0 / 0
В операции должен использоваться обновляемый запрос
    #32400525
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,
Большое спасибо.
Дойду до компа, посмотрю Ваш вариант повнимательнее.
И все-таки - почему оно не работало, что именно ему там не нравилось?
...
Рейтинг: 0 / 0
В операции должен использоваться обновляемый запрос
    #32401462
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Не работало потому, что там в Join'ы был включен запрос с группировкой. Естественно, что в таком запросе каждая запись соответствует группе записей из таблицы, а не одной конкретной записи. Вот Аксесс и не знает, в какой записи менять данные.

P.S. Валера, предлагаю все-таки на "ты". :^)))
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
В операции должен использоваться обновляемый запрос
    #38815155
PrimalEvil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такая же проблема - из-за группировки не работал запрос.
Решил проблему через временную таблицу
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
В операции должен использоваться обновляемый запрос
    #39939155
Стартер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно все-таки подробнее как решить эту проблему?
Сделал такой запрос
Код: vbnet
1.
 update test set test.[Категория] = Qmerge 

- с явной передачей запроса. Не вышло, как ожидалось.
Код: vbnet
1.
2.
 select * into tempTable from Qmerge
update test set test.[Категория] = tempTable.[Категория] 

- ошибка как раз насчет обновляемого запроса. Подскажите кодом как решить
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / В операции должен использоваться обновляемый запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]