Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   fecha 30/12/1899 (https://www.clubdelphi.com/foros/showthread.php?t=93836)

oscarac 29-03-2019 22:43:26

fecha 30/12/1899
 
Estoy usando Sql Server 2000 y no tuve problemas con el tema de las fechas
cambie a SqlServer 2008 y cuando quiero grabar una fecha vacia (30/12/1899), me lanza el siguiente error:
the conversion of a varchar data type to a datetime data type resulted in an out-of-range value

estoy usando xe7 y para almacenar la fecha solo hacia esto

Código Delphi [-]
 qryTemporal.Params.ParamByName('FechaVencimiento').AsDateTime := CdsDetalleFechaVencimiento.AsDateTime;

esto es una declaracion de parametro a la cadena donde generaba al script para grabar

alguien conoce alguna solucion que pueda ser usada en cualquier motor de base de datos?

Casimiro Notevi 29-03-2019 23:58:06

Cada gestor de bases de datos suele ser diferente en cuanto a la fecha inicial para contarlas.
De todas formas, ¿por qué dejas una fecha vacía? y si la dejas vacía, ¿qué fecha quieres que tome?

mamcx 30-03-2019 00:11:17

Lo mas probable es que sea un problema de formato. Es bueno ser especifico, porque de acuerdo a la configuración regional de la maquina esto cambia:

https://docs.microsoft.com/en-us/sql...t-transact-sql

Por lo demás, es un ERROR hacerlo como lo haces sin opciones explícitas de conversion. Recuerda:

* Usa el formato ISO para fecha internamente. El formato de localizacion es SOLO paras visualizar al usuario.
* Si por alguna razón tienes que almacenar el formato localizado, debes guardar en CUAL locale quedo. Y no hay otra que hacer conversiones aunque PAREZCA te todo esta bien porque en TU MAQUINA no hay error.
* Usa configuraciones neutrales para fecha, decimales, etc. Asegurate de especificar eso en los parámetros de conexion
* Usa UTF8 para texto a lo largo de toda la cadena de la APP.


Es bueno siempre suponer "y que pasa si usan esto en China?" cuando haces apps...


En resumen: Aprende sobre Localización e Internacionalización de apps y datos.

oscarac 30-03-2019 02:33:52

algo curioso
entre al Managment de sql 2008 y le cambie el idioma a espaniol a la base de datos y funciono normal

el tema de las fechas vacias es porque se trataba de una fecha de vencimiento, que puede o no tener un valor , tambien depende del registro que se esta grabando
basicamente es un sistema contable, si grabo una cuenta de bancos no hay fecha de vencimiento pero si genero una cuenta de proveedores o clientes podria tener o no fecha de vencimiento.

mamcx 30-03-2019 03:53:54

Cita:

Empezado por oscarac (Mensaje 531305)
algo curioso
entre al Managment de sql 2008 y le cambie el idioma a espaniol a la base de datos y funciono normal

Pero aun así sigues teniendo un problema. Tomate el tiempo de arreglar el manejo de esos formatos ;)

Cita:

Empezado por oscarac (Mensaje 531305)
el tema de las fechas vacias es porque se trataba de una fecha de vencimiento, que puede o no tener un valor

En SQL, se usa NULL para eso.

oscarac 30-03-2019 05:09:24

tomare en cuenta tus recomendaciones
gracias

olbeup 31-03-2019 14:31:08

Hola oscarac,

Cuando realizo un
Código SQL [-]
INSERT INTO Tabla(CAMPOFECHA) VALUES(0)
le pongo un cero e internamente cuando se graba me poner la fecha en 01-01-1900, y nunca he tenido ningún problema.

Un saludo.

Casimiro Notevi 31-03-2019 15:00:31

Cita:

Empezado por olbeup (Mensaje 531315)
Hola oscarac,
Cuando realizo un
Código SQL [-]INSERT INTO Tabla(CAMPOFECHA) VALUES(0)

le pongo un cero e internamente cuando se graba me poner la fecha en 01-01-1900, y nunca he tenido ningún problema.
Un saludo.

Depende de lo que hagas, imagina que eso es la fecha de entrega de un libro en la biblioteca o una película en el videoclub, tendrá que pagar atrasos de más de un siglo :)

mamcx 31-03-2019 19:40:06

En vez de hacer las cosas a punta de hacks, que tal si se usa los SQL valores correctamente?

Digo yo... ;)

P.D: Mi trabajo es integrarme con multiples ERPs y otros sistemas. No me causa NINGUNA gracia tener que darle la "vuelta" a todas esas grandes "ideas" de como modelan las BD nuestros colegas....


La franja horaria es GMT +2. Ahora son las 06:33:48.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi