Completar Tabla con Hoja de Cálculo

Completar las tablas con contenidos de una hoja de cálculo

Imaginemos que tenemos datos de poblaciones en una hoja de Cálculo y queremos introducirla en la Base de Datos Investigaciones.odb. Podemos realizarlo a mano, registro a registro, con la pérdida de tiempo que supone y la posibilidad de cometer fallos. O bien podemos familiarizarnos con OpenOffice Base y SQL e introducirlo mediante la suite Ofimatica.

Los Datos también podrían también haber sido obtenidos de listados HTML, Documentos de Texto, etc. Interviene en este caso la astucia para conseguir formatear en una Hoja de Cálculo dichos datos.

De hecho, los datos que figuran en Investigaciones.odb referentes exclusivamente a Países, fueron obtenidos de una Página Web.

A continuación explicaré como hacerlo utilizando como ejemplo una Hoja de Cálculo sobre Municipios del Estado de JALISCO (México)

Origen de los Datos

En Primer Lugar, debemos convertir los datos de la Hoja de Cálculo en una tabla de OpenOffice Base. A la tabla le daremos un nombre temporal puesto que una vez finalizadas todas las operaciones será borrada.

Vemos la hoja de Cálculo ORIGEN de los datos:

Si nos fijamos, se han colocado Filas a lo largo de toda la Hoja de Cálculo con la Leyenda de los datos ( Clave Entidad, Entidad, Clave Municipio, Municipio, Clave Localidad, Localidad). Hay que tener esto en cuenta porque las Sentencias SQL para completar las tablas deben excluir estas filas... ya lo veremos más adelante. Pero si es importante que exista este Literal en la primera fila de la Hoja de Cálculo, indicando el contenido de cada columna. Otra cosa ha tener en cuenta, es que la versión 1.3 de Invertigaciones.odb, sólo contempla País, Provincia y Población y en este caso necesitaríamos otro SubGrupo más. Queda pendiente, para la versión 1.4 de Investigaciones.odb, crear otro subgrupo para definir en el caso de España aldeas, pedanías o islas. Para otros Países sería aún más útil debido a su distribución territorial. No obstante en este Tutorial intento explicar como hacerlo, ya sea introduciendo Provincias, Poblaciones, Paises o lo que sea...

Copiar los datos de la Hoja de Cálculo

Tenemos que tener las dos aplicaciones abiertas, OpenOffice Calc con la Tabla de ORIGEN de datos y OpenOffice Base con Investigaciones.odb. En OpenOffice Calc, hacemos click en el pivote de filas y columnas, es decir en la esquina superior izquierda entre la columnas y las filas, O bien, en el menú escogemos Editar>Seleccionar Todo, o bien pulsamos Control+E. El resultado debe ser como la imagen que podéis ver a la derecha de este texto ----> Una vez seleccionados todos los datos los copiamos, con Control+C o bien en el menú seleccionamos Editar>Copiar. Pegar los datos como tabla de OpenOffice Base

Una vez con los datos copiados, nos vamos a OpenOffice Base y en el apartado de TABLAS pegamos los datos, bien con Control+V o bien escogiendo del menú Editar>Pegar

A continuación aparecerán tres diálogos para la importación de datos (puede hacer click para ver las imágenes ampliadas):

Paso 1: En este cuadro definimos un nombre para la Tabla, indicamos que introducimos Definición y Datos, que Usamos la Primera Linea como como nombre de columna (OJO esto es si la primera fila contiene la Leyenda de los datos que figuran debajo) y que cree una llave Primaria con el nombre "ID"

Paso 2: En este paso escogemos las columnas que contendrán los datos. Las demás columnas serán descartados. En este caso solo nos interesa Entidad, Municipio y Localidad.

Paso 3: En este paso introducimos la estructura de la Tabla, el tipo de datos que contendrá. Los importantes son las columnas que hemos incluido, que normalmente serán de tipo Texto, pero cuya longitud de caracteres debemos indicar.

Existe un Botón "Auto" para que OpenOffice mire en el número de filas determinado para asignar la longitud.

También podemos marcar un máximo que estamos seguros de que no llegará tal como 50 caracteres.

Con esta Sentencia OpenOffice Base BORRA de la tabla llamada "Tabla-Temporal" todos los registros en el que el campo "Entidad" es el literal 'Entidad'. OJO con las comillas dobles y las comillas simples. Es obvio que en tu caso personal los nombres serán distintos, dependiendo de donde has obtenido los datos y del nombre que has dado a la tabla temporal o incluso puede que no necesites realizar esta sentencia si es que tu Hoja de Calculo no contenía datos inservibles entre sus filas. Con la Tabla temporal preparada vamos a conocer un poco la estructura de las Bases de Datos de investigaciones.odb para poder incorporar los nuevos datos mediante sentencias SQL.Estructura de las tablas en Investigaciones.odb

Valga la siguiente imagen para darnos una idea de las tablas empleadas en Investigaciones.odb para almacenar la información sobre Paises, Provincias y Poblaciones (coloreadas en rojo):

Una vez seguidos los pasos del asistentes, y tras un breve instante de espera, ya tenemos la Tabla incorporado, en nuestro caso llamada Tabla-Temporal. Vemos, como ya comenté antes, que existen varias filas conteniendo el Literal Entidad, Municipio y Localidad. Estos datos deben ser eliminados para que cuando ampliemos los datos de las tablas correspondientes en Investigaciones.odb no introduzcamos basura. Para ello vamos a emplear la siguiente sentencia SQL (La sentencia SQL se introduce mediante el menú Herramientas>SQL...):DELETE FROM "Tabla-Temporal" WHERE "Entidad"='Entidad'

Las tablas que en este caso nos interesan son la de Paises, la de Provincias y la de Poblaciones, que tienen la siguiente estructura:

Tabla Paises:

Tabla Provincias:

Tabla Poblaciones:

Estos datos son muy importantes, los puedes obtener si buscas las tablas dentro de la base de datos, haces click derecho sobre la tabla en cuestión y seleccionas editar.

Vamos a utilizar los nombres de campo, y es muy importante escribirlos tal y como están definidos, respetando Mayúsculas y Minúsculas.

Ya de paso, comento que vemos la longitud del literal, por ejemplo el campo Provincia de la tabla Provincias es 30, por lo que si necesitamos más caracteres podemos ampliar el valor. Hacerlo no provocará ningún fallo al resto de la base de datos.

El campo Id es un número que identifica cada registro de cada tabla inequívocamente, ya que se va auto-incrementando cada vez que se introduce un registro nuevo.

El campo IdPrecedente es un número que corresponde con un registro en la tabla anterior. El IdPrecedente de la tabla Provincias corrresponde con el Id de la tabla Paises. El IdPrecedente de la tabla Poblaciones corresponde con el Id de la tabla Provincias. Por Ejemplo, en la tabla Paises, a España le corresponde el Id 41, entonces en la tabla Provincias, todas aquellas que pertenezcan a España tendrán como IdPrecedente el valor 41.

Bien, ya conocemos como esta estructurada la información, vamos al lio.

Rellenar los datos

Completemos la Tabla Provincias y Poblaciones con la información de la tabla temporal que creamos a partir del documento excel.

El campo "Entidad" de la "Tabla-Temporal", rellenará los datos de la tabla "Provincias" y el campo "Municipio" de la "Tabla-Temporal", rellenará los datos de la tabla "Poblaciones", quedando pendiente el campo "Localidad" de la "Tabla-Temporal" hasta tanto no haga las modificaciones en Investigaciones.odb.

Necesitamos saber el valor del campo Id correspondiente al Pais a introducir, en nuestro caso Mexico, para ello abrimos la Tabla Paises (Doble Click en la Tabla) y buscamos Mexico. ¿ Lo has encontrado? sí es el 134.

Introducimos la siguiente sentencia SQL (La sentencia SQL se introduce mediante el menú Herramientas>SQL...):

INSERT INTO "Provincias"("Provincia","IdPrecedente") SELECT DISTINCT "Tabla-Temporal"."Entidad",134 FROM "Tabla-Temporal"

De esta forma introducimos en la tabla Provincias los datos correspondientes a Entidad de la Tabla Temporal, más el código del IdPrecedente que según vimos en el caso de Mexico correspondía el valor 134.

Es muy importante haber incluido la Clausula DISTINCT, de esta forma no se introducen registros repetidos. (NO PUEDEN EXISTIR DOS PROVINCIAS CON EL MISMO NOMBRE)

Ahora necesitamos crear un campo temporal en la Tabla Temporal. Este campo almacenará el id que OpenOffice Base le ha dado a cada provincia nueva que hemos introducido. Para crear el campo temporal, que en este caso vamos a llamar IdProvincia usamos la siguiente sentencia SQL:

ALTER TABLE "Tabla-Temporal" ADD "IdProvincia" INTEGER

Esta sentencia simplemente modifica la estructura de la Tabla Temporal añadiendo un nuevo campo, IdProvincia.

Ahora rellenamos los datos de este campo temporal con el dato correspondiente de la tabla Provincias

UPDATE "Tabla-Temporal" SET "IdProvincia"=(SELECT "Provincias"."Id" FROM "Provincias" WHERE "Provincias"."Provincia"="Tabla-Temporal"."Entidad" AND "Provincias"."IdPrecedente"=134)

Vemos en la sentencia que se actualiza la Tabla Temporal definiendo el valor para el campo IdProvincia. Este valor lo obtiene de hacer una consulta, de buscar el Id de aquellas provincias que se llaman igual que el valor de la columna "Entidad" en "Tabla-Temporal" y con IdPrecedente igual a 134 (Mexico).

Bien, ya estamos preparados para introducir los registros en la base de datos de Poblaciones, introduce las siguiente sentencia SQL:

INSERT INTO "Poblaciones"("Poblacion","IdPrecedente") SELECT DISTINCT "Tabla-Temporal"."Municipio","Tabla-Temporal"."IdProvincia" FROM "Tabla-Temporal"

Ahora, rellenamos datos dentro de la tabla Poblaciones, vemos como el IdPrecedente lo toma de ese campo temporal que habíamos creado. Todo para que se siga la dependencia entre Pais-Provincias-Poblaciones.

Como anteriormente, es muy importante la Clausula DISTINCT ya que en la "Tabla Temporal" existen muchos registros con el mismo Municipio (ya que desde el municipio parten localidades) y no podemos meter duplicados para un mismo IdPrecedente en la tabla Poblaciones o Provincias.

Muestra de ejemplo del resultado, los municipios introducidos aparecen en el formulario de búsqueda de Investigaciones.odb :

¡ ACTUALIZACIÓN POR CAMBIOS EN LA BASE DE DATOS !

Como ya es posible introducir Pedanias en la base de datos, podemos ampliar este ejemplo, añadiendo las localidades de Jalisco. Realmente, simplemente es repetir los últimos pasos ya comentados, con los campos afectados:

De igual forma que antes, necesitamos crear un campo temporal en la Tabla Temporal. Este campo almacenará el id que OpenOffice Base le ha dado a cada población nueva que hemos introducido. Para crear el campo temporal, que en este caso vamos a llamar IdPoblacion usamos la siguiente sentencia SQL:

ALTER TABLE "Tabla-Temporal" ADD "IdPoblacion" INTEGER

Rellenamos los datos de este campo temporal con el dato correspondiente de la tabla Poblaciones (Ojo esta operación puede que dure un ratito)

UPDATE "Tabla-Temporal" SET "IdPoblacion"=(SELECT "Poblaciones"."Id" FROM "Poblaciones" WHERE "Poblaciones"."Poblacion"="Tabla-Temporal"."Municipio" AND "Poblaciones"."IdPrecedente"="Tabla-Temporal"."IdProvincia")

Y ahora, a introducir los registros en la base de datos de Pedanias ( En el ejemplo corresponden a las Localidades de Jalisco).

INSERT INTO "Pedanias"("Pedania","IdPrecedente") SELECT DISTINCT "Tabla-Temporal"."Localidad","Tabla-Temporal"."IdPoblacion" FROM "Tabla-Temporal"

Ya hemos terminado, podemos borrar la Tabla Temporal.

Ahora sí esta completo el Estado de Jalisco en la base de datos de Investigaciones.odb.