Признаки При использовании объектов данных ActiveX (ADO) со страницами Active Server (ASP) могут возникнуть следующие распространенные ошибки:
Поставщик Microsoft OLE DB для драйверов ODBC, ошибка «80004005»
[Microsoft][Драйвер ODBC Microsoft Access 97] В операции должен использоваться обновляемый запрос.
Причина В этой статье описаны четыре основные причины этой ошибки и соответствующие способы ее решения. Хотя в этой статье обсуждаются базы данных Microsoft Access, представленная здесь информация применима и к другим типам баз данных.
Решение Обычно вы сталкиваетесь с этой ошибкой, когда ваш сценарий пытается выполнить обновление или какое-либо другое действие, которое изменяет информацию в базе данных. Эта ошибка возникает из-за того, что ADO не может выполнить запись в базу данных по одной из следующих причин:
1. Наиболее распространенной причиной является то, что гостевая учетная запись Интернета (IUSR_MACHINE, которая по умолчанию принадлежит группе «Все») не имеет доступа к файлу базы данных. (.mdb) Разрешение на запись. Чтобы решить эту проблему, используйте вкладку «Безопасность» в проводнике, чтобы настроить свойства этого файла так, чтобы учетная запись «Гость Интернета» имела правильные разрешения.
Примечание. При использовании базы данных Microsoft Access с ADO необходимо также предоставить гостевой учетной записи Интернета разрешения на запись в каталог, содержащий файл .mdb. Это связано с тем, что Jet создает файл .ldb, который обрабатывает блокировку базы данных. Поскольку Jet может создавать временные файлы в каталоге «Temp», вам также может потребоваться предоставить разрешения на чтение и запись для этой папки.
2. Вторая причина этой ошибки в том, что база данных не была открыта в правильном режиме с правами на запись. Если вы выполняете операцию открытия над объектом Connection, вам следует использовать свойство Mode, чтобы указать разрешения, которые у вас есть для подключения, следующим образом:
SQL = "ОБНОВИТЬ Набор продуктов UnitPrice = 2;"
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Mode = 3 '3 = adModeReadWrite
Подключитесь.Откройте «myDSN».
Conn.Execute(SQL)
Конн.Закрыть
Примечание. По умолчанию для параметра MODE установлено значение 0 (adModeUnknown), что обычно разрешает обновления.
3. Другая причина этой ошибки заключается в том, что в администраторе ODBC может быть выбран параметр «Только чтение» на странице «Параметры» DSN.
4. Последняя проблема и способ ее решения применимы ко всем источникам данных SQL. Инструкции SQL, нарушающие ссылочную целостность базы данных, могут привести к возникновению этой ошибки. Вот некоторые из наиболее распространенных неудачных запросов:
• Самый простой набор запросов — это те, которые невозможно изменить: перекрестные запросы, сквозные запросы SQL, запросы на объединение или запросы операций обновления (т. е. создания таблицы), у которых для свойства UniqueValue установлено значение «Да».
• Другая очень распространенная причина заключается в том, что объединение содержит индексы связанных таблиц ODBC, которые не являются уникальными. В этом случае SQL не может гарантировать, что записи в таблице уникальны и значения полей таблицы будут меняться вместе с запросом.
• Есть причина, по которой действительно существует надежная альтернатива. Если вы попытаетесь обновить поле соединения на стороне «одна» запроса «один ко многим», операция завершится неудачей, если вы не включите каскадные обновления. Потому что тогда вы сможете делегировать ссылочную целостность движку JET.