Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
No Coinciden Los Tipos: Requerido Float, Obtenido String En Cambio De FMain
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje No Coinciden Los Tipos: Requerido Float, Obtenido String En Cambio De FMain 
 
Hola

Tengo un problema con SQLite3 y Gambas3 y no tengo ni idea por donde cogerlo. Por favor, una ayudita, Gracias.

Describo:

Base de datos SQLite3 con tabla con varios campos, pero el que nos interesa en Conexiones de gambas lo describe así:
Nombre                   Tipo                  Largo
Realizado                Cadena             ilimitado

Cuando obtengo este campo me devuelve, un ejemplo:
2019/05/02

En gambas lo pinto en un Gridview con este codigo:
Gridviewdatos[c, 3].Text = Resultado["Realizado"] 'Esto funciona perfectamente bien y devuelve al Gridview esto 2019/05/02

Pero yo lo que quisiera hacer es esto para obtener en el Gridview: 02/05/2019
Gridviewdatos[c, 3].Text = Format$(Resultado["Realizado"], "dd/mm/yyyy")

Y este es el problema que el último código me arroja el siguiente error:
"No coinciden los tipos: requerido Float, obtenido String en cambio de FMain"

Y no lo se resolver. ¿Tiene alguna lógica o explicación? ¿Donde doy solución en SQLite3 o Gambas3?

Gracias.
 



 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: No Coinciden Los Tipos: Requerido Float, Obtenido String En Cambio De FMain 
 
Citar:

Nombre                   Tipo                  Largo
Realizado                Cadena             ilimitado

¿Por qué usas un campo Tipo Cadena para almacenar fechas?
Una Fecha no es una cadena. Es un número. Mucha más información en gambaswiki. Te pongo un enlace del traductor de google al artículo (inconcluso) sobre el manejo de fechas.
https://translate.google.es/transla...ki%2Fdoc%2Fdate

y esta es la página original en inglés: http://gambaswiki.org/wiki/doc/date

Por otra parte está el tema de sqlite.
Sqlite no tiene ningún formato específico para almacenar Fechas y puede almacenarlas de la manera que quieras usando las Funciones de fecha (traductor google) (aquí la página original: https://www.sqlite.org/draft/lang_datefunc.html
Pero lo importante es que al crear la tabla puedes definir el campo como de fecha

CREATE TABLE `mitabla` (
`id` integer PRIMARY KEY autoincrement,
`fecha` date NOT NULL,
....
....
 

Que Sqlite lo admite sin problemas y luego dejar a gambas que lo grabe y recupere con sus clases nativas sin problemas.

Saludos
 




===================
No podemos regresar
 
última edición por shordi el Jueves, 04 Julio 2019, 22:31; editado 1 vez 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: No Coinciden Los Tipos: Requerido Float, Obtenido String En Cambio De FMain 
 
Muchas gracias por ayudarme, ah y enhorabuena por tus 33 años de programador. Mi historia es algo parecida a la tuya pero con algunos altibajos de la vida.

Por favor te voy a contar más o menos el conjunto y espero no abusar de tu confianza.

Yo tengo un programa que no he realizado yo y esta en Android. El desarrollador me lo ha puesto muy difícil y no me comparte nada bien la exportación de los datos de su programa. Para mi injusto e incluso se lo he dicho. Pero bueno eso es otra historia.

Tengo una tabla de Gastos y solo la puedo exportar en CSV, las fechas me las devuelve así:
,8/2/19 10:00,8/12/19,
Como verás son dos campos, el primero con la hora y el segundo solo fecha.

Al principio importé a la base de datos SQLite en formato fecha y no funcionaba, bien, me truncaba, etc. Era inviable directamente y cambiar a mano pues no.

Después la importé en un campo con formato cadena. Y lo que hice es actualizar ese campo para estandarizar las fecha según el estándar de fecha que exige SQLite (no veo que no es verdad, lo que hice es poner el año/mes/dia por que para ordenarlo en forma de cadena, directamente como solo pido el mes que me interesa, pues elimino el año y el mes y solo tengo que ordenar los números del día según una cadena y esto lo hace bien, además lo hace bien pero es algo casi de suerte   )pero en el mismo campo cadena.

Como soy nuevo en SQLite y sinceramente no lo conozco nada bien. Intenté ordenar de mas antiguo a mas nuevo las fechas y funcionaba. Pues listo, no quise tocar más.

Me parece que tuve otros problemas con las fechas pero ya no me acuerdo, en los foros de SQLite hay tela sobre las fechas, se puede escribir un libro.

Yo pienso exactamente como tu (si me lo permites tutear) las fechas son fechas y las cadenas son cadenas, pero con lo que pase sobre la ordenación y los foros de SQLite quede confundido y todo lo dejé en cadena para mi comodidad de la importación del CSV.

-Esto es mi realidad-

Ahora pregunto, siendo una cadena, ¿es posible convertir a fecha la cadena y formatearla en este caso en concreto? ¿o quizás no me estoy enterando lo que me quieres decir?

Supongo que me estas diciendo oye chico pon el campo cadena a fecha y ya verás como gambas lo traba bien e incluso no tendrás que formatear la fecha. Bueno ya sabes por que esta todo como esta. Quizás me debes aconsejar como resolverías mi historieta para que no tenga tal lío.

Muchas gracias.
 



 
última edición por gambafeliz el Viernes, 05 Julio 2019, 10:09; editado 2 veces 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: No Coinciden Los Tipos: Requerido Float, Obtenido String En Cambio De FMain 
 
Lo he resuelto pero dejo constancia que algo va mal en gambas. También puede ser que yo como sabes soy novato en este IDE no lo este utilizando apropiadamente, que es casi lo más seguro. Dudo que esto sea un fallo, pero quiero dejarlo por lo menos expuesto. También podría ser algo de compilación. En fin, no lo tengo claro. Eso que funcione mal y después por arte de magia bien, en fin me deja algo perplejo.

Pruebas para llegar a esta deducción:

Lo primero que hice es comprobar que funciona bien en Gambas:
Y la fecha correcta es: 05/02/2019
También: Gridviewdatos[c, 3].Text = CDate("2019/05/02") 'No funciona 'yyyy/mm/dd' o 'yyyy/dd/mm' ambos formatos no funcionan en las conversiones
También: Gridviewdatos[c, 3].Text = CDate("05/02/2019") 'funciona 'mm/dd/yyyy' o 'dd/mm/yyyy' esta estructura funciona bien en las conversiones.

He realizado esto:
Mi fecha: 2019/05/02 'yyyy/mm/dd'
Gridviewdatos[c, 3].Text = "2019/05/02" 'funciona lo trata como una cadena hacia Gridview
Gridviewdatos[c, 3].Text = Resultado["Realizado"] 'funciona lo trata como una cadena hacia Gridview ya que el origen del campo es una cadena
Gridviewdatos[c, 3].Text = CDate(Resultado["Realizado"]) 'No funciona, en este caso no funciona por que infringe el estándar de fecha yyyy/mm/dd

cadena = Resultado["Realizado"]
arrayCadena = Split(cadena, "/")
cadena = arrayCadena[2] & "/" & arrayCadena[1] & "/" arrayCadena[0]
Gridviewdatos[c, 3].Text = cadena 'No funciona la primera vez y quizás mas veces por lo que me ha pasado

Y escribo:
Gridviewdatos[c, 3].Text = "02/05/2019" 'funciona
 
Y vuelvo a poner:
Gridviewdatos[c, 3].Text = cadena 'Y ahora si funciona misteriosamente

 

No preguntes como ni por que pero lo he experimentado en vivo.
 



 
última edición por gambafeliz el Viernes, 05 Julio 2019, 09:57; editado 4 veces 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: No Coinciden Los Tipos: Requerido Float, Obtenido String En Cambio De FMain 
 
Si has leído las referencias que te puse verás que en gambas el tipo fecha en realidad son dos números juntos. El primero para la fecha y el segundo para la hora. Es decir: todas las fechas son datetime cosa que también se cumple en sqlite. Para las funciones de fecha debes pasar un formato de fecha válido para convertirse en datetime, es decir añade 00:00:00 a las fechas que manejas cuando las pases a las funciones pertinentes.
Lo que te mandan con el csv no es un formato de fecha válido. Debes ajustarlo tú primero.
gambas intenta convertir las fechas cuando le es posible, pero no siempre es así. (El ejemplo más sencillo es cuando se tratan fechas con número de mes y día intercambiados y el número de día es también un mes válido 2019/06/01 puede ser el primero de junio o el día de los reyes magos). Esas conversiones automáticas ("desesperadas" las llamo yo) están muy bien para dar flexibilidad al programa, pero son fuente de posibles errores y malos entendidos.

Mi consejo: no trates (es decir no aceptes el csv como fuente de datos directa para la tabla). Usa una tabla temporal en sqlite, importa el csv en ella y luego pasa los datos adaptados a otra tabla que maneje los formatos correctos. Eso no te requiere más que un pequeño incremento de tamaño en la bbdd (la tabla temporal la puedes eliminar luego) y un par de sentencias sql.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: No Coinciden Los Tipos: Requerido Float, Obtenido String En Cambio De FMain 
 
shordi escribió:  
Si has leído las referencias que te puse verás que en gambas el tipo fecha en realidad son dos números juntos. El primero para la fecha y el segundo para la hora. Es decir: todas las fechas son datetime cosa que también se cumple en sqlite. Para las funciones de fecha debes pasar un formato de fecha válido para convertirse en datetime, es decir añade 00:00:00 a las fechas que manejas cuando las pases a las funciones pertinentes.
Lo que te mandan con el csv no es un formato de fecha válido. Debes ajustarlo tú primero.
gambas intenta convertir las fechas cuando le es posible, pero no siempre es así. (El ejemplo más sencillo es cuando se tratan fechas con número de mes y día intercambiados y el número de día es también un mes válido 2019/06/01 puede ser el primero de junio o el día de los reyes magos). Esas conversiones automáticas ("desesperadas" las llamo yo) están muy bien para dar flexibilidad al programa, pero son fuente de posibles errores y malos entendidos.

Mi consejo: no trates (es decir no aceptes el csv como fuente de datos directa para la tabla). Usa una tabla temporal en sqlite, importa el csv en ella y luego pasa los datos adaptados a otra tabla que maneje los formatos correctos. Eso no te requiere más que un pequeño incremento de tamaño en la bbdd (la tabla temporal la puedes eliminar luego) y un par de sentencias sql.


Gracias, joven.

Es exactamente lo que hago, paso el csv a un temporal y después mediante código en php creo la tabla correcta pero para no cambiar el campo lo deje siempre en tipo Cadena. Esto último es el gran error. No tratar como hemos hablado las fechas como fechas y tratarla por vagancia las fechas como cadena.

Gracias lo voy a depurar en origen todo y reconstruir todo el problema y no dejarme llevar por la vagancia.

Por cierto yo también empeze con un programa de tenis  
 



 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Tipos Por Valor Y Tipos Por Referencias Shell General 2 Viernes, 26 Octobre 2012, 05:18 Ver último mensaje
fabianfv
No hay nuevos mensajes ¿Me Cambio De S.O. O Me Cambio De Gambas? shordi General 8 Domingo, 20 Enero 2013, 17:59 Ver último mensaje
jguardon
No hay nuevos mensajes ¿Existe Conversión Directa De String A F... gambafeliz General 5 Sabado, 24 Agosto 2019, 18:12 Ver último mensaje
gambafeliz
No hay nuevos mensajes Convertir String[] A Float gambafeliz General 14 Lunes, 26 Agosto 2019, 09:33 Ver último mensaje
gambafeliz
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron