Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Tipo de dato DateTime y Time Stamp (https://www.clubdelphi.com/foros/showthread.php?t=94056)

LIA_GUILLERMO 09-07-2019 17:15:00

Tipo de dato DateTime y Time Stamp
 
Buenos días me gustaría que me pudieran ayudar en algunas dudas que tengo acerca de un proyecto que realizó pero me encontré con la siguiente situación:

Tengo una base de datos Firebird que es administrada desde IBExpert con la siguiente estructura:

BD: EmpresaX
Tablas: Configuración, EA, SA, ED, SD.

Las tablas de EA, SA, ED, SD tienen solo 4 campos que son: Índice, Valor, Status y Fecha_Hora.

Mi problema es el siguiente:

Desde Delphi tengo un procedimiento que se encarga de insertar a la base de datos estos campos, pero tengo un problema con el tipo de dato TDateTime ya que aun no comprendo cómo podría insertarlo en la base de datos en el campo Fecha_Hora que es un Time Stamp y que no tenga tanta pérdida de resolución.

Si me pudieran apoyar en este detalle que tengo para poder comprender mejor que es lo que tengo que realizar se los agradeceria.

Casimiro Notevi 09-07-2019 19:04:35

Cita:

Empezado por LIA_GUILLERMO (Mensaje 532699)
... tengo un problema con el tipo de dato TDateTime ya que aun no comprendo cómo podría insertarlo en la base de datos en el campo Fecha_Hora que es un Time Stamp y que no tenga tanta pérdida de resolución.

¿Pérdida de resolución? :confused:

Casimiro Notevi 09-07-2019 19:10:11

Mira estos, creo que te servirá.
https://firebird21.wordpress.com/201...hora-actuales/
https://firebirdsql.org/en/firebird-date-literals/

LIA_GUILLERMO 09-07-2019 19:13:27

Cita:

Empezado por Casimiro Notevi (Mensaje 532704)
¿Pérdida de resolución? :confused:

Si que no haya pérdida de tiempo al registrar la fecha y hora en la base de datos y de la misma manera para extraer esa fecha y hora Guardada.

ecfisa 09-07-2019 19:19:18

Hola.

Me parece que tu problema es de visualización, fijate si de este modo te muestra el dato en la resolución correcta:
Código SQL [-]
SELECT  
   INDICE, VALOR, STATUS, CAST(FECHA_HORA AS VARCHAR(24))
FROM EA

Saludos :)

mamcx 09-07-2019 19:25:52

Porque mejor no muestras la estructura en SQL y el ejemplo con DATOS de lo que sale mal???

LIA_GUILLERMO 09-07-2019 19:37:49

Cita:

Empezado por mamcx (Mensaje 532708)
Porque mejor no muestras la estructura en SQL y el ejemplo con DATOS de lo que sale mal???

Mi función es la siguiente:
Código Delphi [-]
Function TForm1.InsertEA (Const ADateTime :TDateTime; AIx :Byte; AValor :Real;
AStatus :Integer) :Integer;          (AIx es el Indice)
Begin
  FDConnectWriteDB.ExecSQL (System.SysUtils.Format (
    'Insert into EA Values (%d, %n, %d, %d)',[AIX, AValor, ADateTime, AStatus]));
End;

Lo primero que quiero resolver es cómo poder guardar el ADateTime al campo Fecha_Hora que es un Time Stamp en mi base de datos, ya que asi como lo tengo pues me marca una incompatibilidad de tipos.

ecfisa 09-07-2019 20:04:13

Hola.
Cita:

Empezado por LIA_GUILLERMO (Mensaje 532710)
... pues me marca una incompatibilidad de tipos.

Pero... ese es un problema diferente al que mencionabas antes.

Bueno, así a simple vista el tercer parámetro de Format lo declaras de tipo entero y el tipo TDateTime debería estar como flotante '%f', fíjate si ahí está el problema.

Saludos :)

LIA_GUILLERMO 09-07-2019 20:10:33

Cita:

Empezado por ecfisa (Mensaje 532711)
Hola.

Pero... ese es un problema diferente al que mencionabas antes.

Bueno, así a simple vista el tercer parámetro de Format lo declaras de tipo entero y el tipo TDateTime debería estar como flotante '%f', fíjate si ahí está el problema.

Saludos :)

Si lo intente con '%f' pero me marca un error de conversión de cadena

mamcx 09-07-2019 20:55:08

1- Deberias usar parametros en vez de formatear manualmente
2- %d es para integers
3- No pones comillas a la fecha
4- Usa formato ISO

http://www.delphibasics.co.uk/RTL.as...FormatDateTime

(MAJ) 19-07-2019 14:11:18

Buenas, lo que podrías hacer es enviar la fecha como un string llamando a "formatdatetime"
Código Delphi [-]
Function TForm1.InsertEA (Const ADateTime :TDateTime; AIx :Byte; AValor :Real; AStatus :Integer) :Integer;      //    (AIx es el Indice) 
Begin   
  FDConnectWriteDB.ExecSQL (System.SysUtils.Format ('Insert into EA Values (%d, %n, %s, %d)',[AIX, AValor, FormatDateTime('mm/dd/yyyy hh:nn:ss:zzz',ADateTime), AStatus])); 
End;
aplicas el formato que te sirva y no perdés precisión
http://www.delphibasics.co.uk/RTL.as...FormatDateTime


La franja horaria es GMT +2. Ahora son las 05:36:29.

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