Palentino Blog

Ventajas de la aplicación Microsoft Access, uso local y desde Internet mediante ASP, NET y PHP

En este Post analizaré las virtudes de este producto, utilizado para gestionar bases de datos. Y es que les debía a los desarrolladores de Access este artículo, puesto que he trabajado bastante con esta aplicación y ha solventado muchos de los problemas que se me han podido presentar.

Sí, Aplicación, ya que no se puede considerar un SGBDR (Sistema Gestor de Bases de Datos Relacional) en inglés RDMBS, puro, puesto que no separa la información del motor gestor de los datos, entre otras cosas. También me gustaría  aclarar que, tampoco es comparable en cuanto a rendimiento respecto a otros gestores existentes y reconocidos como pueden ser Mysql, SQL Server, Postgre, Oracle, …  con los cuales no puede realmente competir.

Pero más allá de estos detalles (de gran importancia, ojo) posee otras ventajas, que en diferentes terrenos, la hacen una herramienta muy poderosa, sencilla y versátil, para desarrollos de aplicaciones para la PYME y adaptaciones en Internet.

Veamos cuáles son dichas ventajas y ejemplos de accesos desde aplicaciones ASP, ASP.NET y PHP

Tanto Access como Excel son herramientas poderosas que se usan en las grandes organizaciones, pero que además permiten crear aplicaciones a un precio ventajoso para una PYME.

La aplicación para crear bases de datos, frecuentemente denostada ya sea por ignorancia, por ser un producto Microsoft, o por comparativa,  proporciona un entorno excelente de desarrollo y una gran cantidad de documentación. La opinión generalizada de los usuarios con conocimientos es que Access es una base de datos «de juguete».  Y realmente no les falta razón, pero existen aspectos que son necesarios tener en cuenta …

Si nos preguntasen si es mejor un Rolls Royce que un Seat Panda, diríamos que sin ninguna duda, el Rolls Royce. Pero, ¿cuanta gente puede permitirse un Rolls? ¿necesitas un Rolls para ir a comprar el pan a la esquina? No, siempre. Pues de forma análoga pasa con Access.

Access es una base de datos «excelente» para una PYME  porque con 2Gb de tamaño y un máximo de 256 usuarios concurrentes cubre generalmente de las necesidades esenciales de una PYME y proyectos medianos. En caso de crecimiento, la posibilidad de migración a otro gestor de Microsoft como  SQL-Server es relativamente «sencilla».

¿Y que cosas se pueden hacer con Microsoft Access?

Bueno, pues por lo pronto y aunque suene a autobombo, se puede crear desde una aplicación sencilla para crear facturas, gestión de datos específicos de cualquier sector, hasta un ERP (un programa de gestión integral de facturación, almacenes, contabilidad, etc:) para una PYME, además con la posibilidad de usar un runtime de Access  que mediante el Packaging Wizard de Microsoft  Developer, el cliente no tenga la necesidad de disponer de Office para usar el programa.

Ese programa costó X, pero a un precio tolerable. De haberlo hecho en Visual Studio .NET atacando una base de datos Access, hubiese costado 5 veces más (y por supuesto fuera del alcance de una PYME), de ahí que desarrollar «Clientes» Access pueda ser una decisión estratégica para un Gerente de Consultoría.

Una gran ventaja es la posibilidad de crear informes visuales de forma sencilla, sin necesidad de poseer una aplicación adicional  y los conocimientos para ello como puede ser el caso de Crystal Reports.

El asistente para consultas QBE (Query by Example) simplifica el desarrollo en SQL. De forma visual y sin elevados conocimientos permite generar SQL automáticamente. Muy útil para consultas determinadas que no requieran alto conocimiento. No obstante se pueden realizar consultas con el lenguaje SQL  (definición y manipulación), Informes, datos cruzados, etc …

Los asistentes de formularios reducen el tiempo de desarrollo de los interfaces para atacar a los datos. No obstante se puede crear a medida y programar aplicaciones con un lenguaje basado en Visual Basic, llamado Visual Access para aplicaciones. Lenguaje muy potente. Se puede disponer de diversos controles, OCX, NET, DLL, etc . Existen multitud de ejemplos desarrollados para crear cualquier tipo de aplicación. Recomiendo el enlace de la web de Access del Búho. – enlace

Posee una forma de empaquetar el código para proteger los desarrollos y crear una extensión «ejecutable» en un archivo .Mde. A diferencia de la .Mdb convencional, ésta no permite ver los desarrollos de los módulos, ni el lenguaje programado que se ha empleado.

Como actualización de conocimientos, de manera predeterminada, Microsoft Access 2010 emplea el formato de archivo con extensión .accdb introducido en Access 2007. Access continúa proporcionando cierta compatibilidad para el formato de archivo usado en versiones anteriores. Se debe usar el nuevo formato de archivo siempre que sea posible pero en otras ocasiones deberá usar el formato de archivo de la versión anterior. También podrás  convertir una base de datos al nuevo formato de archivo.

Debes usar el nuevo formato de archivo siempre que sea posible porque admite nuevas características, como datos adjuntos y campos multivalor. Además, si deseas convertir la base de datos de escritorio en una base de datos web mediante Access Services, el archivo de base de datos de escritorio debe estar en formato .accdb.

Sin embargo, el nuevo formato de archivo no se puede abrir o vincular con versiones anteriores de Access, no admite la replicación de compatibilidad ni la seguridad a nivel de usuario. Si necesitas usar la base de datos con versiones anteriores de Access, o si necesita usar replicación o seguridad a nivel de usuario, repito,  debes usar un formato de archivo de una versión anterior.

Por otro lado los proyectos ADP de Access permiten usarlo como Frontend de SQL-Server. Un proyecto de Microsoft Access (.adp) es un archivo de datos de Access que proporciona un acceso eficaz en modo nativo a una base de datos de Microsoft SQL Server mediante la arquitectura de componentes OLE DB. Con un proyecto de Access se puede crear una aplicación cliente/servidor con la misma facilidad que una aplicación servidor de archivos. Esta aplicación cliente/servidor puede ser una solución tradicional basada en formularios e informes, una solución basada en Web que utilice páginas de acceso a datos o una combinación de ambas. Puede conectar el proyecto de Access a una base de datos de SQL Server remota, una base de datos de SQL Server local o una instalación local de SQL Server Desktop Engine.

Mediante la creación de DSN o accediendo a la ruta donde se encuentra la base de datos, podemos usar los archivos .MDB desde Internet, para consultar sus datos. Esto es una ventaja enorme, puesto que podemos trasladar la lógica (formularios, informes, consultas, tablas) dentro de un único archivo hacia internet y consultar solamente los datos que necesitemos usar desde lenguajes como ASP, ASP.net, PHP, etc …

Descargando el MDB tendríamos de nuevo la aplicación local y los datos. Que lo hacen idóneo para recogida de información y posterior análisis, en tiempo relativamente rápido. Lógicamente es necesario proteger la carpeta  donde se encuentre el MDB de accesos indebidos. La descarga es inmediata, puesto que es un sólo archivo. Es de vital importancia proteger el directorio de acceso público mediante URL. Generalmente existe una carpeta DATA o private donde se puede depositar los mdb.

Y como no, podemos acceder al MDB desde aplicaciones «EXE» como son Visual Basic, C#, Java, Delphi, Perl (ver ejemplo)

Con Microsoft Access, cualquier PYME puede tener software a medida a precio de un software estándar ya terminado.

¿Cuanto tiempo tardarán en llenar los 2Gb de la base de datos Access? Pues al ritmo actual y aunque creciese la empresa = unos 100 años ;-). La explicación se basa en la construcción relacional de la base de datos, que ahorra espacio en el disco duro. Es importante aclarar y recomendar no almacenar las imágenes dentro del gestor, y  adjuntar sus rutas de acceso. Los archivos gráficos en carpeta externa a la base.

¿Y si tuviesen mucha carga de datos en corto espacio de tiempo o más de 256 usuarios concurrentes?

Bueno, la base de datos Access se puede migrar a Microsoft SQL Server fácilmente usando un Asistente del propio Access. Ahora bien, las licencias de Microsoft SQL Server son caras si son muchos usuarios, por lo que si son pocos pero con mucha carga de datos, se puede usar Microsoft SQL Server o se puede poner una base de datos GNU como MySQL (libre).

Veamos algunos ejemplos de acceso a un MDB desde Internet.

Mediante ASP. Ejemplo de una función

function contador_total()
                set conexionsel=Server.CreateObject("ADODB.Connection") 
		set rs_consultasel = Server.CreateObject("ADODB.RecordSet")
		consulta = "SELECT count(*) as cuenta from modelo;" 
		conexionsel.Open DBA_gestor ' Esta conexion emplea DSN
                'Para conexiones sin DSN      
                conexionsel.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:\datos\mibase.mdb"
		rs_consultasel.Open consulta, conexionsel, 1, 2
		cadena=rs_consultasel("cuenta")
		rs_consultasel.close
	  	set rs_consultasel = Nothing
		conexionsel.Close
	   	set conexionsel = Nothing
           'Retorno de la funcion de ejemplo
	   contador_total=cadena 
End function

Conectar Mediante ASP.net, ADO.net

sub insertar_usuario()
            Dim base As base_datos = New base_datos() 'Establezco una conexion con la base de datos
            Dim sql As String
            Dim id AS Long

            sql = "SELECT * FROM usuarios WHERE login='" & login.text & "' AND password='" & password1.text & "'"
            Dim command  As OdbcCommand = New OdbcCommand(sql, base.objConexion)
            Dim reader As OdbcDataReader = command.ExecuteReader()
            if reader.Read then
                guardar_error.visible = true
                guardar_error.text = "ERROR: El login y password empleadas ya han sido utilizadas para otro usuario."
            else
                guardar_ok.visible = true
                'Insertar dato.
                id = base.obtener_id("usuarios", "id_usuario")
                base.insertar_datos("usuarios", "login, password, nombre, apellidos, administrador, id_usuario", "'" & login.text & "', '" & password1.text & "', '" & nombre.text & "', '" & apellidos.text & "', false, " & id)
            end if

            reader.Close()
            base.cerrar_conexion() 'Cierro la conexion con la base de datos.
        end sub

Enlace a diversas formas de conectar en ASP.net

Cómo conectar con PHP

ODBC es un estándar de conexión con bases de datos que utilizan los sistemas Windows. Con ODBC se puede acceder a cualquier base de datos, siempre que exista el correspondiente driver ODBC para esa base de datos. Las conexiones ODBC son propias de sistemas Microsoft, por lo que podremos utilizarlas desde cualquier lenguaje de programación en Windows, como PHP, para acceder a cualquier base de datos, incluida Access.

Lo primero que tendremos que hacer para conectar con PHP es crear un DSN  (ojo no confundir con DNS 😉 ) en nuestro ordenador.

Un DSN es un nombre de conexión que utilizaremos para referenciar a una base de datos. Podemos tener tantos DSN en nuestro sistema como necesitemos, para acceder desde aplicaciones o lenguajes de programación a bases de datos por ODBC.

Esto lo hacemos desde el panel de control de Windows en la opción «Herramientas administrativas – Origenes de datos ODBC».

Tenemos que crear un DNS de sistema o de usuario, en la solapa correspondiente y luego apretando agregar. Habrá que seleccionar el driver ODBC que tenemos que utilizar, como se trata de una base de datos de Access, debemos seleccionar el driver ODBC de Access. Luego habrá que darle un nombre al DSN y seleccionar el archivo .mdb que contiene nuestra base de datos. Una vez realizado esto, necesitaremos acordarnos del nombre del DSN que hemos creado, porque lo tendremos que utilizar en nuestro código de conexión.

Una vez tengamos el DSN utilizaremos un código de conexión como este: $conn_access = odbc_connect («base_access», «», «»);

Con la función odbc_connect() se conecta con una base de datos por ODBC, indicando el nombre del DSN en el primer parámetro y luego el usuario y la contraseña.

En Access normal es que no se tenga siquiera usuario y contraseña, por lo que esos dos parámetros los he pasado con una cadena vacía.

Nos devuelve el identificador de la conexión con la base de datos. Para ejecutar una sentencia SQL utilizaremos la función odbc_exec().

De este modo: $rs_access = odbc_exec ($conn_access, «select * from tabla»);

Como se puede ver, odbc_exec() recibe el identificador de la conexión obtenido anteriormente y la sentencia SQL a ejecutar. Devuelve un identificador del conjunto de registros resultado de ejecutar la sentencia.

Luego utilizaremos funciones como odbc_fetch_array() o odbc_fetch_object() para acceder a cada uno de los registros obtenidos en el conjunto de resultados.

if ($conn_access = odbc_connect ( "guiarte_access", "", "")){ 
   	echo "Conectado correctamente"; 
   	$ssql = "select * from libros"; 
   	if($rs_access = odbc_exec ($conn_access, $ssql)){ 
      	 echo "La sentencia se ejecutó correctamente"; 
      	 while ($fila = odbc_fetch_object($rs_access)){ 
         	 echo "
" . $fila->titulo; 
      	 } 
   	}else{ 
      	 echo "Error al ejecutar la sentencia SQL"; 
   	} 
} else{ 
   	echo "Error en la conexión con la base de datos"; 
}

Referente a las consultas mediante SQL, mientras no exista una elevado factor a la hora de realizar productos cartesianos en las consultas, el rendimiento es correcto.

En resumen, al margen de otras consideraciones, en mi opinión Microsoft Access es una herramienta bastante buena, hace lo que tiene que hacer de forma versátil, siempre y cuando seamos capaces de adaptarla a nuestras necesidades.

Otros enlaces.

Enlace a las especificaciones ténicas de Access 2010.

http://office.microsoft.com/en-us/access-help/access-2010-specifications-HA010341462.aspx

Enlace para la creación de un proyecto ADP.

http://office.microsoft.com/en-us/access-help/create-an-access-project-HA010341589.aspx

Enlace más información sobre DSN

Qué es una base de datos y cómo conectarse a partir de los ODBC.

Salir de la versión móvil