Ir al contenido

Recommended Posts

Buenos días. Consciente de que hoy en día el manejo de problemas comunes se hace más fácil si se trabaja en forma colaborativa, me he propuesto hacer esta breve introducción a LibreOffice Base.

 

Vamos a ello, lo primero por supuesto, instalar el paquete ofimático en español.

 

  1.  Descarga del paquete

 

Aquí podemos seleccionar el paquete (.deb, .rpm, ...) que se adapte a nuestro SO (Linux, Mac OS X, Windows) y arquitectura (x86, x64).

 

También la traducción de la interface de usuario a español y la ayuda.

 

Importante: revisar los Requerimientos del sistema

 

 

      2. Instalación del paquete

 

Un completo tutorial de instalación según necesidades de cada usuario:

 

 

      3. Base

 

Aquí un problema común, intento abrir Base y no puedo. El paquete Base no viene instalado por defecto en LibreOffice.

 

Para instalarlo:

sudo apt-get install libreoffice-base

Si alguno de los componentes de LibreOffice no se han instalado como pasa en Ubuntu con el componente Java:

sudo apt-get install libreoffice

Esta orden instala todo el meta-paquete LibreOffice.

 

Para esta Introducción a Base, me he basado en:

LibreOffice Versión: 5.2.0.4 Id. de compilación: 1:5.2.0~rc4-0ubuntu1~xenial2 Subprocesos de CPU: 1; Versión de SO: Linux 4.4; Renderizado de IU: predeterminado; Configuración regional: es-ES (es_ES.UTF-8)

Luego, con LibreOffice instalado y funcionando, me centraré en algunos de los problemas comunes de trabajar con el SQL en Base.

 

Un saludo a los integrantes del Foro,

 

Nota: este tema esta a disposición de Moderadores/Administrador del Foro, para su reubicación, pertinencia, o eliminación.

 

JPablos

 

 

Compartir este post


Enlace al post
Compartir en otros sitios

Ahora, con Base abierto, vamos crear tablas mediante SQL.
 
La Sintaxis sería:

CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);

Creamos una tabla, para ello generamos un DDL (Data Definition Language, acepta cientos de posibilidades que están previstas para usar con las tres sentencias SQL que lo conforman: CREATE TABLE , ALTER TABLE , y DROP TABLE)
 
DDL (tabla Proveedores)

CREATE TABLE Proveedores
( proveedor_id int NOT NULL,
  nombre_proveedor char(50) NOT NULL,
  nombre_contacto char(50),
  CONSTRAINT Proveedores_pk PRIMARY KEY (proveedor_id)
);

En Base Herramientas/SQL
 
Pegamos el contenido de nuestro DDL (tabla Proveedores) en la venta SQL, ejecutamos el comando, y sí todo ha ido bien, en la casilla "Estado", SQL nos informa (1: Se ejecutó la orden correctamente.)
 
Picamos en Ver/Actualizar tablas, y nos aparece la tabla que hemos creado.
 
El problema común, es que nos ha creado tanto el nombre de tabla como los encabezados de columnas en MAYÚSCULAS.
 
Este es el comportamiento predeterminado de HSQLDB, que es quien maneja el SQL en Base.
 

"..., if the name is enclosed in double quotes, the exact name is used as the case-normal form. But if it is not enclosed in double quotes, the name is converted to uppercase and this uppercase version is stored in the database as the case-normal form".

 
Sí queremos que tanto el nombre de nuestra tabla como los encabezados de columnas aparezcan tal como los hemos escrito en nuestro DDL, simplemente debemos usar entrecomillado doble, así:

CREATE TABLE "Proveedores"
( "proveedor_id" int NOT NULL,
"nombre_proveedor" char(50) NOT NULL,
"nombre_contacto" char(50),
CONSTRAINT "Proveedores_pk" PRIMARY KEY ("proveedor_id")
);

Bueno este ha sido nuestro primer problema común en la creación de tablas con SQL en Base.
 
Espero haya sido de utilidad.
 
Un saludo a los integrantes del Foro
 
JPablos

Editado por JPablos

Compartir este post


Enlace al post
Compartir en otros sitios

Ahora vamos a introducir datos a nuestra tabla.

 

Creamos un DML (Data Manipulation Language, funciona con SELECT , INSERT , UPDATE , y
DELETE) para nuestra tabla, con éste DML introducimos datos a nuestra tabla.

 

Primero agregamos el campo "fecha"

ALTER TABLE "Proveedores"
ADD "fecha" date;

Actualizamos tablas ( Ver/Actualizar tablas).

 

DML (tabla Proveedores)

INSERT INTO "Proveedores"
("proveedor_id", "nombre_proveedor", "nombre_contacto", "fecha")
VALUES
(110, 'Anís Chamaquito', 'Carlos', '2016/08/28');

Al ejecutar el DML (TABLA Proveedores) en Base Herramientas/SQL, en la casilla "Estado", SQL nos informa (1: Wrong data type: java.lang.IllegalArgumentException).

 

Esto se debe al formato de fecha que he definido en DML (TABLA Proveedores), he definido la fecha a insertar como '2016/08/28'.

 

La solución: cambiar el formato en DML (TABLA Proveedores), por '2016-08-28'

INSERT INTO "Proveedores"
("proveedor_id", "nombre_proveedor", "nombre_contacto", "fecha")
VALUES
(110, 'Anís Chamaquito', 'Carlos', '2016-08-28');

Al ejecutar el comando, en la casilla "Estado", SQL nos informa (1: Se ejecutó la orden correctamente.)

 

Picamos en Ver/Actualizar tablas, y nos aparece la tabla que hemos creado con los nuevos datos.

 

Espero haya sido de utilidad.

 

Un saludo a los integrantes del Foro

 

JPablos

Editado por JPablos

Compartir este post


Enlace al post
Compartir en otros sitios

Buenas tardes, veo que el tema ha generado interés.

 

Los problemas que he encontrado al trabajar con SQL han sido los que he relacionado arriba, y las soluciones provienen de diversas fuentes.

 

Propongo que este tema sea para eso, exponer las dudas o inconvenientes que van surgiendo del uso de SQL en Base, aportando soluciones, o dejando abierta una pregunta para que integrantes del Foro con mayor conocimiento nos ilustren.

 

Ahora, otro apunte:

 

Al generar una consulta en modo SQL, ejecutamos la consulta y aparece un mensaje informando que no se han podido cargar los datos (excluyendo por supuesto que sea por un error de sintaxis), podemos activar la opción:

 

Editar/Ejecutar orden de SQL directamente

 

Este sub-menú de Editar solo aparece cuando estamos generando consultas en modo SQL.

 

Bueno, esto por ahora.

 

Un saludo a los integrantes del Foro

 

JPablos

Compartir este post


Enlace al post
Compartir en otros sitios

Otro apunte, este relacionado con la vista-previa de documento, ventana inferior derecha de Base.

 

Se activa desde Ver/Previsualización/Documento

 

Pues en mi caso esta ventana muestra la vista previa, pero los iconos se superponen a la primera fila del documento, buscando encontré una solución transitoria y es la siguiente:

 

 

RdxO6VC.png

 

 

La solución consiste en Redimensionar la ventana, para ello:

  1. Presionar Alt+Barra espaciadora
  2. Se abre un menú de comandos,
  3. Elegir Redimensionar, ajustar la ventana,
  4. Presionar Enter para aceptar cambios y listo

Con solo mover un poco un borde de la ventana ya se ve bien la vista previa de documento.

 

Nota: este apunte no es de SQL, pero si suele ser un problema común.

 

Un saludo a los integrantes del Foro

 

JPablos

 

 

 

Compartir este post


Enlace al post
Compartir en otros sitios

Buenos días.

Después de buscar un buen rato en la Red, encontré el Standar SQL de 1992 y el de 2003.

 

Si alguien esta interesado, este son los enlaces:

 

 

 

Un saludo a los integrantes del Foro

 

JPablos

Editado por JPablos

Compartir este post


Enlace al post
Compartir en otros sitios

Paso otros enlaces que pueden ser interesantes:

 

Mysql con clase

Manual referencia Mysql

Curso en vídeo de SQL

Otro curso web de SQL

Manual práctico

Otro

Otro de la UOC

 

 

Como curiosidad encontré algo sobre inyectar SQL en PHP :D

Editado por Rohlling

Compartir este post


Enlace al post
Compartir en otros sitios

Buenas tardes. Ahora viene mi pregunta:

 

Quiero saber si es posible ver el diseño de una tabla en Base (HSQLDB) con un comando SQL.

He intentado con:

SELECT * FROM "INFORMATION_SCHEMA"."SYSTEM_TABLES" WHERE "TABLE_TYPE" = 'TABLE' 

Obtengo una gran cantidad de información (todas la tablas *), pero no la información que quiero, a saber por ejemplo la estructura de la tabla "orders".

 

 

14724827786961827.png

 

Nota: aclaro que desde la interface gráfica es muy simple, selecciono "orders" hago clic derecho/Editar y se abre una vista de la estructura de la tabla. Pero mi inquietud va hacia SQL.

 

Un saludo a los integrantes del Foro

 

JPablos

Compartir este post


Enlace al post
Compartir en otros sitios

Buenos días, sigo intentando con SQL conseguir la estructura de la tabla "orders".

 

Herramientas/SQL

select listagg(column_name ||','|| data_type ||','||
  case
    when data_type in ('VARCHAR2', 'NVARCHAR2', 'CHAR', 'RAW')
      then to_char(data_length)
    when data_type = 'NUMBER'
        and (data_precision is not null or data_scale is not null)
      then data_precision || case
        when data_scale > 0 then '.' || data_scale
      end
    end, ',') within group (order by column_id)
from all_tab_columns
where table_name = 'orders';

En este caso SQL informa:

1: Access is denied: LISTAGG in statement [select listagg(]

Bueno, esto es lo que va de mi pregunta.

 

Ahora recurro a los Gurús (Integrantes con amplios conocimientos especializados) del Foro para intentar dar solución a esta consulta con SQL.

 

Nota: acabo de ver que esta consulta utiliza varchar2 y por lo que he leído este Tipo de Dato es de bases de datos Oracle, lo destaco por si puede ayudar a aclarar la futura respuesta.

 

Un saludo a los integrantes del Foro

 

JPablos

Editado por JPablos

Compartir este post


Enlace al post
Compartir en otros sitios

Buenas noches. Seguimos en el empeño.
 
El Standard ANSI/ISO dice que el lenguaje SQL, esta compuesto por el Lenguaje de Definición de Datos (DDL) y por el Lenguaje de Manipulación de Datos (DML).
 
El DDL incluye aquellos comandos que operan sobre la estructura de la base de datos, actuando sobre tablas, índices y vistas. (Las tres sentencias SQL que lo conforman: CREATE TABLE , ALTER TABLE , y DROP TABLE)
 
El DML incluye aquellos comandos que operan sobre los datos almacenados en las tablas de la base de datos. (Sentencias SQL incluídas SELECT, INSERT, DELETE, UPDATE)
 
Hay una característica de la sentencia CREATE TABLE que permite la creación de tablas de solo lectura.
 
La sintaxis:
 

nhbO6Zd.png

 

Imagen que proviene del libro "Structure Query Language (SQL), A Practical Introduction (Akeel I Din)"


 
Si miramos la tabla "Proveedores" que creamos antes, y la queremos dejar de solo lectura, agregamos [READ_ONLY] luego del nombre de la tabla.

CREATE TABLE "Proveedores" [READ_ONLY]
( "proveedor_id" int NOT NULL,
"nombre_proveedor" char(50) NOT NULL,
"nombre_contacto" char(50),
CONSTRAINT "Proveedores_pk" PRIMARY KEY ("proveedor_id")
);

Las tablas de solo lectura no pueden ser modificadas, y son útiles en la creación de algunas aplicaciones.

Espero sea de utilidad

Un saludo a los integrantes del Foro

JPablos

Editado por JPablos

Compartir este post


Enlace al post
Compartir en otros sitios

Buenas tardes. Seguimos

Veamos un poco más en detalle un DDL. La tabla "Students" nos va a servir como guía, su DDL:
 

CREATE TABLE "Students"
( SURNAME char(15) NOT NULL,
  FIRST_NAME char(15),
 D_O_B date,
 STUDENT_NO int NOT NULL,
 DEPT_NO int,
  CONSTRAINT "Students_pk" PRIMARY KEY (STUDENT_NO)
);

Al ejecutar el comando en Herramientas / SQL, en la casilla "Estado", SQL nos informa (1: Se ejecutó la orden correctamente.)

Luego actualizamos tablas Ver / Actualizar tablas

Ahora vamos a ver la estructura de nuestra tabla (aún no he dado con el comando SQL en Base, usamos el modo gráfico):

En la pestaña Tablas seleccionamos nuestra tabla, "Students" / Click derecho / Editar , obtenemos:

BvPPPrf.png


 

En el DDL hemos creado la tabla con el nombre "Students", al estar entrecomillado el nombre de tabla es Students, de no estar entrecomillado el nombre de tabla sería STUDENTS.

 

Los nombres de columna se han definido en mayúscula directamente, cada uno con su "Tipo de Dato" [char(15), date, int, int NOT NULL], de aquí interesa destacar los que llevan NOT NULL, esto implica que no se puede omitir este dato al llenar un registro en la tabla.

 

Hemos definido mediante el comando CONSTRAINT "Students_pk" PRIMARY KEY (STUDENT_NO)que la tabla "Students" debe tener una Clave primaria "Students_pk" y que esa Clave primaria estará definida en el campo  STUDENT_NO.

 

Como detalle interesante, para que podamos definir la Clave primaria, el campo (nombre de columna, en nuestro ejemplo STUDENT_NO ) debe contener el modificador NOT NULL, este modificador digamos que "obliga" la existencia del dato, por lo que, no veremos columnas especificadas como Clave primaria con datos NULL (ausencia de datos).

 

En la imagen podemos ver que ese campo tiene un icono que representa la Clave primaria.

 

Eso de momento.

 

Un saludo

 

JPablos

Editado por JPablos

Compartir este post


Enlace al post
Compartir en otros sitios

Buenos días. Ahora vamos a solucionar la pregunta de como ver la estructura de una tabla en Base mediante un comando SQL

Había hecho una aproximación a esta consulta mediante el comando:
 

SELECT * FROM "INFORMATION_SCHEMA"."SYSTEM_TABLES" WHERE "TABLE_TYPE" = 'TABLE' 

El comando daba como resultado de la consulta una tabla muy extensa informando lo que le había pedido, a saber, que me informara todo (*) lo que había en "INFORMATION_SCHEMA", sobre las tablas contenidas en la actual base de datos "SYSTEM_TABLES", donde "TABLE_TYPE" = 'TABLE'.

 

Pues el comando se ejecutó correctamente y emitió el resultado de lo que le pedí, con una salvedad por mi parte, no era lo que yo quería saber.

 

Yo quería saber la estructura de una tabla en particular, pues bien, esto es posible, solo hay que configurar la consulta de modo que informe sobre la estructura de una tabla en particular (cosa que ignoraba como hacer), para ello modificamos el comando así:

 

La sintaxis sería:

SELECT * FROM "INFORMATION_SCHEMA"."SYSTEM_COLUMNS" WHERE "TABLE_NAME" = 'nombre_tabla'

Ahora, si quiero ver la estructura de la tabla "Students", tabla que obviamente existe en mi base de datos actual, solo debo ir a

 

Herramientas / SQL y allí probar el comando, obtengo un resultado de ejecución correcto.

SELECT * FROM "INFORMATION_SCHEMA"."SYSTEM_COLUMNS" WHERE "TABLE_NAME" = 'Students'

Luego, si quiero crear una consulta con ese comando, pues paso a la pestaña "Consultas" / Crear una consulta en modo SQL ..., pego mi comando, y ejecuto la consulta.

 

Consulta que ahora refleja en una gran tabla toda la estructura de la tabla "Students"

 
pGlYdGr.png

 

 

Espero haya sido de utilidad.

 

Un saludo a los integrantes del Foro

 

JPablos
 

Compartir este post


Enlace al post
Compartir en otros sitios

Seguimos. Como el anterior comando resultó ser interesante, he decido que quiero dejar un comentario en él.
 
Me explico, en SQL podemos comentar nuestros comandos, ya sea por que queremos destacar algo en particular, o por llevar una bitácora de lo que hemos hecho (razones para comentar un comando hay muchas, la que elijamos es válida), pero solo hay tres formas de hacer un comentario, a saber:

  • -- Esto es un comentario en línea estilo SQL
  • // Esto es un comentario en línea estilo Java
  • /* Esto es un comentario en línea estilo C */

Cualquiera de estos tres estilos de comentario será ignorado por la base de datos al ejecutar el comando SQL.

Ahora voy a comentar mi comando:
 

SELECT * FROM "INFORMATION_SCHEMA"."SYSTEM_COLUMNS" WHERE "TABLE_NAME" = 'Students'

-- Vaya lo que me costó encontrar este comando
// Debo investigar más sobre "INFORMATION_SCHEMA"
/* Es un tema muy interesante*/

Eso por ahora. Espero sea útil

Un saludo

JPablos

Editado por JPablos

Compartir este post


Enlace al post
Compartir en otros sitios

Un Tip

 

Los archivos de Base en LibreOffice se guardan con extensión .odb

 

fNgPMZM.png

 

Los archivos .odb son archivos comprimidos en .zip, para hacer un símil, pensemos en un .epub, bueno al tema, sí hacemos:

 

click derecho sobre el archivo.odb / Extraer aquí (recuerdo a quien lea que estoy usando Ubuntu), obtenemos una carpeta de nombre

 

archivo.odb_FILES, como se ve en la imagen precedente.

 

 

ArKmnoS.png

 

 

Esa carpeta contiene las definiciones de nuestro archivo de base de datos .odb, pues siéntanse libres de explorar.

 

La sub-carpeta llamada database contiene varios archivos sin extensión visible, uno de ellos llamado script , si abrimos este archivo con gedit por ejemplo, veremos que contiene entre otras cosas, los DDLs de las tablas que hayamos creado.

 

Este es un procedimiento solo con fines de aprendizaje, pero el Tip va en que de ahí podemos recuperar nuestros DDLs, sí es que no hemos tenido la precaución de guardarlos previamente.

 

Un saludo

 

JPablos

Editado por JPablos

Compartir este post


Enlace al post
Compartir en otros sitios

Nada, @@portaro, se hace con gusto.

 

Bien, en el comentario 2 (// Debo investigar más sobre "INFORMATION_SCHEMA") que hice sobre el comando, me recordaba que debo investigar más sobre "INFORMATION_SCHEMA", un buen punto de partida para ello esta:

 

Aquí, es un vínculo a LO version 4 Base HANDBOOK (PDF en línea).

 

Una forma fácil de tenerlo en nuestro ordenador para consulta, sería:

$ wget https://wiki.documentfoundation.org/images/e/e8/BH40-BaseHandbook.pdf
Edito: para aquellos interesados en seguir los ejercicios propuestos en el BaseHandbook, hay dos bases de datos de ejemplo, una sin macros, y otra con macros.

 

Otra cosa, el diseño de la Bd, respecto de la estructura de nuestras tablas, es importante un buen diseño antes de empezar a introducir datos, con esto me refiero nombre de tabla, nombres de columnas, tipo de dato -en particular formatos de fecha, modificadores NOT NULL, en fin...,-, definición de Clave primaria y Clave foránea, guardar los DDLs de las tablas creadas.

 

Si queremos tener una base de datos confiable y protegernos de pérdidas de datos, hacer backup es una recomendación que no hay que olvidar.

 

De momento eso.

 

Un saludo

 

JPablos

Editado por JPablos

Compartir este post


Enlace al post
Compartir en otros sitios

Nota breve sobre el Diseño de una Bd

  • Las bases de datos son un herramienta poderosíma para manejar información.
  • Una base de datos (relacional) se compone de un grupo de tablas que están relacionadas entre sí.
  • Una tabla registra la información sobre objetos que tienen las mismas características . Estas características se denominan atributos.
  • Las tablas se interconectan en la medida en que un atributo de una tabla hace referencia a un registro en otra.
  • La clave del diseño de un Bd depende de cómo definimos las tablas que la conforman, y a su vez de cómo se interconectan estas tablas entre sí.
  • La premisa fundamental respecto de la información es "Divide y vencerás", apropiando el "Divide et impera" (Julio César, Napoleón).
  • Las tablas que son los contenedores de esa información, deben cumplir una norma básica: "cada tabla tiene que cubrir un tema y sólo un tema".
De lo anterior se deduce que a preferencia de una única super tabla, es preferible tener varias tablas con segmentos de la información que cubran un solo tema, es decir que sí estoy registrando los libros que tengo sobre este tema en una Bd, crearé una tabla "libros", otra "autores", cada tabla con sus atributos inherentes, luego, haré que estas dos tablas se relacionen (clave primaria, clave foránea).

 

Un saludo

 

JPablos

Editado por JPablos

Compartir este post


Enlace al post
Compartir en otros sitios

Un buen diseño requiere de tiempo.  Hay que ver bien cada una de las entidades que forman la base de datos.  A veces se pueden crear ambigüedades si la tabla la generamos a partir de un texto o una idea poco extendida. 

A todo esto, hay 2 escuelas o formas de diseño: Los que usan claves compuestas y los que no.  He aprendido ambas, y aseguro que usando una clave única para cada tabla es lo más sensato. :D

Compartir este post


Enlace al post
Compartir en otros sitios

Registra una cuenta o conéctate para comentar

Debes ser un miembro de la comunidad para dejar un comentario

Crear una cuenta

Regístrate en nuestra comunidad. ¡Es fácil!

Registrar una cuenta nueva

Iniciar Sesión

¿Ya tienes cuenta? Conéctate aquí.

Iniciar Sesión

×