Shordi   20-04-2024, 13:19
#1
La Primera entrega es sobre SQLite y Gambas.




Saludos

No podemos regresar
guizans   21-04-2024, 17:20
#2
Tengo una duda. ¿Por qué no se puede usar en exclusiva DB Browser? ¿Qué ventajas tiene tu sistema de crear la base de datos a través de un fichero?
No tengo el código fuente a mano, pero por lo que he entendido, se da al usuario del programa crear una base de datos nueva y borrar la existente. ¿Esto no es algo peligroso? Quiero decir, si algún manazas se la carga a tomar por el culo meses y meses de registros. Desde mi punto de vista, debería de crear la base de datos cuando se instala el programa y que el usuario no tenga acceso a ella ni que pueda crear una nueva.

Muchas gracias por los vídeos, están geniales.

Un saludo.
Shordi   21-04-2024, 19:18
#3
Cita:¿Por qué no se puede usar en exclusiva DB Browser?
Por supuesto que se puede... si eres el informático. Toda mi vida he programado para otros y el usuario final no sabe ni quiere saber nada de bases de datos. El programa tiene que funcionar por sí mismo y punto. Durante mucho tiempo lo que he hecho ha sido crear la base de datos yo con el IDE de gambas, meterla vacía dentro del ejecutable y copiarla a las carpetas correspondientes durante la primera ejecución del programa por parte del usuario. Eso funciona perfecto... si vas a estar "encima" del programa y del usuario, porque una modificación en la base de datos y te cuesta recompilar, volver a generar los paquetes y enviar una actualización del mismo a los usuarios. El sistema que ahora he puesto es una simplificación de lo que hacía en mis últimos tiempos, en los que el programa creaba la base de datos sqlite por sí mismo, como en el ejemplo de Food Express, pero teniendo la capacidad de hacerlo desde un archivo .sql posterior, lo que ahorraba el tener que recompilar en caso de modificación de la BD, que es, no lo olvidemos, un fichero ajeno a lo que es gambas en sí mismo.
Así pues, puedes tú usar dbBrowser tranquilamente... pero no puedes pedir a tus usuarios que lo hagan. Food Express debe ser capaz de solventar todos los problemas que surjan por sí mismo.
Cita:¿Qué ventajas tiene tu sistema de crear la base de datos a través de un fichero?
Eso está explicado en el video. El ide de gambas no es capaz de grabar las indicaciones de Foreign Key en la creación y modificación de las tablas y SQLite no admite la creación de Foreign Key en las modificaciones de Alter Table ... etc. Por eso un fichero .sql de una base de datos creada por dbBrowser (o cualquier otro programa) o directamente por ti mismo tecleando, es la manera más directa de que tu programa pueda hacer esas tareas.
Por otra parte, salvo los programas específicos, lo normal es que un usuario nunca tenga que modificar por sí mismo la estructura de las tablas... sólo preparar y servir comidas.
Cita:se da al usuario del programa crear una base de datos nueva y borrar la existente. ¿Esto no es algo peligroso?
Sí, claro, pero es necesario. Todo el software del mundo, hasta los móviles, tienen aquello de "Restaurar configuración original" que manda a la mierda todos los cambios realizados. El truco está en proteger esta acción con las debidas salvaguardas. Haciendo una copia antes de crear la nueva , etc.
 
Cita:Quiero decir, si algún manazas se la carga a tomar por el culo meses y meses de registros.
Eso si el programa no es bueno. Aún no hemos visto más que en el menú el sistema de copias de seguridad, que salva nuestros datos de manera automática según se configure. La manera más simple es establecer una copia automática en el primer arranque del día. También se pueden establecer vía cron cada ciertos minutos, etc. Nunca hay que dejar al usuario la responsabilidad de hacer las copias porque nadie las hace. Nunca he perdido más de un día de trabajo en ningún programa... salvo cuando se llenaba el disco de las copias y los usuarios ignoraban los mensajes y seguían así meses... cosa que me ha pasado una vez.
"¿Pero no habéis estado viendo los avisos durante meses?" "Sí, pero como si le dabas a "Entendido" todo funcionaba bien pues... no queríamos molestarte"
Cita:Desde mi punto de vista, debería de crear la base de datos cuando se instala el programa y que el usuario no tenga acceso a ella ni que pueda crear una nueva.
Exacto. Eso en condiciones de trabajo normales, pero siempre hay motivos para reiniciar la base de datos: Una corrupción por un corte de luz, alguien la ha cagado con el dbBrowser... o simplemente, el negocio tiene un ciclo anual de trabajo (imagina un aula en un colegio) y cada ciclo empieza de 0 (conservando, por supuesto, los datos de años anteriores como copias ).

En realidad es el primer uso "serio", mejor dicho, complejo que hago de sqlite, que hasta ahora sólo he utilizado como un sistema de almacenar configuraciones y datos locales, pero sin usar nunca la integridad referencial. Para eso estaba el servidor de base de datos de la intranet, MySQL.
Me está molando bastante, pero al no ser una base de datos "tradicional" tiene tantas peculiaridades que hace las cosas un poco distintas a como se enseña habitualmente.

Saludos.

No podemos regresar
guizans   23-04-2024, 17:18
#4
Muchas gracias por responder a las dudas. Se agradece que alguien con experiencia de su punto de vista, basado en la experiencia, a personas sin conocimientos, que aunque las preguntas puedan ser evidentes para alguien con muchas horas, pero para alguien que empieza pueden resultar grandes obstáculos.

Lo dicho, muchas gracias.
tincho   29-04-2024, 11:25
#5
Hola,
Gracias por el video Shordi, solo me gustaría mencionar algunos aspectos prácticos sobre BBDD que aplico en mis programas que luego de varios años de prueba y error me dan buenos resultados y me facilitan la programación, la migración a otros motores de bases de datos, la creación de controles de edición y muchas cosas mas.
Para crear la base de datos
Usar un archivo de texto con la sentencia de creación de la base de datos, NO DBBrowser, NO Gambas. Un archivo de texto plano da mas control de todo el proceso. Y luego la manera que a mi me resulta es crear una tabla de la siguiente manera:
Código:
CREATE TABLE "users" (
    "idx"    INTEGER,
    "name"    TEXT NOT NULL UNIQUE,
    "hash"    TEXT,
    "perm"    INTEGER,
    "active"    INTEGER,
    "expires"    TEXT,
    "wrkgrp"    INTEGER,
    "phone"    TEXT,
    "email"    TEXT,
    FOREIGN KEY("wrkgrp") REFERENCES "workgroups"("idx"),
    PRIMARY KEY("idx" AUTOINCREMENT)
);

Poniendo el PRIMARY KEY("idx" AUTOINCREMENT) al final se evitan muchos errores (como el da la coma al final) y se puede usar el archivo para crear la estructura de la base de datos en memoria para hacer cosas como crear controles para edición o verificar si un campo es referenciado etc.

Alterar los registros
Aquí una vez mas paso de todo lo que no sea una sentencia SQL simple, y trabajo siempre con el .Exec de la conexión es mas rápido y se tiene mas control del proceso.
Para facilitar el tema cree una clase llamada Data.class (ver adjunto) que se instancia al inicio del programa, la clase contiene todo lo necesario para crear (pasando el archivo SQL) y alterar la BBDD. Es una clase que fui haciendo a medida que aprendía a usar las clases así que todavía hay espacio para mejorar. Big Grin
Una entidad = una tabla (coincido con Shordi).
Al usar tablas pequeñas de cada entidad por ejemplo, usuarios, tipos_de_usuarios, ventas, tipos_de_producto etc. se hace mas fácil manejar los datos y reutilizar el código.
Crear Vistas
Una cosa que me molestaba a la hora de hacer el código de los programas que en los campos referenciados solo ves los números enteros y no el texto, entonces la solución es una vista. La clase tiene un procedimiento para crear vistas pero requiere que la sentencia de creación respete ciertas normas como los nombres y que exista un campo único ademas del ID.
Pero también se puede poner en la sentencia SQL de creación de la base de datos (o ejecutar desde gambas con  .Exec() ) de la siguiente manera:
Código:
CREATE VIEW "view_users" AS SELECT
    users.idx AS idx,
    users.name AS name,
    users.hash AS hash,
    users.perm AS perm,
    users.active AS active,
    users.expires AS expires,
    workgroups.name AS wrkgrp,
    users.phone AS phone,
    users.email AS email
    FROM users
LEFT JOIN workgroups ON users.wrkgrp=workgroups.idx
ORDER BY users.idx,users.name ASC

Nota: La vistas también pueden usarse para calcular subtotales pero hay que tener en cuenta que cada motor de base de datos puede diferir en este aspecto del SQL estándar.
Archivos adjuntos
.gz
Data.class.tar.gz (Tamaño: 11.95 KB Descargas: 1)

1 Saludo.
tincho   08-05-2024, 09:56
#6
Algo de feedback
Descargue la versión del video 7.

Respecto al GUI, ya sabes que prefiero siempre usar el control gb.gui antes que gb.qt5
En mi escritorio XFCE que usa la librerías  GTK no se ajustan bien los botones y algunos controles se ven parcialmente, pero se corrige, en casi todos los casos, haciendo verdadera la propiedad Extpand.
Por ejemplo en:
fProveedores: No se ve bien la CheckBox vertodos, no se expande si agrando la ventana del programa
fClientes: GridView1 se ve mejor sin borde y con el "Background" con color "Background" valga la redundancia.
fProductos, fRepartidores, fAuxiliares: No se expande si agrando la ventana del programa, algunos controles están parcialmente ocultos.
Espero que la información sea de utilidad.

1 Saludo.
Shordi   08-05-2024, 10:19
#7
Gracias Tincho.

El uso de Vistas es algo que dejo para el último vídeo, en el que se habla del generador de consultas. Normalmente yo utilizaba en el curro el concepto de "Histórico" , que es una tabla que se rellena con una vista que traduce todos los códigos y relaciones y archiva todos los campos "legibles" por el ser humano. Se rellenaba justo antes de eliminar un registro añadiendo la fecha de baja y el usuario eliminador, etc. De momento no tengo pensado añadir Histórico ni control de usuarios, ni sistemas de permisos ni uso de múltiples esquemas de BD ni nada de eso. Vistas sí, ya te digo, pero lo dejo para el final.

Lo que ocurre es que este programa es sólo un ejemplo sencillo para usuarios novatos y si entramos en honduras de este tipo, quizá lo que se consiga es "espantar" a los posibles beneficiarios del mismo. Por eso mismo todo es muy tosco, la manera de filtrar, los formularios en sí mismos, etc. pero al mismo tiempo es, creo, más comprensible.

Los fallos de diseño visual... sí. Están ahí fruto de las prisas y demás. Corregiré todos los que pille, pero sólo el uso puede llegar a limar un programa en todos sus detallitos... y este no lo he hecho para ser usado, sólo para demostrar las distintas técnicas de hacer las cosas.

Gracias por tu interés y tu tiempo.

Saludos

No podemos regresar
  
Usuarios navegando en este tema: 4 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.