Подтвердить что ты не робот

Ошибка "Операция должна использовать обновляемый запрос" в MS Access

Я получаю сообщение об ошибке: "Операция должна использовать обновляемый запрос" при попытке запустить мой SQL. Насколько я понимаю, это происходит, когда соединения используются в запросах обновления/удаления в MS Access. Тем не менее, я немного запутался, потому что у меня есть другой запрос, почти идентичный в моей базе данных, который отлично работает.

Это мой сложный запрос:

UPDATE [GS] INNER JOIN [Views] ON 
    ([Views].Hostname = [GS].Hostname) 
    AND ([GS].APPID = [Views].APPID) 
    SET 
        [GS].APPID = [Views].APPID, 
        [GS].[Name] = [Views].[Name], 
        [GS].Hostname = [Views].Hostname, 
        [GS].[Date] = [Views].[Date], 
        [GS].[Unit] = [Views].[Unit], 
        [GS].[Owner] = [Views].[Owner];

Как я уже говорил, я смущен, потому что у меня есть другой запрос, похожий на этот, который работает отлично. Это тот запрос:

UPDATE [Views] INNER JOIN [GS] ON 
[Views].APPID = [GS].APPID 
SET 
    [GS].APPID = [Views].APPID, 
    [GS].[Name] = [Views].[Name], 
    [GS].[Criticial?] = [Views].[Criticial?], 
    [GS].[Unit] = [Views].[Unit], 
    [GS].[Owner] = [Views].[Owner];

Что случилось с моим первым запросом? Почему второй запрос работает, когда первый не работает?

4b9b3361

Ответ 1

Является ли этот ответ общепринятым или нет, я не знаю, но я решил это, слегка изменив свой запрос.

Вместо того, чтобы присоединять выбранный запрос к таблице и обрабатывать ее, я изменил запрос выбора, чтобы создать временную таблицу. Затем я использовал эту временную таблицу для реальной таблицы, и все это отлично работало.

Ответ 2

В коде отсутствует ошибка, но ошибка возникает из-за следующего:

 - Please check whether you have given Read-write permission to MS-Access database file.
 - The Database file where it is stored (say in Folder1) is read-only..? 

Предположим, что вы сохранили базу данных (файл MS-Access) в папке только для чтения, а при запуске приложения соединение не открывается полностью. Следовательно, измените разрешение файла/его разрешение на папку, например, в C:\Program files, все большинство файлов c cd установлены только для чтения, поэтому изменение этого разрешения разрешает эту проблему.

Ответ 3

У меня была такая же ошибка при попытке обновить связанную таблицу.

Проблема заключалась в том, что связанная таблица не имела PRIMARY KEY.

После добавления ограничения первичного ключа на стороне базы данных и повторной привязки этой таблицы к проблеме доступа было решено.

Надеюсь, это поможет кому-то.

Ответ 4

У меня была такая же проблема в точности, и я не могу вспомнить, как я люблю это решение, но просто добавив DISTINCTROW решение проблемы.

В вашем коде это будет выглядеть так:

UPDATE DISTINCTROW [GS] INNER JOIN [Views] ON <- the only change is here
    ([Views].Hostname = [GS].Hostname) 
    AND ([GS].APPID = [Views].APPID) 
 ...

Я не уверен, почему это работает, но для меня он сделал именно то, что мне нужно.

Ответ 5

установить разрешение на каталог приложения решить эту проблему со мной

Чтобы установить это разрешение, щелкните правой кнопкой мыши папку App_Data (или любую другую папку, в которую вы положили файл), и выберите "Свойства". Найдите вкладку "Безопасность". Если вы не видите его, вам нужно перейти в "Мой компьютер", затем "Инструменты" и "Параметры папки".... затем перейдите на вкладку "Вид". Прокрутите страницу вниз и снимите флажок "Использовать простой общий доступ к файлам (рекомендуется)". Вернитесь на вкладку "Безопасность", вам нужно добавить соответствующую учетную запись в поле "Группы" или "Имена пользователей". Нажмите "Добавить".... затем "Дополнительно", затем "Найти сейчас". Соответствующая учетная запись должна быть указана. Дважды щелкните его, чтобы добавить его в поле "Группа" или "Имена пользователей", а затем установите флажок "Изменить" в разрешениях. Это. Вы закончили.

Ответ 6

Чтобы обновить записи, вам необходимо записать изменения в файл .mdb на диске. Если ваше сетевое/общее приложение не может записывать на диск, вы не можете обновлять существующие или добавлять новые записи. Таким образом, включите доступ для чтения/записи в папке базы данных или переместите базу данных в другую папку, в которой у вашего приложения есть разрешение на запись.... более подробно, пожалуйста, проверьте:

http://www.beansoftware.com/ASP.NET-FAQ/Operation-Must-Use-An-Updateable-Query.aspx

Ответ 7

Я использовал временную таблицу и, наконец, получил это, чтобы работать. Вот логика, которая используется после создания таблицы temp:

UPDATE your_table, temp
SET your_table.value = temp.value
WHERE your_table.id = temp.id

Ответ 8

Я обращался к базе данных с использованием UNC-пути, и иногда это исключение было брошено. Когда я заменил имя компьютера IP-адресом, проблема была внезапно решена.

Ответ 9

Это выстрел в темноте, но попробуйте поместить два операнда для символа AND в круглых скобках

Вкл. ((A = B) И (C = D))

Ответ 10

Я получил эту же ошибку, и использование первичного ключа не имело значения. Проблема заключалась в том, что таблица является связанной таблицей Excel. Я знаю, что есть настройки, чтобы изменить это, но мой ИТ-отдел заблокировал это, поэтому мы не можем изменить его. Вместо этого я создал таблицу make из связанной таблицы и использовал ее вместо этого в своем запросе на обновление, и это сработало. Обратите внимание, что любые запросы в вашем запросе, которые также связаны с той же самой связанной таблицей Excel, вызовут ту же ошибку, поэтому вам нужно будет также изменить их, чтобы они не были напрямую связаны со связанной таблицей Excel. НТН

Ответ 11

UPDATE [GS] INNER JOIN [Views] ON 
([Views].Hostname = [GS].Hostname) 
AND ([GS].APPID = [Views].APPID) <------------ This is the difference 
SET 
    [GS].APPID = [Views].APPID, 
    [GS].[Name] = [Views].[Name], 
    [GS].Hostname = [Views].Hostname, 
    [GS].[Date] = [Views].[Date], 
    [GS].[Unit] = [Views].[Unit], 
    [GS].[Owner] = [Views].[Owner];