PDA

Ver la Versión Completa : Firebird y CURRENT_TIME


Gregorio Cíber
04-02-2024, 19:55:16
Hola, amigos.


A ver si alguien tiene la amabilidad de 'iluminarme' sobre el asunto que planteo a continuación. Trataré de ser sintético.


1.- Módulo de pedidos de una aplicación Delphi ejecutándose desde distintos puestos de red y atacando la misma BD en un servidor. No hay problema con la fecha y hora. Siempre aparecen los datos correctos. En este caso dichos datos se toman de los componentes de pantalla (TJvDBDateEdit y TJvDBDateTimePcker)

2.- Módulo de pedidos de otra aplicación similar, aunque más 'pequeñita', ejecutándose en modo terminal y atacando la misma BD. Aunque no siempre pero sí con relativa frecuencia, la fecha y la hora de una serie de pedidos es la misma. Por ejemplo: fecha 04/02/2024 hora 19:34:12. Esto ocurre en pedidos que esté realizando un mismo usuario o varios.
3.- Pensado que el problema podría venir de los componentes, al hacer INSERT en la tabla puse FECHA = CURRENT_DATE y HORA = CURRENT_TIME. No obstante el resultado no ha cambiado.


Según el manual de usuario de Firebird, textualmente pone:
CURRENT_DATE returns the current server date.
CURRENT_TIME returns the current server time.


Entonces, y aquí va la pregunta, ¿cómo es posible que se guarde una fecha y hora concreta en varios pedidos hechos en momentos distintos, ya que es imposible que un usuario introduzca varios pedidos en la misma hora, minuto y segundo.


La BD es Firebird 3.0


De antemano, muchas gracias.

Casimiro Notevi
05-02-2024, 10:18:32
Imposible responder con certeza si no vemos el código, ni cuándo toma la fecha/hora, si al iniciar un pedido, si al guardarlo, si lo toma algúmn evento del dataset, si lo hace la propia base de datos en un trigger, etc.
Lo ideal es que la fecha/hora se tome automáticamente al guardar el pedido en un trigger en la BD, en el beforeinsert, por ejemplo.

Gregorio Cíber
05-02-2024, 20:45:37
Gracias Casimiro Notevi por responder.


A ver. No puedo hacer FECHA = CURRENT_DATE y HORA = CURRENT_TIME en un disparador de la BD porque entonces esta asignación se haría siempre que el trigger saltara y, como dije anteriormente, a la BD se accede desde dos aplicaciones distintas. En una los campos FECHA y HORA son establecidos por el usuario y en la otra, no. Por eso lo hago en el componente (TpFIBDataSet) cuando se hace INSERT.
Lo extraño es que esto ocurre de forma esporádica, por ejemplo hoy ha funcionado perfectamente, y siempre cuando se trabaja en modo terminal, como puede ser un comercial desde una table.


En fin, seguiré machacando.

Casimiro Notevi
06-02-2024, 14:32:59
¿Quieres decir que el usuario pone la fecha y hora que le parece?

Gregorio Cíber
06-02-2024, 18:35:19
Sí, Casimiro.
Los comerciales pasan los pedidos diariamente, pero puede ocurrir que, por circunstancias, esto no sea así, de manera que realizan los pedidos según el orden de fechas en que se los han hecho a ellos los clientes y, para orden interno del servicio, la hora. Es así como funcionan. Por eso es que decía no es posible hacer la asignación FECHA y HORA en un trigger de la tabla correspondiente de la BD.
Gracias por tu interés.

Casimiro Notevi
06-02-2024, 19:57:11
Pues si se guarda la misma fecha/hora en varios pedidos, y lo lee de un componente en pantalla, es porque no se ha refrescado ese componente y tiene la misma fecha/hora que el pedido anterior.

Gregorio Cíber
06-02-2024, 20:39:23
Pues voy a asegurarme que esto no ocurre.
Gracias otra vez.