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)
-   -   ¿Como Actualizar TimeStamp? (https://www.clubdelphi.com/foros/showthread.php?t=48009)

JXJ 13-09-2007 06:12:47

¿Como Actualizar TimeStamp?
 
Actualizar TimeStamp
Hola.
no se como hacer para actualizar un campo TimeStamp de firebird,
Tengo la situación asi. tengo varios valores, constantes,
cada valor seran minutos o seran horas.
asi.

Código Delphi [-]
const
1:integer;//si el valor es 1 entonces, Actualizar el TimeStamp en 5 min
2:integer;//si el valor es 2 entonces, Actualizar el TimeStamp en 10 min
3:integer;//si el valor es 3 entonces, Actualizar el TimeStamp en 15 min
//y asi hasta llegar a 
10:integer;//si el valor es 10 entonces, Actualizar el TimeStamp en 45 min
11:integer;//si el valor es 11 entonces, Actualizar el TimeStamp en 60 min
15:integer;//si el valor es 15 entonces, Actualizar el TimeStamp en 2 Horas 
//el valor del timestamp va a ser cualquier hora. que se tiene
//que actualizar despues de verificar su valor,
//se actualiza el valor del timestamp, al dia y la hora actual, (Current_timeStamp) mas el valor de la constante ya sea 1 ,2 ,3 ....10,11,15. 
este es mi seudocodigo
 
if 1 then tiemestamp ACTUALIZADO_EN_5_MIN
  else
if 2  then tiemestamp ACTUALIZADO_EN_10_MIN

ya aqui no se como leer el valor del tiempo actual, y determinar si el valor del timestamp se actualiza solo la parte de los minutos o la de las horas y como hacer esa actualización..
Ayuda de favor,, no se como
Gracias

afxe 13-09-2007 11:40:52

Suma los valores a la fecha:
 
Bien... Crearemos una función de manera que se le pueda sumar el valor de tiempo que quieras a una variable de tipo TDateTime:

Código:

function ActualizaTiempo(ElTiempo:TDateTime; hh, mm, ss: word): TDateTime;
begin
  try
    Result := ElTiempo + EncodeTime(hh, mm, ss);
  except
    Result := ElTiempo;
  end;
end;

Ahora suponte que tienes tu campo TimeStamp que se llama MiHora, pues para sumarle 5 minutos sería;

Código:

  MiQuery.Edit;
  MiQueryMIHORA.AsDateTime := ActualizaTiempo(MiQueryMIHORA.AsDateTime, 0, 5, 0);
  MiQuery.Post;

Lo he hecho de memoria, sin probar, pero si tiene alguna incidencia estoy seguro que sabrás solventarla y perdonarla.

Saludos

JXJ 15-09-2007 03:53:08

afxe
me sirvio mucho la funcion, gracias.

usando los componentes interbase de corelab
me quedo algo asi.

la funcion solo faltaba agregar un campo mas
y en lugar de post use insert

Código Delphi [-]
IBCQuery0.Edit;
IBCQuery0.Fields[2].AsDateTime := ActualizaTiempo(IBCQuery0.Fields[2].AsDateTime, 0, 5, 0, 0);
IBCQuery0.Insert;
Código Delphi [-]

function ActualizaTiempo(ElTiempo:TDateTime; hh, mm, ss, ms: word): TDateTime;
begin
  try
    Result := ElTiempo + EncodeTime(hh, mm, ss, ms);
  except
    Result := ElTiempo;
  end;
end;

Donde se me dificulto mucho es en como aplicar la función de
actualizarfecha
yo la puse dentro de un boton , ejecutando un query. con el IBCQuery
con el nombre de IBCQuery0
Código Delphi [-]

procedure TForm1.Button3Click(Sender: TObject);
var SQL, SQLUTime, Condicion:String;
    i , ID, TipoIncremento: integer;
    HoraACambiar: TDateTime;
begin
//MiHora :=  ActualizaTiempo(Time)
ID := 0;
Condicion := Edit1.Text;//es una cadena de texto para el sql script
SQL := 'select * from tabla_tiempo where Field01 = ';
//Ejecutamos el query para obtener todo lo que corresponda a una condicion dada.
 try
    IBCQuery0.SQL.Clear;
    IBCQuery0.SQL.Text := SQL + Condicion;
    IBCQuery0.Execute;
finally

end;
//  el resultado lo procesamos, enseguida. para pasar el valor de la variable timestamp
  try
    for i := 0 to IBCQuery0.RecordCount do
    begin
            ID := (IBCQuery0.Fields[0].AsInteger);
TipoIncremento := (IBCQuery0.Fields[1].AsInteger);
       HoraACambiar  := (IBCQuery0.Fields[2].AsDateTime);
   IBCQuery0.Next;
    end;

  finally
//
  end;
//Ejecutamos un query para actualizar el campo timestamp del canal al que correspodne el ide
SQLUTime := 'update tabla_tiempo set MiHora = Current_timeStamp where Field01 =  ';
try  //Usa params by name
   IBCQuery0.SQL.Clear;  //cambia por add que da error de where no se bien por que
   IBCQuery0.SQL.Text := SQLUTime + IntToStr(ID);
   IBCQuery0.Execute;
finally

end;
//hacemos u query para obtener de nuevo todos los campos
//del timestamp tomamos ese valor y  lo modificamos si tiene que ser por minutos o por horas
//--------------
SQL := 'select * from tabla_tiempo where Field01 = ';
 //ejecutamos el query para obtener todo loq eu corresponda a una condicion dada.
 try
    IBCQuery0.SQL.Clear;
    IBCQuery0.SQL.Text := SQL + IntToStr(ID);
    IBCQuery0.Execute;
finally

end;
//creo que ya quedo :D:D:D:D
 try
IBCQuery0.Edit;
IBCQuery0.Fields[2].AsDateTime := ActualizaTiempo(IBCQuery0.Fields[2].AsDateTime, 0, 5, 0, 0);
IBCQuery0.Insert;
  finally
//
  end;
end;

si saben de alguna forma mejor, me avisan por que esta es la unica que
logre que funcionara,
No me parece bueno que use dos selec * from


La franja horaria es GMT +2. Ahora son las 05:21:26.

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