Síntomas Cuando utiliza ActiveX Data Objects (ADO) con Active Server Pages (ASP), puede encontrar los siguientes errores comunes:
Proveedor Microsoft OLE DB para controladores ODBC error '80004005'
[Microsoft][Controlador ODBC Microsoft Access 97] La operación debe utilizar una consulta actualizable
Causa Este artículo describe las cuatro causas principales de este error y las soluciones correspondientes. Aunque este artículo analiza las bases de datos de Microsoft Access, la información proporcionada aquí también se aplica a otros tipos de bases de datos.
Solución Normalmente encontrará este error cuando su secuencia de comandos intenta realizar una actualización o realizar alguna otra acción que cambie la información en la base de datos. Este error se produce porque ADO no puede escribir en la base de datos por uno de los siguientes motivos:
1. El motivo más común es que la cuenta de invitado de Internet (IUSR_MACHINE, que de forma predeterminada pertenece al grupo "Todos") no tiene acceso al archivo de la base de datos. (.mdb) Permiso de escritura. Para resolver este problema, utilice la pestaña Seguridad en el Explorador para ajustar las propiedades de este archivo para que la cuenta de Invitado de Internet tenga los permisos correctos.
Nota: Cuando utilice una base de datos de Microsoft Access con ADO, también debe otorgar permisos de escritura a la cuenta de Invitado de Internet en el directorio que contiene el archivo .mdb. Esto se debe a que Jet crea un archivo .ldb que maneja el bloqueo de la base de datos. Debido a que Jet puede crear archivos temporales en el directorio "Temp", es posible que también deba otorgar permisos de lectura/escritura a esa carpeta.
2. La segunda razón de este error es que la base de datos no se abrió en el modo correcto con permisos de escritura. Si realiza una operación Abrir en un objeto Conexión, debe usar la propiedad Modo para indicar los permisos que tiene en la conexión, de la siguiente manera:
SQL = "ACTUALIZAR Productos Establecer PrecioUnitario = 2;"
Establecer conexión = Server.CreateObject ("ADODB.Connection")
Modo de conexión = 3 '3 = adModeReadWrite
Conexión.Abre "myDSN"
Conexión.Ejecutar(SQL)
Conexión.Cerrar
Nota: De forma predeterminada, MODE está configurado en 0 (adModeUnknown), lo que normalmente permite actualizaciones.
3. Otra razón para este error es que en el Administrador ODBC, se puede seleccionar la configuración "Solo lectura" en la página "Opciones" del DSN.
4. El último problema y la solución se aplican a todas las fuentes de datos SQL. Las declaraciones SQL que violan la integridad referencial de la base de datos pueden provocar este error. Estas son algunas de las consultas fallidas más comunes:
• El conjunto de consultas más simple es aquel que no se puede cambiar: consultas de tabla cruzada, consultas de paso a través de SQL, consultas de unión o consultas de operación de actualización (es decir, creación de tabla) que tienen la propiedad UniqueValue establecida en Sí.
• Otra razón muy común es que la unión contiene índices en tablas ODBC vinculadas que no son únicas. En este caso, SQL no puede garantizar que los registros de la tabla sean únicos y los valores de los campos de la tabla cambiarán con la consulta.
• Hay una razón por la que efectivamente existe una alternativa confiable. Si intenta actualizar un campo de unión en el lado "uno" de una consulta "uno a muchos", la operación fallará a menos que habilite las actualizaciones en cascada. Porque entonces puedes delegar la integridad referencial al motor JET.