Ver Mensaje Individual
  #7  
Antiguo 24-07-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Reputación: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por n03l
- Hay ocasiones en las que la fecha y hora del servidor firebird se ajusten de manera manual por una persona
Bien, para empezar, NADIE debe cambiar la fecha del servidor , es más, un servidor no debe estar al alcance de ningún trabajador "normal" de la empresa.
En todo caso deja que el propio servidor se ajuste la hora automáticamente conectándose a un servidor horario, eso lo mantendrá siempre perfecto, tal y como ha indicado antes duilioisola.

Cita:
Empezado por n03l
lo que quiero esque todos clientes que se ejecuten en red manejen la misma fecha y hora del servidor firebird
Para eso solamente debes consultar la fecha y hora del servidor.

Cita:
Empezado por n03l
-Hay clientes que podrian estar abiertos por varios dias.
Como si están mil años, no importa, cada vez que hace falta saber la fecha y hora sólamente tienes que consultarla al servidor.


¿Cómo consultar la fecha y hora del servidor donde está instalado firebird?, pues es fácil, tienes diversas formas, esta es una de ellas.

Puedes tener funciones distintas para las fecha, hora y fechahora, ejemplo:

Código Delphi [-]
function getFechaServidor:TDateTime;
begin
  Result := SelectDBmain('CURRENT_DATE','RDB$DATABASE')
end;

function getHoraServidor:TDateTime;
begin
  Result := SelectDBmain('CURRENT_TIME','RDB$DATABASE')
end;

function getFechaHoraServidor:TDateTime;
begin
  Result := SelectDBmain('CURRENT_TIMESTAMP','RDB$DATABASE')
end;

Una función común para no repetir el mismo código en cada una de las funciones anteriores:
Código Delphi [-]
function SelectDBmain(cCampo,cTabla:string;cCondicion:string=''):Variant;
var
  Q : TQuery;
begin
  Q := TQuery.Create(nil);
  Q.Database := DMmain.DBmain;  // <-  tu componente de base de datos
  Q.Close;
  Q.SQL.Text:='select '+cCampo+' from '+cTabla
  Q.ExecQuery;
  Result:=Q.Fields[0].AsVariant;
  Q.Close;  
  FreeAndNil(Q);  
end;

Y para usarlo, por ejemplo, desde un botón, para presentar el dato en un tdatetime:

Código Delphi [-]
procedure TForm1.bt1Click(Sender: TObject);
begin
  if edFecha.Focused then  // <- componente de fecha, por ejemplo
    edFecha.Date := getFechaServidor;
end;

O simplemente para mostrar un mensaje:
Código Delphi [-]
procedure TForm1.bt2Click(Sender: TObject);
begin
  ShowMessage( FormatDateTime('dd.mm.yyyy hh:nn:ss', getFechaServidor) );  
end;

Espero que te sirva.
Responder Con Cita