Actualizar version de 1.6 a 1.7

Actualizar Investigaciones.odb de 1.6 a 1.7

Primeramente Corregimos el Posible ERROR

El error consiste en la omisión de una Relación entre dos tablas. No se si lo borre por despiste o es que solo lo he creado en la base de datos que manejo para mí. La cuestión es que en investigaciones.odb 1.5 la base de datos carecía de la vinculación que voy a describir.

Comprobemos en primer lugar, si nuestra base de datos carece de la relación entre las tablas.

En el menú seleccionamos "Herramientas>Relaciones..."

He creado una nueva versión de la base de datos, pero también me he dado cuenta de un pequeño error, así que, si estas utilizando una versión anterior, antes de actualizar, es bueno corregirlo.

Debemos encontrar la relación entre las tablas "Adjuntos" y "Adjuntos detalle." (en el dibujo esta representada mediante la linea que las une, además indica que la relación es 1 a 1).

Si no esta establecida la relación, deberemos crearla, bien mediante la interfaz gráfica o bien mediante sentencia SQL.

PROCEDIMIENTO A. Mediante la interfaz gráfica, simplemente debemos hacer click en el campo Id de la tabla Adjuntos, mantenemos el click y soltamos en el campo IdAdjunto de la tabla Adjunto detalle. Hecho esto, se habrá creado la relación 1 a 1, pero hay que editarla. Para ello nos colocamos encima la linea que representa la relación, hacemos click derecho y seleccionamos editar. De las opciones disponibles seleccionamos eliminar en cascada. Aceptamos en el formulario y guardamos cambios en Relaciones.

PROCEDIMIENTO B. Mediante sentencia SQL, simplemente introducimos las siguiente sentencia SQL (ya sabéis en menú Herramientas>SQL...)

ALTER TABLE "Adjunto_Detalle"

ADD CONSTRAINT Rel_Adj_AdjDet

FOREIGN KEY("IdAdjunto")

REFERENCES "Adjuntos"("Id")

ON DELETE CASCADE

Para que en relaciones aparezca la nueva relación, debemos ejecutar en menu ver>Actualizar tablas (Nota: Debemos estar en el apartado tablas)

Ojo, estos dos procedimientos podrían dar un error. Puede que con anterioridad hayas borrado Adjuntos que tenían detalles. Como, en principio la relación (con eliminación en cascada), no estaba establecida, se han podido borrar registros en adjuntos, sin que se borraran los correspondientes en Detalles de Adjuntos. Por tanto, pueden quedar registros en Detalles sin su correspondiente Adjunto (éste fue borrado). Al intentar crear la relación, HSQLDB avisa que no puede, ya que existen registros sin su correspondencia en la otra tabla.

Para poder establecer la relación, antes debemos borrar esos registros basura (sin su correspondencia en adjuntos), con la siguiente sentencia SQL.

DELETE FROM "Adjunto_Detalle" WHERE NOT EXISTS (SELECT 1 FROM "Adjuntos" WHERE "Adjuntos"."Id" = "Adjunto_Detalle"."IdAdjunto")

Una vez hecho ésto, estableceremos la relación, con el método explicado antes (Procedimientos A o B) que más os guste.

No está de más, terminar con la siguiente sentencia SQL para compactar la base de datos:

CHECKPOINT DEFRAG

El error, en realidad, no afectaba al funcionamiento de la base de datos. Simplemente, sirve para que al ejecutar la sentencia DELETE FROM "Adjuntos", borre el contenido del la tabla "Adjunto_Detalle", y así no queden residuos.

En realidad, establecer la relación sirve para algo más: sirve para proteger la integridad de la base de datos. Establecida la relación, OpenOffice base, si editamos manualmente la tabla Adjunto_Detalle, nos tirará error si no introducimos un valor correcto en IdAdjunto.

También, si no existiese la relación y se hubiese creado un formulario para introducir datos en "Adjunto_Detalle" (Formularios con Subformularios), se introducirían los datos de forma incorrecta, sin relacionar. Hasta investigaciones 1.7 no ha sido necesario por establecerse las relaciones mediante código Ooobasic.

En investigaciones.odb 1.7, existe un formulario en el que es imprescindible este tipo de relación. (Formulario Detalle Vinc Vehiculos)

Ahora es el momento de,

Actualizar la base de datos para actualizar a Investigaciones.odb 1.7

Novedades en investigaciones.odb 1.7

Ahora, disponemos de la posibilidad de añadir comentarios a las relaciones entre personas con personas, o medio de transporte con personas:

De esta forma, podemos especificar cuando duró una amistad por ejemplo y detalles sobre la misma. O, durante cuanto tiempo fue propietario de algún vehículo y porque dejó de serlo.

El funcionamiento interno de los dos formularios es distinto, de esta forma tienes dos ejemplos de como crear formularios de relación 1 a 1 en OpenOffice Base.

¿ Que necesito para actualizar mi base de datos?

Si ya vienes usando investigaciones.odb, antes de actualizar los formularios y macros, debes actualizar las tablas, añadiendo algunos campos a alguna ya existente, y crear tablas nuevas.

Te doy las sentencias para hacerlo en modo SQL...

ALTER TABLE "Vinc Personas-Personas" ADD "Desde" DATE NULL;

ALTER TABLE "Vinc Personas-Personas" ADD "Hasta" DATE NULL;

CREATE TABLE "Observaciones Vinc Pers Pers" ("IdVinculo" INTEGER NOT NULL PRIMARY KEY, "Texto" LONGVARCHAR);

ALTER TABLE "Observaciones Vinc Pers Pers"

ADD CONSTRAINT Rel_Obs_VincPersPers

FOREIGN KEY("IdVinculo")

REFERENCES "Vinc Personas-Personas"("Id")

ON DELETE CASCADE;

CREATE TABLE "Observaciones Vinc Pers Veh" ("IdVinculo" INTEGER NOT NULL PRIMARY KEY,"Desde" DATE NULL, "Hasta" DATE NULL, "Texto" LONGVARCHAR);

ALTER TABLE "Observaciones Vinc Pers Veh"

ADD CONSTRAINT Rel_Obs_VincPersVeh

FOREIGN KEY("IdVinculo")

REFERENCES "Vinc Personas-Vehiculos"("id")

ON DELETE CASCADE;

CHECKPOINT DEFRAG

Puedes introducirlas todas juntas o sentencia por sentencia (cada sentencia esta separada de la siguiente por una linea en blanco).

Una vez guardados los cambios puedes actualizar completamente (formularios y macros) mediante No perder los datos al cambiar de versión de documento