You are on page 1of 7

http://www.gravitynet.es/support/index.php?

_m=knowledgebase&_a=viewarticle&kbarticleid=568

Errores comunes y Limitaciones en bases de datos Access


Autor:

Gravitynet
Creado en: 27 Mar 2007 06:34 PM

Para el caso que nos ocupa, el espacio de bases de datos de Microsoft se denomina Microsft Jet Database Engine, que comprende el acceso con ODBC y Jet OLE DB.

Las bases de datos de Microsoft Access son bases de datos de escritorio; su diseo no est pensado para entornos multiusuario. Su rendimiento en esas condiciones es impredecible e inestable. Microsoft recomienda el uso de Access slo en entornos de desarrollo y nunca de produccin

Asi mismo, recomienda evitar el uso de bases de datos Access en servidores web: KB299973 (You should avoid using Access databases on Web servers if it is possible)

En el artculo KB299974 se especifica lo siguiente: IIS ha sido ampliamente probado en entornos de alto rendimiento y accesos simultaneos contra SQL Server. Si bien ASP funciona con bases de datos compatibles con ODBC y OLE DB se recomienda el uso de bases de datos de SQL Server. Nota: En el caso que nos ocupa, esto es aplicable espeficamente para las bases de datos Access, pues el acceso a bases de datos de MySQL desde ASP no presenta las limitaciones que se debaten en este texto.

En ese mismo artculo se menciona:

En un entorno de IIS es recomendable usar el driver nativo de Jet OLE DB en lugar de Microsoft Access ODBC driver. El driver Microsft Access ODBC puede presentar problemas de estabilidad
Page 1/7 Powered By Kayako SupportSuite

http://www.gravitynet.es/support/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=568

debiado a la version que se invoque de Visual Basic para Aplicaciones (VBA). De lo que se deriva que cuando varios usuarios concurrentes trabajan con la misma base de datos los resultados pueden ser impredecibles. Del artculo:

KB225048 Microsoft Jet (esto incluye ODBC y Jet OLE DB por igual) pueden manejar un nmero limitado de sesiones, por lo que si su aplicacin precisa de alto nmero de objetos de datos de ADO, Jet puede quedarse sin recursos. Del artculo:

KB240317 Microsoft Jet (esto incluye ODBC y Jet OLE DB por igual) dispone de una cach de lectura que es actualizada cada 5s (por defecto) y dispone de un sistema de escritura a disco que opera en un proceso independiente, por lo que escribe en disco de forma asncrona. En entornos en los que existen varios usuarios al mismo tiempo puede ocasionar problemas. Del artculo:

http://msdn.microsoft.com/library/en-us/dnmsde/html/msdeforvs.asp Jet puede soportar hasta 255 usuarios concurrentes, pero el rendimiento de la arquitectura basada en ficheros puede reducir notablemente este nmero. En general, se recomienda el uso de Jet para 10 o menos usuarios. Teniendo en cuenta estas limitaciones, existen distintas configuraciones para Microsoft Access que varian en su rendimiento. El primer punto a tener en cuenta es el modo de conexin. De entre los tres modos habituales dos destacan por su mayor frecuencia de uso:

ODBC OLE DB

De entre estos dos, el ODBC es el de uso ms comn, sin embargo, ofrece peores prestaciones frente a OLE DB, siendo ste ms robusto.

Page 2/7 Powered By Kayako SupportSuite

http://www.gravitynet.es/support/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=568

Los strings de conexin disponibles para el uso de OLE DB: Seguridad standard:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:mydatabase.mdb;User Id=admin;Password=;

Acceso con password a la base de datos (protegida con la funcion Set Password de access): Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:mydatabase.mdb;Jet OLEDB:Database Password=MyDbPassword;

WorkGroup (system database) Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:mydatabase.mdb;Jet OLEDB:System Database =system.mdw;

Workgroup especificando usuario y contrasea: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:mydatabase.mdb;Jet OLEDB:System Database =system.mdw;User ID=myUsername;Password=myPassword;

Adicionalmente, las bases de datos Access tienden a corromperse y hacer un mal uso del espacio, por lo que deben ser reparadas y compactadas con frecuencia o su rendimiento decrece sensiblemente. Corrupcion de las bases de datos access: http://www.granite.ab.ca/access/corruptmdbs.htm

Notas adicionales sobre seguridad:

Access ofrece muy poca seguridad sobre sus datos. Si bien se puede proteger el acceso a la base de datos con una contrasea, sta es posible obtenerla a partir de la base de datos con programas gratuitos disponibles en internet y cinco minutos de tiempo. Las bases de datos Access en entornos de hosting compartidos se almacenan generalmente en servidores web, accesibles a todo el mundo desde internet. Si bien se puede minimizar el riesgo eligiendo una ubicacin adecuada (como
Page 3/7 Powered By Kayako SupportSuite

http://www.gravitynet.es/support/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=568

directorios especficos para CGIs etc) se sigue pudiendo descargar la base de datos completa si se conoce el nombre de la misma. Una prueba sencilla de este problema se puede consultar en google:

http://www.google.es/search?hl=es&as_qdr=all&q=+filetype%3Amdb&meta= Si no se conoce el nombre de la misma se puede intentar obtenerlo mediante SQL Injection* u otros medios (si el cdigo ASP responsable del acceso a la Base de datos Access no est diseado para prevenir la inyeccin de cdigo)

Este problema no existe en MySQL o SQL Server donde los datos se almacenan en un servidor de bases de datos no disponible para todo el mundo. Asi mismo, no existe como tal un sistema de Backup para Access, pues se basa en copiar el fichero, mientras que en MySQL y SQL Server disponen de sistemas de Backup y Logs Transaccionales (disponible en MYSQL para tablas InnoDB) que permiten la recuperacin de datos en caso de desastre.

Errores: Too many clients http://support.microsoft.com/default.aspx/kb/154869

80040e07 Data type mismatch in criteria expression http://www.aspfaq.com/show.asp?id=2289 http://support.microsoft.com/default.aspx/kb/136059 http://support.microsoft.com/default.aspx/kb/175258 http://support.microsoft.com/default.aspx/kb/184948 http://support.microsoft.com/default.aspx/kb/208425 http://support.microsoft.com/default.aspx/kb/210244
Page 4/7 Powered By Kayako SupportSuite

http://www.gravitynet.es/support/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=568

http://support.microsoft.com/default.aspx/kb/246570

80040e10 - Too few parameters. Expected <x>. http://www.aspfaq.com/show.asp?id=2128 http://support.microsoft.com/default.aspx/kb/162980 http://support.microsoft.com/default.aspx/kb/171850 http://support.microsoft.com/default.aspx/kb/172898 http://support.microsoft.com/default.aspx/kb/178070 http://support.microsoft.com/default.aspx/kb/181209 http://support.microsoft.com/default.aspx/kb/181832 http://support.microsoft.com/default.aspx/kb/184233 http://support.microsoft.com/default.aspx/kb/191619 http://support.microsoft.com/default.aspx/kb/205972 http://support.microsoft.com/default.aspx/kb/207586 http://support.microsoft.com/default.aspx/kb/216425 http://support.microsoft.com/default.aspx/kb/237994

80040e14 / 80040e37 - The Microsoft Jet Database engine cannot find the table or query 'tablename'. Make sure it exists and that its name is spelled correctly. http://www.aspfaq.com/show.asp?id=2164 http://support.microsoft.com/default.aspx/kb/184572

80040e14 - Syntax error in <statement or clause> http://www.aspfaq.com/show.asp?id=2086 http://support.microsoft.com/default.aspx/kb/181489


Page 5/7 Powered By Kayako SupportSuite

http://www.gravitynet.es/support/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=568

80040e4d - Too many client tasks. http://support.microsoft.com/default.aspx/kb/154869

80004005 http://www.aspfaq.com/show.asp?id=2009

Opinion macromedia: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=tn_17034

Reparar BBDD: 2003 http://support.microsoft.com/kb/824271/en-us 2002 http://support.microsoft.com/kb/304701/ 2000 http://support.microsoft.com/kb/306204/ 97 http://support.microsoft.com/kb/306829/

Page 6/7 Powered By Kayako SupportSuite

http://www.gravitynet.es/support/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=568

Links de interes:

*Prevenir la inyeccin de cdigo (SQL Injection) http://msdn.microsoft.com/msdnmag/issues/04/09/SQLInjection/

Lista de conexiones a bases de datos: http://www.connectionstrings.com/

Como abrir una conexin segura de Access en ADO mediante OLE DB http://support.microsoft.com/kb/191754/

ADO con Visual Basic http://support.microsoft.com/kb/172403/

Informacin adicional sobre el rendimiento de Access y el uso de Jet OLE DB se puede obtener de: The Microsoft Jet Database Engine Programmer's guide (2nd Edition) http://www.amazon.com/Microsoft-Database-Programmers-Professional-Editions/dp/1572313420

Versiones de OLE DB Provider para Jet, DAO vs ADO: http://support.microsoft.com/default.aspx/kb/225048 OLE DB Provider para Jet 3.51 usa la misma versin de Jet que Access 97 y Visual Basic 5.0 y 6.0 pero tiene una funcionalidad limitada. Ole DB para Jet 4.0 es ms funcional pero es incompatible con Access 97

Page 7/7 Powered By Kayako SupportSuite

You might also like