gb.db2: columnas calculadas o martilladas - Versión para impresión +- Comunidad Gambas-es (https://gambas-es.org) +-- Foro: Gambas (https://gambas-es.org/forum-3.html) +--- Foro: Bases de Datos (https://gambas-es.org/forum-6.html) +--- Tema: gb.db2: columnas calculadas o martilladas (/thread-1916.html) Páginas:
1
2
|
RE: gb.db2: columnas calculadas o martilladas - guizans - 01-05-2025 Código: CREATE TABLE Tabla1(ID INTEGER PRIMARY KEY AUTOINCREMENT, Código: Public Sub Main() Código: Private Function leer(fecha As Date) As Integer Código: Private Function ConectarBasePath() As Boolean Hay código copiado y pegado del programa que estoy haciendo, en este programa de prueba, pero el formato erroneo de la fecha persiste. No veo donde puede estar el error. Lo curioso es que con el componente antiguo de sqlite2, esto funciona bien, no hay problema, pero con el nuevo es donde aparece ese formato de fecha tan extraño. Un saludo. RE: gb.db2: columnas calculadas o martilladas - omoreno - 01-05-2025 Hola Guizans Como te ha comentado el colega Shordi, lo mejor es utilizar bases de datos relacionales reales, pero igualmente SQLite hace un gran esfuerzo, debe y tiene que funcionar… Las fechas dependen de como se guarden en su respectiva base de datos... Te he adjuntado un proyecto en consola con la forma en la que trabajo las fechas en SQLite. Cuando lo ejecutes te debería mostrar una salida por consola como la siguiente: ![]() Cuando veas el código del proyecto, observa: • Las fechas y horas las trabajo en campos separados. • Las fechas en SQLite las trabajo en el formato: YYYY-MM-DD (insert, update, select, ...). • Las fechas en Gambas las trabajo según el formato local del equipo. Este proyecto crea la base, crea la tabla, inserta 5 registros cada vez que se ejecuta y finalmente ejecuta tres consultas. En el Main() de las tres consultas, la primera esta basada en tu forma de armar una fecha y las otras dos según el formato que uso en SQLite: YYYY-MM-DD. Nota: Este tema trata de: “Columnas calculadas o martilladas”, pero se ha mezclado con procesos relacionados a las fechas, seria bueno moverlo a un tema que se relacione con fechas. Saludos. ![]() RE: gb.db2: columnas calculadas o martilladas - guizans - 02-05-2025 Hola omoreno. Veo en tu código lo siguiente: Código: Dim f As String Estas insertando en un campo de tipo DATE un valor de tipo String. Y no protesta, es más, lo hace bien. Acabo por no entender nada de nada. Estoy mas perdido que un pulpo en un campo de fútbol. Yo hasta ahora, y nunca he tenido este problema, cuando grabo una fecha siempre lo hago como muestro en mi ejemplo, ¿está mal hecho? Pues por lo visto si. Seguiré buscando información hasta asegurarme que lo hago correctamente, o por lo menos intentar que, aunque haya una nueva versión de Gambas, la base de datos siga intacta. Muchas gracias. Un saludo. RE: gb.db2: columnas calculadas o martilladas - Shordi - 03-05-2025 A ver: SQLite no es una base de datos con tipos definidos. Se guía por lo que ellos llaman "afinidad de datos" cuya definición exacta no recuerdo ahora mismo. Respecto a la fechas, el manual dice: SQLite no tiene un tipo de dato dedicado a las fechas/horas. En su lugar los valores de fecha y hora se pueden almacenar como: a) Una cadena de texto con cualquiera de los siguientes tipos comprendidos en la norma ISO-8601: YYYY-MM-DD YYYY-MM-DD HH:MM YYYY-MM-DD HH:MM:SS YYYY-MM-DD HH:MM:SS.SSS YYYY-MM-DDTHH:MM YYYY-MM-DDTHH:MM:SS YYYY-MM-DDTHH:MM:SS.SSS HH:MM HH:MM:SS HH:MM:SS.SSS b) El número de día Juliano incluyendo fracciones de día desde -4713-11-24 12:00:00 Por ejemplo: 2460825.09444444 c) El formato de Unix, que el número de segundos transcurridos desde 1970-01-01 00:00:00 Por ejemplo 1748528160 A ésto hay que sumar que Gambas tiene sus propios formatos y maneras de manejar las fechas. No voy a explicarlo aquí porque ya está mejor explicado por Benoit aquí: https://gambaswiki.org/wiki/doc/date Este de abajo está traducido por google: https://gambaswiki-org.translate.goog/wiki/doc/date?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=wapp Dicho ésto, Guizans, y sin haber probado tu código, básicamente creo que es correcto. Sólo quedaría tener en cuenta que la función Date( etc) hace un tipo de conversión (no recuerdo si a la fecha local o a la absoluta) que tal vez sea la fuente del problema... si es que no lo es que el servidor tenga establecido un idioma y el cliente otro o algo así. Sea como sea con SQLite es así, puedes poner una cadena de caracteres y se lo traga, o un número y también. De hecho, en SQLite todo es texto a la hora de grabar y sólo se divide en tipos a la hora de leer... un poco caos. El eterno dilema entre libertad y seguridad. ¿Que qué te aconsejo? Según tus aspiraciones. Si aspiras a manejar base de datos, si aspiras a escalar tus programas a otros motores de BD, usa los formatos fijos, tal como lo haces. Si sólo quieres SQLite... pues lo que más cómodo te sea. Saludos RE: gb.db2: columnas calculadas o martilladas - guizans - 04-05-2025 Gracias Shordi. Pues nada, a por la cadena de caracteres, es lo más cómodo. Mi programa no va a salir de mi ordenador, así que me vale así. Muchas gracias. |