Ver la Versión Completa : Manipulacion de datos tipo time en Delphi y postgres
willwallace
14-02-2013, 04:19:24
Estimados amigos soy nuevo en esto y tengo el siguiente problema: quiero almacenar datos tipo time en una BdD postgres desde delphi(con la finalidad de manipularlos y realizar calculos), para lo cual emplee la siguiente funcion
DELPHI(Ejecucion Boton)
dm.hora.Close();
dm.hora.Parameters.Items[1].Value:=mehinicio.Text; //mehinicio= maskedit
dm.hora.Prepared;
dm.hora.ExecProc();
POSTGRES(funcion que enlaza con dm.hora)
CREATE OR REPLACE FUNCTION newhora1(horaf time without time zone)
RETURNS integer AS
$BODY$
declare
begin
insert into hora1 values (horaf);
return 1;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION newhora1(time without time zone) OWNER TO postgres;
al ejecutarlo me da como resultado 'ERROR: no existe la funcion newhora1(date); Error while executing the query '.
Por favor solicito cualquier apoyo. deseo guardar el registro de horas en formato time y no character, ya que todos los calculos los preciso realizar en postgres
Casimiro Notevi
14-02-2013, 08:04:29
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)?, gracias por tu colaboración :)
Recuerda poner los tags al código fuente, ejemplo:
http://www.clubdelphi.com/images/UtilizarTAGs.png
Gracias :)
No sé exactamente como trabaja postgresql los campos de fecha y hora, aunque lo normal es que sea un número (double), por lo que puedes hacer cálculos con ellos normalmente.
A ver si algún compañero te lo puede confirmar, aunque no estaría de más que echaras un vistazo a la documentación de postgresql.
En el caso de firebird, que es el que mejor conozco, los campos fechahora se guardan así: (ejemplo): 34354,5689742458 donde la parte entera son los días transcurridos desde el 31/12/1890 y la parte decimal son las horas. Los campos fecha no guardan la parte decimal (34354) y los campos hora guardan la parte decimal (0,5689742458)
movorack
14-02-2013, 17:46:59
Hola,
Ahorita desconozco si el resultado sería igual o no pero modificaría la forma de llamar la función desde el código, enviando el parámetro en el valor ya establecido como fecha
dm.hora.Close();
dm.hora.Parameters.Items[1].AsDateTime:= StrToDate(mehinicio.Text); //mehinicio= maskedit
dm.hora.Prepared;
dm.hora.ExecProc();
Pero... el error que estás obteniendo es:
al ejecutarlo me da como resultado 'ERROR: no existe la funcion newhora1(date); Error while executing the query '.
Y eso no tiene nada que ver con el manejo del campo de tiempo.
Verifica que estás llamando la función correctamente desde delphi. recuerda que si está en un esquema diferente a public, deberás llamarla con el nombre del esquema ej: miesquema.funcion()
Antes de hacerlo en tiempo de ejecución, podrías probar con una query en tiempo de diseño y abrirla para probar que esté ejecutando correctamente la sentencia
willwallace
14-02-2013, 18:23:50
De antemano gracias por la ayuda q me brindan
Estimados amigos: investigando un poco cambie el MaskEdit por TDateTimePicker configurado previamente de la siguiente forma con
TDateTimePicker.Format:='HH:mm:ss';
y TDateTimePicker.Kind:=dtkTime;
DELPHI(Ejecucion Boton)
showMessage( timetostr(hinicio.Time) );
dm.hora.Close();
dm.hora.Parameters.Items[1].Value:=hinicio.Time; //hinicio=TDateTimePicker
dm.hora.Prepared;
dm.hora.ExecProc();
, ahora no me sale error y registra en postgres, pero en lugar de registrar la hora q muestra el TDateTimePicker registra un valor de ceros ejemplo: 08:49:25 registra solo valores 00:00:00
No se si estoy obviando alguna opcion, Gracias.
Casimiro Notevi
14-02-2013, 18:29:36
Parece que no has leido mis indicaciones anteriores ;)
Al González
14-02-2013, 18:50:09
[...] Gracias.
Gracias a ti por darle formato al código, ya que así se comprende mejor.
Es muy sencillo. Mira, un compañero se lo explica a otro colega aquí (http://www.clubdelphi.com/foros/showpost.php?p=455011&postcount=2). :)
willwallace
17-02-2013, 15:33:56
Buenos dias. Queria que me dieras una manito, ahora no me sale error y registra en postgres, pero en lugar de registrar la hora q muestra el TDateTimePicker registra un valor de ceros ejemplo: 08:49:25 registra solo valores 00:00:00
No se si estoy obviando alguna opcion, Gracias.
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.