Desde OpenOffice.org, aunque no dispongamos de una interfaz de usuario tan cómoda como la de Access, también podemos acceder a datos, crear formularios, obtener informes, etc.
En esta sección trataremos todos estos temas
Alexandro Colorado, del Grupo de Usuarios de Linux de Tabasco (México) nos facilita el video tutorial que ha realizado demostrando como insertar en un documento de OpenOffice.org Writer, varios registros de una base de datos MySQL.
¡Disfrutadlo!
Disponible en:
http://superalumnos.net/files/mysql2000.swf (Flash - 3,6 MB)
Los compañeros de Nodo50 comparten con nosotros este mini-tutorial que nos muestra como conectar con MySQL desde OpenOffice. Este material forma parte de los cursos de informática que imparte imparte en Madrid a precios muy populares esta organización de contrainformación en red.
Curso de Introducción OpenOffice impartido por Nodo50
1.- Instalamos MySQL
apt-get install mysql-server
2.- Activamos la conexión por red al servidor MySQL
Para ello editamos el fichero de configuración de MySQL (/etc/mysql/my.cnf) y comentamos la linea "skip networking"
#skip networking
3.- reiniciamos el servidor MySQL
/etc/init.d/mysql stop
/etc/init.d/mysql start
4.- Asignamos passwdord al usuario root de MySQL
mysqladmin -u root password contraseña
5.- Iniciamos una sesión en el servidor, creamos la base de datos TRABAJO y la tabla CONTACTO (ver apuntes de ayer)
6.- Instalamos los paquetes libmyodbc y unixodbc-dev (reparar en sus dependencias)
7.- Editamos el fichero /etc/odbc.ini (estará en blanco) y le introducimos estas líneas:
[trabajo]
Trace = Off
TraceFile= stderr
Driver = /usr/lib/odbc/libmyodbc.so
DSN = trabajo
SERVER = localhost
USER = root
PASSWORD = contraseña
PORT = 3306
#OPTIONS = 1
#DATABASE= trabajo
#SOCKET = /tmp/mysql.soc
si bien en este ejercicio conectamos como root, lo correcto seria hacerlo como un usuario determinado de MySQL que tiene determinados privilegios sobre la base de datos TRABAJO. También es conveniente reparar en que la conexión se hace por el puerto por defecto por el que responde MySQL. Eso significa que aunque conectemos sobre la localhost, la conexión es una conexión de red, de ahí que hayamos tenido que habilitar las conexionesde red en el my.cnf
(Al instalar el paquete libmyodbc, encontraremos en /usr/share/doc/libmyodbc/exmples un ejemplo del fichero odbc.ini que podemos utilizar retocándolo con los datos de nuestro servidor MySQL y nuestra base de datos)
6.- Abrimos un documento de Write (OO) y vamos al menú Herramientas/Fuente de Datos. Creamos una nueva Fuente de Datos llamada Trabajo. Ponemos como tipo de Fuente de Datos la opción MySQL
7.- Vamos a la Pestaña MySQL, editamos la URL de Fuente de Datos y comprobamos que nos aparece el perfil que hemos creado en /etc/odbc.ini que se llamaba [trabajo] . En /etc/odbc.ini podríamos definir varios perfiles para accesos a múltiples bases de datos
8.- En la Pestaña Tablas comprobamos que hemos accedido a la base de datos TRABAJO y que se visualiza la tabla CONTACTO
9.- Con el editor de SQL o el Asistente Gráfico diseñamos una Consulta
10.- Ya podemos trabajar sobre la base de datos TRABAJO desde OO
Hay un tipo de consultas para las cuales no nos sirve el entorno gráfico de diseño de consultas que nos provee Base (el programa de bases de datos de OpenOffice.org o LibreOffice).
Se trata de las consultas de UNION que nos permiten agregar los resultados de dos tablas o consultas. Un ejemplo sería tener dos tablas diferentes con la misma estructura de datos conteniendo datos personales. Si deseamos una consulta que nos muestre la totalidad de registros de ambas tablas, precisamos de una UNION:
Tabla1 UNION Tabla2
En OpenOffice.org este tipo de consultas presentan unas dificultades especiales que hacen su manejo bastante intratable y hace tiempo que tenía pendiente el esclarecimiento de esta cuestión.
Un mensaje en el foro en español de OOo ha planteado un caso que me ha estimulado para ponerme manos a la obra.
La cuestión planteada por el compañero aventis:
Se me ha pedido hacer un Libro Mayor a partir de una tabla/registro de Ventas cuyos datos están organizados de la siguiente estructura de campos:
- Id_venta
- Concepto
- Precio
- Fecha_venta
- Fecha_cobro
- Nota_cobro
El resultado final debe quedar así:
Fecha------Concepto---------Debe-------Haber-------Saldo
Si quiero hacer el "Debe", hago una consulta con:
- Concepto
- Fecha_venta
- Precio
Si quiero hacer el "Haber", hago una consulta con:
- Fecha_cobro
- Nota_cobro
- Precio
La cuestión es.... ¿Cómo hago para juntar todos los movimientos en un informe guardando orden cronológico? Supongo que una consulta que debe duplicar los registros, uno para fecha_venta y otro para fecha_cobro (si existe) y que "baraje" todas las fechas de manera que estén ordenadas.
Está claro que lo que hace falta es una UNION entre la consulta Debe y la consulta Haber; nuestro objetivo será resolverlo con nuestra suite informática libre.
Como era de esperar, nuestros primeros intentos han provocado diferentes errores. Como es bastante difícil que seamos los primeros en tropezar con estos problemas he iniciado una búsqueda en internet para ver quien se ha peleado antes con ello. En español no encontré ninguna ayuda relevante, pero como era previsible, en los foros en inglés y picoteando de aquí y de allá encontré suficientes pistas para solucionarlo.
Lo que podría ser un planteamiento bastante fácil, se complica innecesariamente por las peculiaridades con que Base maneja estas consultas.
Por eso voy a estructurar la solución en dos partes: de una, las diferentes consideraciones que debemos tener presentes para trabajar con este tipo de consultas y, de otra, la guía paso a paso con sus capturas de pantalla.
Teniendo presentes estas consideraciones, pasemos a la solución del problema de ejemplo.
Puedes pulsar sobre las imágenes para verlas a tamaño real, asi como, del pie del artículo, descargarte el adjunto test-mayor.odb con que se ha realizado la práctica.
1) Disponemos de la tabla Ventas, según la estructura propuesta.
2) Creamos una vista de tabla VistaDebe, tal que así:
La instrucción SQL correspondiente:
SELECT "Fecha_Venta" AS "Fecha", "Concepto" AS "Concepto", "Precio" AS "Debe", 0 * 0 AS "Haber", "IdVenta" FROM "Ventas"
3) Creamos una vista de tabla VistaHaber, tal que así:
La instrucción SQL resultante:
SELECT "Fecha_Cobro" AS "Fecha", "Nota_Cobro" AS "Concepto", 0 * 0 AS "Debe", "Precio" AS "Haber", "IdVenta" FROM "Ventas" WHERE "Fecha_Cobro" IS NOT NULL
4) Creamos una consulta Mayor en modo SQL teniendo presente activar el botón SQL o mediante el menú Editar > Ejecutar directamente comando SQL. La instrucción a escribir es
SELECT * FROM "VistaDebe" UNION SELECT * FROM "VistaHaber" ORDER BY "Fecha"
¡Y ya lo tenemos!
He dejado el arrastre de saldos acumulados para otra ocasión, aunque creo que sería mejor hacerlo en el informe más que en la propia consulta, no sé si con el Oracle Report Builder es fácil establecer este tipo de campos calculados.
Espero que esta receta os sirva de ayuda para alguno de vuestros proyectos.
¡Hasta la próxima!
PS.- Abajo verás el enlace para descargar el archivo de ejemplo test-mayor.odb.
Adjunto | Tamaño |
---|---|
test-mayor.odb | 5.38 KB |
El objetivo es el siguiente: Tener una base de datos con una o varias tablas, a dichas tablas las alimentan diferentes personas de la intranet, entonces con OpenBase nos conectamos a mysql utilizando un conector en java. Con OpenBase se crean formularios para que la base de datos sea actualizada o consultada. Con mysql puedo tener diferentes usuarios con diferentes permisos.
Lo siguiente es hacer pruebas con diferentes tipos de usuarios y disfrutar de este servicio.
Esta semana, Héctor Hoshi preguntó en la lista de correo de OpenOffice.org sobre la posibilidad de pegar un rango de datos de Calc en una tabla de Base.
Mi errónea respuesta fue que no se podía hacer directamente, remitiéndome a una macro que Santiago Bossio había desarrollado para implementar esta funcionalidad.
Mi gran sorpresa ha sido leer ayer mismo el Linux Magazine nº 14, donde Dmitri Popov publica un artículo de título "Llegar a Base".
En este artículo, Dmitri nos explica lo fácil que resulta la importación de datos de nuestras hojas de cálculo a la novedosa aplicación Base de OpenOffice.org.
Lo cito textualmente, intercalando algunos comentarios:
¿Y si ya se tiene la información en una hoja de cálculo? En muchas ocasiones, simplemente se desea importar la información existente en la base de datos. Por ejemplo supongamos que se tiene un archivo de Calc que contiene una lista de contactos y se quiere importar a la tabla CONTACTS.
Ya que una fuente de datos con un formato adecuado puede simplificar enormemente el proceso de importación, merece la pena perder algo de tiempo en preparar esta tarea. Lo primero que se hace es modificar la estructura de la hoja de cálculo para que sea idéntica a la estructura de la tabla CONTACTS. Es preciso asegurarse que la primera fila contiene los mismos nombres de campos que los de la tabla de la base de datos. Idealmente, deberían esar también el mismo orden. Hay que asegurarse de que todos los bloques de datos están colocados en las columnas adecuadas.
Bueno, esto no es exactamente así. He comprobado que si hay el mismo número de campos, se puede asociar cada columna de Calc al campo de Base que corresponda (incluso si no están en el mismo orden). Sigo citando...
A continuación se seleccionan los datos de la hoja de cálculo y se copian al portapapeles ("Editar -> Copiar" o "Ctrl + C"). Se abre la base de datos, se pulsa en el botón "Tablas", y se selecciona la tabla CONTACTS. Se pulsa con el botón derecho sobre ella y se selecciona "Pegar". En el cuadro "Copiar tabla" se teclea exactamente el nombre de la tabla objetivo en el campo Nombre de la tabla y se selecciona la opción "Adjuntar datos".
Adicionalmente, si escribimos un nombre de tabla inexistente se creará una nueva tabla en nuestra base de datos.
En el cuadro de asignación de columnas se verifica que todos los campos de la ventana de tabla origen están seleccionados y alineados con los campos respectivos de la ventana de tabla destino. Para alinear los campos se usan las flechas azules. Por último se pulsa en "Crear" para importar los datos.
Bien, ya veis lo fácil que es. ¿Como no se nos ocurrió antes? :-)
En algunas de las experiencias de migración a OpenOffice.org en las que colaboramos, nos hemos encontrado con usuarios que manejan pequeñas bases de datos desarrolladas en Microsoft Access. En estos casos, para poder prescindir de Access, podemos usar el gestor de base de datos incorporado en OpenOffice.org, denominado Base. Podemos usar Base de dos maneras diferentes:
Mediante el presente tutorial veremos la manera de realizar ambas tareas.
Dado que esta explicación es algo larga, hemos optado por dividirla en tres partes. En la primera -ésta que estas leyendo-, veremos como crear una base de datos que nos permite acceder a las tablas y consultas de Access; en la segunda parte, trataremos de la migración de datos propiamente dicha; reservando la tercera parte del tutorial para ampliar un poco algunos detalles relativos a la personalización de los campos o columnas a migrar.
Hemos ilustrado el texto con diferentes capturas de pantalla, en cuyas miniaturas podéis pulsar para verlas a tamaño real; y al final encontraréis un vídeo demostrativo que muestra todo el proceso.
Tengamos presente que una base de datos de Base se comporta de forma parecida a Access en el sentido de que en un sólo archivo, con extensión .odb almacena tanto las tablas y consultas, como los formularios e informes relacionados; presenta el inconveniente de ser mono-usuaria (no admite conexiones concurrentes), pero tiene la ventaja de poder ser enviada por correo fácilmente.
Tan sólo recomendaríamos esta solución para pequeñas bases de datos de escritorio. Si necesitamos acceso concurrente o la base de datos va a ser algo grande, con decenas de miles de registros, será mucho mejor plantearse la migración a una base de datos "real" como puedan ser MySQL o PostgreSQL (u Oracle si estás en una mega-corporación) , que igualmente pueden ser accedidas vía formularios e informes desde Base.
También debemos efectuar unas advertencias:
Tras efectuar estas consideraciones, nos pondremos manos a la obra. El procedimiento a seguir para exportar tablas y consultas desde Access a Base consistirá en:
Así que, en primer lugar, creamos una base de datos vacía (Archivo > Nuevo > Base de datos) seleccionando en el asistente la opción "Crear nueva base de datos"
En el paso siguiente del asistente escogeremos "Sí, registrar la base de datos", lo que permitirá poder usar los datos de esta base para combinar correspondiencia con el procesador de textos Writer o crear un piloto de datos con la hoja de cálculo Calc.
Tampoco es imprescindible hacerlo ahora mismo; siempre podemos registrar la base de datos en otro momento mediante Herramientas > Opciones > OpenOffice.org Base > Base de datos > Nuevo
Tras el paso siguiente, en que indicaremos la ubicación y nombre de la base de datos que estamos creando (en el ejemplo neptuno-base.odb), nos aparecerá la interfaz de Base, con una base de datos vacía; observemos en la barra de estado la información que indica que nos encontramos con una base de datos incrustada, que hace uso del motor HSQL . Este tipo de base de datos se comporta de una manera similar a Access, conteniendo en un solo archivo las tablas, consultas, formularios e informes de la misma.
Luego creamos otra nueva base de datos que permitirá conectarnos con los datos del archivo (.mdb) de Access.
En este caso, escogeremos la opción "Conectar con una base de datos existente" en el primer paso del asistente, para seguidamente escoger el controlador de bases de datos para Access.
Esto, que resulta tan fácil en Windows, no nos resultará tan sencillo si estamos usando OpenOffice.org en algún sistema GNU/Linux, para el cual no está disponible el controlador de Access. En ese caso se podrá acceder vía ODBC, para lo cual será preciso instalar diferentes utillerías, siendo tema para tratar en otro tutorial.
En el siguiente paso del asistente se nos pedirá seleccionar el archivo (.mdb) que contiene los datos que deseamos importar. En nuestro ejemplo, estamos usando "Neptuno", la conocida base de datos de ejemplo que incorporan todas las versiones de Access.
Como no deseamos acceder desde Writer ni Calc a estos datos (ya accederemos a ellos cuando estén importados en la base de datos que creamos al principio), en el siguiente paso del asistente, le indicaremos que no vamos a registrar la base de datos.
Después de asignar ubicación y nombre para esta base de datos (en el ejemplo neptuno-access.odb), nos encontramos con que la sección de Tablas, nos muestra todas las tablas y consultas que hay en el archivo Neptuno.mdb. Si accedemos a estos datos y los modificamos, se están modificando los datos en el archivo Neptuno.mdb original.
Observemos como lo que eran consultas en Access, se han importado como vistas de tabla en Base. Una vista, en este contexto, es muy parecida a una consulta, con la diferencia de que una vez creada, no podemos acceder a su diseño, pero su funcionalidad es muy parecida. Si los registros de las tablas se modifican, también las vistas relacionadas con esas tablas mostrarán resultados diferentes.
De hecho, si creamos una vista, podremos comprobar que en Access se ha creado una consulta que se puede ejecutar correctamente, pero no intentemos editarla, pues Access se alocará totalmente, incluso provocando un crash si intentamos acceder a la vista SQL.
¿Qué ocurre si en esta base de datos creamos una consulta? Pues que la consulta se creará y funcionará perfectamente, pero tan sólo en el .odb, no afectando para nada al archivo .mdb.
En la próxima entrega mostraremos como migrar los datos de una a otra, que como podéis intuir es tan sencillo como arrastrar las tablas de la base neptuno-access.odb hasta neptuno-base.odb. No obstante, hay que tener en cuenta una serie de matices en relación a los formatos de los campos, que posiblemente nos obliguen a personalizarlos de alguna manera. De eso trataremos en nuestra próxima entrega.
Ahora, podéis ver un vídeo demostrativo de los pasos dados hasta aquí.
Hacía días que no consultaba las listas de correo de OpenOffice.org, y siguiendo el hilo y los enlaces de algunas discusiones sobre Base, llegué a este excelente tutorial de la Base de Datos de OOo:
http://tutorialopenofficebase.wordpress.com/
Es de perfil básico, pero será imprescindible para principiantes y cursos de iniciación.
Actualización 16/03:
Dado su evidente interés, y vistas las peticiones de abundantes visitantes de la web original, hemos recopilado el material en formato ODF y PDF, que puedes descargar de los siguientes enlaces:
http://superalumnos.net/docs/tutorialOOoBase.odt (14,0 MB)
http://superalumnos.net/docs/tutorialOOoBase.pdf (5,8 MB)
De esta manera podréis disponer de una interesante guía de estudio y para impartir cursos.
Disfrutadlo!
Poniéndome al día en los foros de OpenOffice.org en español, me encuentro con un excelente tutorial de Eduardo Ponce, Usando SQL en Base de OOo, que nos muestra como crear y manejar una base de datos de OpenOffice mediante purito SQL, sin usar la interfaz gráfica para nada más que abrir el cuadro de diálogo que nos permitirá introducir las instrucciones SQL.
Para quienes nos iniciamos en SQL es una gran herramienta de aprendizaje de este lenguaje estructurado de consultas.
La pueden descargar en el adjunto del pie, además de el enlace que provee el autor.
¡Disfrútenla!
Adjunto | Tamaño |
---|---|
USANDO SQL EN BASE DE OOo.pdf | 3.24 MB |