powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Почему не работает такой запрос
5 сообщений из 5, страница 1 из 1
Почему не работает такой запрос
    #39364174
Фотография гурД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!
Почему не работает такой запрос?
Код: sql
1.
2.
3.
4.
DELETE * FROM
  (SELECT * FROM sysAdType t 
   RIGHT JOIN sysAd a ON t.IdAdType = a.AdType) d
   WHERE t.AdType='Routine'

;
Из кода пишет ошибку:-2147467259 (80004005)
Невозможно удаление записей из указанных таблиц

Если запрос сохранить:Невозможно удаление записей из указанных таблиц. (Ошибка 3086)
Не удается завершить удаление данных из одной или нескольких таблиц.

Возможные причины:

Отсутствуют разрешения на изменение таблицы. Для изменения разрешений обратитесь к системному администратору или создателю таблицы.
База данных была открыта только для чтения. База данных может оказаться доступной только для чтения по одной из следующих причин:
- Для открытия базы данных с доступом только для чтения был использован метод OpenDatabase.
- Файл базы данных определен с доступом только для чтения в операционной системе сервера базы данных или в сети.
- Пользователь не имеет привилегий записи в этот файл базы данных в сетевой среде.
- В программе Microsoft® Visual Basic использован элемент управления Data, и для свойства ReadOnly задано значение True.
Для удаления данных закройте базу данных, устраните ограничение доступа и вновь откройте файл с доступом для чтения и записи.

С правами на файл (и директорию) всё нормально...
Спасибо!
...
Рейтинг: 0 / 0
Почему не работает такой запрос
    #39364194
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно пишет... результатом SELECT станет набор записей. В памяти. Вот что толку оттуда удалять? на исходные таблицы это же не повлияет...
Опять же
Код: sql
1.
2.
3.
4.
DELETE * FROM
  (SELECT * FROM sysAdType t 
   RIGHT JOIN sysAd a ON t.IdAdType = a.AdType) d
   WHERE t.AdType='Routine'


надеюсь, не надо объяснять? хотя даже поставь правильно, ничего не изменится.

И попробуй простое

Код: vbnet
1.
2.
3.
4.
DELETE t1.*, t2.*
FROM sysAdType t1, sysAd t2 
WHERE t1.IdAdType = t2.AdType 
  AND t1.AdType='Routine'
...
Рейтинг: 0 / 0
Почему не работает такой запрос
    #39364195
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ещё лучше - установи между таблицами связь и каскадное удаление. Тогда достаточно удалить записи из основной таблицы, из связанной удалятся сами.
...
Рейтинг: 0 / 0
Почему не работает такой запрос
    #39364221
Фотография гурД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю, поймёшь ты теперь или нет...
Раньше всегда делал так (в избежание смены Id'ишников при сжатии;
таблицы sysAd и sysAdType связаны как М:1):
Код: sql
1.
2.
DELETE * FROM sysAd
WHERE AdType=dlookup("IdAdType","sysAdType","AdType='Routine'")
...
Рейтинг: 0 / 0
Почему не работает такой запрос
    #39364235
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гурДРаньше всегда делал такТакой запрос вычисляет dlookup ДО выполнения запроса на удаление, что для внешнего запроса эквивалентно подстановке в него литерала. А новый текст - ВО ВРЕМЯ. В том и разница.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Почему не работает такой запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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