https://foro.gambas-es.org/viewtopic.php?f=3&t=7067
-----------------------------------
seta43
Wednesday, 01 August 2018, 09:28

Base De Datos De Libros.   388.000 Libros, 200.000 Autores, Y 50.000 Editoriales.
-----------------------------------
Hace unos años realicé una base de datos sobre películas que tenía grabadas. Estaba realizado en Gambas (visual Basic para Linux), y utilizaba SQLite para manejar los datos.
Buscando por internet encontré una base de datos de libros, estaba realizada para access microsoft. Era del programa abies 2 que se utilizaba para una gestión de  bibliotecas escolares.
La página del proyecto es http://www.abies.es/web/ , ahora el proyecto se basa en web, por lo que faltan en mi base de datos muchos libros desde hace 10 años hasta ahora.
Me puse manos a la obra y la base de datos en formato mdb la pase a formato sqlite.
La base de datos cuenta con  388.000 libros, 200.000 autores, y 50.000 editoriales.
Por lo que podéis ver es bastante grande, era una experiencia nueva trabajar con tanta cantidad de libros, por lo que lo tome como un reto.

[youtube]ovFqpO3y7cM[/youtube]VIDEO

[url=http://seta43.blogspot.com/2018/08/gambas-base-de-datos-de-libros-con.html]http://seta43.blogspot.com/2018/08/gambas-base-de-datos-de-libros-con.htmlhttp:


-----------------------------------
shordi
Wednesday, 01 August 2018, 10:47

Re: Base De Datos De Libros.   388.000 Libros, 200.000 Autores, Y 50.000 Editoriales.
-----------------------------------
Buen trabajo para ser un primer proyecto. Funciona fluida en mi máquina y es un ejemplo de la potencia de Sqlite.

Si admites algunas sugerencias, te dejo algunas.

El programa es sólo de consulta, entonces... ¿Por qué usar controles de edición? cada vez que ves un libro, puedes teclear en los campos, aunque luego lo que tecleas no se grabe en ningún sitio... Utiliza sólo etiquetas (textLabel te permite formatear el texto a tu gusto)


Utilizas la propiedad .center para mostrar los formularios en el centro... pero es bastante molesto cuando se tienen varios monitores. Te aconsejo que añadas el componente gb.settings y utilices los métodos 
settings.read y settings.write. Con ello la aplicación recuerda la última posición y tamaño en que se abrieron los formularios.

Hay más cositas, pero ya te digo, buen trabajo.


-----------------------------------
Grandamakulo
Wednesday, 01 August 2018, 12:21

Re: Base De Datos De Libros.   388.000 Libros, 200.000 Autores, Y 50.000 Editoriales.
-----------------------------------
Me ha parecido una presentación estupenda.
Lo miro esta tarde y te comento en cuanto a usabilidad.
Para mí sería utilísimo porque empleo un montón este tipo de base de datos.


-----------------------------------
tincho
Wednesday, 01 August 2018, 14:48

Re: Base De Datos De Libros.   388.000 Libros, 200.000 Autores, Y 50.000 Editoriales.
-----------------------------------
Felicitaciones, un trabajo muy útil.
Realice una busqueda por el autor "saramago" y aparecen dos entradas iguales pero solo funciona el filtro si elijo una de ellas ya que si elijo la que no funciona se bloquea un momento el programa.

Si te viene bien te dejo algunas sugerencias sobre la base de datos.
Como norma general, el uso de claves foráneas mejora notablemente el rendimiento de la base de datos.
Tabla [b]Autores[/b]
El campo "TipoAutor" no es "AUTOINCREMENT", tiene mayúsculas y minúsculas en el nombre y repite entradas.
Tabla [b]EDITORIALES[/b]
El campo clave "EDITORIAL" es "TEXT" en vez de ser integer.
El campo "EDITORIAL" no es "UNIQUE"
Tabla [b]Fondos[/b]
El campo idFondo no es "AUTOINCREMENT"
Hay varios campos id.... que son "TEXT" y deberian ser integer.

Para hacer mas optimo el trabajo aplicaría los comentarios antes mencionados y agregaría unas vistas.

Muchas gracias por compartir tu programa.

Saludos.


-----------------------------------
Grandamakulo
Wednesday, 01 August 2018, 18:24

Re: Base De Datos De Libros.   388.000 Libros, 200.000 Autores, Y 50.000 Editoriales.
-----------------------------------
Pues me ha parecido genial. Aparte de los comentarios de los compañeros más expertos, el funcionamiento del ejecutable es adecuado. Con el código fuente no he podido hacerlo funcionar, seguro que por mi torpeza inherente. Me sale un error de conexión con la base de datos. Intentaré explorarlo despacio.
Enhorabuena.


-----------------------------------
tincho
Wednesday, 01 August 2018, 19:05

Re: Base De Datos De Libros.   388.000 Libros, 200.000 Autores, Y 50.000 Editoriales.
-----------------------------------
[quote user="Grandamakulo" post="42671"]Pues me ha parecido genial. Aparte de los comentarios de los compañeros más expertos, el funcionamiento del ejecutable es adecuado. Con el código fuente no he podido hacerlo funcionar, seguro que por mi torpeza inherente. Me sale un error de conexión con la base de datos. Intentaré explorarlo despacio.
Enhorabuena.[/quote]
Para hacerlo funcionar con el código fuente tenes que usar el archivo .sqlite que viene con el zip del programa.gambas y colocarlo en la raiz del proyecto gambas.
Saludos.


-----------------------------------
shordi
Wednesday, 01 August 2018, 19:17

Re: Base De Datos De Libros.   388.000 Libros, 200.000 Autores, Y 50.000 Editoriales.
-----------------------------------
[quote user="tincho" post="42667"]Felicitaciones, un trabajo muy útil.
Realice una busqueda por el autor "saramago" y aparecen dos entradas iguales pero solo funciona el filtro si elijo una de ellas ya que si elijo la que no funciona se bloquea un momento el programa.

Si te viene bien te dejo algunas sugerencias sobre la base de datos.
Como norma general, el uso de claves foráneas mejora notablemente el rendimiento de la base de datos.
Tabla [b]Autores[/b]
El campo "TipoAutor" no es "AUTOINCREMENT", tiene mayúsculas y minúsculas en el nombre y repite entradas.
Tabla [b]EDITORIALES[/b]
El campo clave "EDITORIAL" es "TEXT" en vez de ser integer.
El campo "EDITORIAL" no es "UNIQUE"
Tabla [b]Fondos[/b]
El campo idFondo no es "AUTOINCREMENT"
Hay varios campos id.... que son "TEXT" y deberian ser integer.

Para hacer mas optimo el trabajo aplicaría los comentarios antes mencionados y agregaría unas vistas.

Muchas gracias por compartir tu programa.

Saludos.[/quote]
Respecto a la BD todo lo que dices es correcto... si fuese una BD "normal", con actualizaciones, adiciones y demás, pero al ser una BD "estática" y, tal como maneja los datos (Suele cargar todas las tablas en memoria, utiliza búsquedas aproximadas y ambiguas con LIKE, etc. etc.) no creo fuesen significativos tales cambios.
Por eso le he remarcado que está muy bien para ser un primer proyecto.


-----------------------------------
Grandamakulo
Wednesday, 01 August 2018, 20:02

Re: Base De Datos De Libros.   388.000 Libros, 200.000 Autores, Y 50.000 Editoriales.
-----------------------------------
[quote user="tincho" post="42672"]
Para hacerlo funcionar con el código fuente tenes que usar el archivo .sqlite que viene con el zip del programa.gambas y colocarlo en la raiz del proyecto gambas.
Saludos.[/quote]

¡Gracias, Tincho!


-----------------------------------
portaro
Friday, 10 August 2018, 23:05

Re: Base De Datos De Libros.   388.000 Libros, 200.000 Autores, Y 50.000 Editoriales.
-----------------------------------
:mryellow: 
Puff eso lo queria saber hacer yo me haria uno para podcasts de Histocast y esas cosas + mis libros que tengo a montones pero no organizados.

 :shock: 
Idea para no hacer pero para pensar que se me ocurre 
Es posible conectar el gambas a ivoox directamente a histocast y que busque alla los programas? Se puede hacer con agun componente en un programa nuevo?


-----------------------------------
seta43
Wednesday, 10 October 2018, 09:16

Re: Base De Datos De Libros.   388.000 Libros, 200.000 Autores, Y 50.000 Editoriales.
-----------------------------------
Hola a todos.

Gracias por vuestros comentarios.

En cuanto a la búsqueda de "saramago" es bastante normal, como ejemplo con "perez reverte" hay como 5 códigos diferentes para el mismo autor, hay no puedo hacer nada, es como está la base de datos. 
Si eliges un autor que no tiene libros, al volver se a cargar toda la base de datos. Es lo que cuento en el artículo:
Cuando se emplea la orden TablaFondos = Conexion.Exec("Select * from Fondos") tarda unos 5 segundos en actualizar la base de datos. Ya sé que es grande pero he visto en otros programas que lo hacen mas rápido.

Tenéis razón que debería hacer todos los campos no editables debido a que es solo de consulta, fallo mio.
Normalmente utilizo alineación a la izquierda, pero hay campos que se ven mejor en el centro.
Tendré en cuenta lo de settings.read y settings.write, no lo sabía.

Lo de  claves foráneas, no lo entiendo muy bien, soy bastante novato.

No entiendo lo de:

[i]Tabla Autores
El campo "TipoAutor" no es "AUTOINCREMENT", tiene mayúsculas y minúsculas en el nombre y repite entradas.
Tabla EDITORIALES
El campo clave "EDITORIAL" es "TEXT" en vez de ser integer.
El campo "EDITORIAL" no es "UNIQUE"
Tabla Fondos
El campo idFondo no es "AUTOINCREMENT"
Hay varios campos id.... que son "TEXT" y deberian ser integer.[/i]

La estructura es la siguiente:
CREATE TABLE "Autores" ("IdAutor" INTEGER PRIMARY KEY  NOT NULL  UNIQUE , "TipoAutor" , "autor" , "extra" )
CREATE TABLE "Editoriales" ("IDEDITORIAL"  PRIMARY KEY  NOT NULL  UNIQUE , "EDITORIAL" )
CREATE TABLE "Fondos" ("IdFondo" INTEGER PRIMARY KEY  NOT NULL  UNIQUE , "IdTipoFondo" , "CodigoExterno" , "CodigoLocal" , "Transaccion" , "IntroInfo" , "Fecha1Info" , "Fecha2Info" , "IdPaisInfo" , "IdLenguaInfo" , "DepositoLegal" , "IdAutor" , "Titulo" , "Subtitulo" , "RestoPortada" , "Edicion" , "LugarEdicion" , "IdEditorial" , "AnoEdicion" , "Extension" , "CaracteristicasFisicas" , "Dimensiones" , "MaterialAnejo" , "Serie" , "NumeroSerie" , "Notas" , "ISBN" , "ISBN2" , "Lote" )

Igual me pierdo en algo, pero no se, soy aprendiz en esto.

Como otro de mis lenguajes favoritos es C o C++ he realizado el programa con la librería wxwidgets, es muy parecido o igual al realizado en Gambas. [url=http://seta43.hol.es/wxlibro.html]http://seta43.hol.es/wxlibro.html 
Posteriormente añadí lector de código de barras.
Lo bueno que tiene en realizarlo con wxwidgets, es que se puede compilar para Windows y linux sin un solo cambio de código. 
Como he observado la orden "Select * from Fondos"  , es bastante mas rápida que con Gambas.
Si gambas tuviera  una versión nativa en Windows sería perfecto. ;)

Gracias por vuestros comentarios.
JUAN


-----------------------------------
portaro
Wednesday, 17 October 2018, 22:31

Re: Base De Datos De Libros.   388.000 Libros, 200.000 Autores, Y 50.000 Editoriales.
-----------------------------------
[quote user="seta43" post="43265"]Hola a todos.

Gracias por vuestros comentarios.

En cuanto a la búsqueda de "saramago" es bastante normal, como ejemplo con "perez reverte" hay como 5 códigos diferentes para el mismo autor, hay no puedo hacer nada, es como está la base de datos. 
Si eliges un autor que no tiene libros, al volver se a cargar toda la base de datos. Es lo que cuento en el artículo:
Cuando se emplea la orden TablaFondos = Conexion.Exec("Select * from Fondos") tarda unos 5 segundos en actualizar la base de datos. Ya sé que es grande pero he visto en otros programas que lo hacen mas rápido.

Tenéis razón que debería hacer todos los campos no editables debido a que es solo de consulta, fallo mio.
Normalmente utilizo alineación a la izquierda, pero hay campos que se ven mejor en el centro.
Tendré en cuenta lo de settings.read y settings.write, no lo sabía.

Lo de  claves foráneas, no lo entiendo muy bien, soy bastante novato.

No entiendo lo de:

[i]Tabla Autores
El campo "TipoAutor" no es "AUTOINCREMENT", tiene mayúsculas y minúsculas en el nombre y repite entradas.
Tabla EDITORIALES
El campo clave "EDITORIAL" es "TEXT" en vez de ser integer.
El campo "EDITORIAL" no es "UNIQUE"
Tabla Fondos
El campo idFondo no es "AUTOINCREMENT"
Hay varios campos id.... que son "TEXT" y deberian ser integer.[/i]

La estructura es la siguiente:
CREATE TABLE "Autores" ("IdAutor" INTEGER PRIMARY KEY  NOT NULL  UNIQUE , "TipoAutor" , "autor" , "extra" )
CREATE TABLE "Editoriales" ("IDEDITORIAL"  PRIMARY KEY  NOT NULL  UNIQUE , "EDITORIAL" )
CREATE TABLE "Fondos" ("IdFondo" INTEGER PRIMARY KEY  NOT NULL  UNIQUE , "IdTipoFondo" , "CodigoExterno" , "CodigoLocal" , "Transaccion" , "IntroInfo" , "Fecha1Info" , "Fecha2Info" , "IdPaisInfo" , "IdLenguaInfo" , "DepositoLegal" , "IdAutor" , "Titulo" , "Subtitulo" , "RestoPortada" , "Edicion" , "LugarEdicion" , "IdEditorial" , "AnoEdicion" , "Extension" , "CaracteristicasFisicas" , "Dimensiones" , "MaterialAnejo" , "Serie" , "NumeroSerie" , "Notas" , "ISBN" , "ISBN2" , "Lote" )

Igual me pierdo en algo, pero no se, soy aprendiz en esto.

Como otro de mis lenguajes favoritos es C o C++ he realizado el programa con la librería wxwidgets, es muy parecido o igual al realizado en Gambas. [url=http://seta43.hol.es/wxlibro.html]http://seta43.hol.es/wxlibro.html 
Posteriormente añadí lector de código de barras.
Lo bueno que tiene en realizarlo con wxwidgets, es que se puede compilar para Windows y linux sin un solo cambio de código. 
Como he observado la orden "Select * from Fondos"  , es bastante mas rápida que con Gambas.
Si gambas tuviera  una versión nativa en Windows sería perfecto. ;)

Gracias por vuestros comentarios.
JUAN[/quote]

Gracias a ti por compartirlo.


