Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-05-2005
Citlalli Citlalli is offline
No confirmado
 
Registrado: may 2005
Posts: 40
Poder: 0
Citlalli Va por buen camino
problemas con campo timestamp

Hola, mi problema es que tengo un campo string y ahi guardo la hora mediante el código:

Add('INSERT INTO Agenda (');
Add('Hora)');
Add('Values (');
Add(sep + FormatDateTime('h:mm am/pm',Time) + sep + ')');

la constante sep = #39 para poner las comillas

el problema es que una vez insertada la informacion, no puedo ordenar el query de consulta por este campo(me lo ordena mal), asi que le cambie el tipo a timestamp, pero no encuentro como guardarlo, me da errores, si alguien me pudiera ayudar se los voy a agradecer.

saludos
Responder Con Cita
  #2  
Antiguo 26-05-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por Ayuda Delphi
Unit

SysUtils

Category

date/time routines

function TimeStampToDateTime(const TimeStamp: TTimeStamp): TDateTime;

Description

Call TimeStampToDateTime to convert a TTimeStamp value into a TDateTime value. TTimeStamp values represent time as separate date and time values, where the date is the number of calendar days since the start of the current calendar (that is, January 1, 0001 would have a value of 1), and time is the number of milliseconds since midnight. TDateTime values represent time as the number of days (including fractional days) that have elapsed since 12:00 am on December 30, 1899.

Unit

SysUtils

Category

date/time routines

function DateTimeToTimeStamp(DateTime: TDateTime
): TTimeStamp;

Description

Call DateTimeToTimeStamp to convert a TDateTime value into a TTimeStamp value.
Deberías usar TimeStampToDateTime para rescatar valores de la base de datos y mostrarlo en un TdatetimePicker (por ejemplo)

Deberías usar DateTimeToTimeStamp para convertir una fecha y guardarla en la base de datos.

PosData: olvidate de la comilla simple cuando trabajes con TimeStamp.

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 31-05-2005
Citlalli Citlalli is offline
No confirmado
 
Registrado: may 2005
Posts: 40
Poder: 0
Citlalli Va por buen camino
Gracias lepe, lo voy a probar y te aviso

saludos
Responder Con Cita
  #4  
Antiguo 02-06-2005
Citlalli Citlalli is offline
No confirmado
 
Registrado: may 2005
Posts: 40
Poder: 0
Citlalli Va por buen camino
les voy a explicar paso a paso mi problema, hay que tomar en cuenta que utilizo interbase 6 (el que viene con delphi 6) y lo que estoy haciendo es una agenda por lo tanto es super importante el buen manejo de las horas:

1: di de alta en mi base de datos un campo de tipo varchar llamado "Hora".

2: guardo en dicho campo la hora de la siguiente manera:

Código:
 
			  Add('INSERT INTO Agenda (');
			  Add('Hora,');
			  Add('Values (');
			  Add(sep + FormatDateTime('h:mm am/pm',Time) + sep + ',');
3: quiero hacer un ORDER BY por dicho campo y me encuentro conque no lo hace.

4: supuse que por ser de tipo varchar no lo ordena en orden cronologico, asi que le cambio el tipo al campo y se lo pongo timestamp.

5: intenté guardar el dato de la misma forma que arriba pero me manda el error: "error conversion for string"

6: investigue aqui en el foro y algien me dijo que hiciera la incersión por medio de parámetros:

Código:
 
				 ParamByName('Hora').AsTime := Time;
7: efectivamente, funcionó... pero al mostrar el campo en un DBGrid lo muestra asi "01/06/2005 06:20:36 pm" y yo solo quiero que me muestre la hora (06:20 pm)

8: posteriormente quiero poder comparar dicha hora contra otra, esto con el fin de hacer avisos al cliente en cierta hora.

espero haberme explicado bien, en fin, espero sus respuestas muchas gracias

saludos
Responder Con Cita
  #5  
Antiguo 02-06-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por Unidad Controls
TDateTime = type Double;

TDate = type TDateTime;

TTime = type TDateTime;
Como ves el problema es que en delphi todo son Tdatetimes, y es más, te aconsejo que uses siempre formato de Fecha y hora cuando tengas que comparar, sumar y/o restar, ya que delphi tiene una amplia biblioteca de funciones para estos menesteres en DateUtils. Deja que guarde la fecha y hora, así cuando tengas que pedir un listado ordenado por fecha, no tendrás problemas.

Lo único que se me ocurre en este momento es usar el OnGetText del campo para que devuelva solo la parte horaria.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #6  
Antiguo 03-06-2005
Citlalli Citlalli is offline
No confirmado
 
Registrado: may 2005
Posts: 40
Poder: 0
Citlalli Va por buen camino
gracias lepe, me podrias mostrar un ejemplo?


saludos
Responder Con Cita
  #7  
Antiguo 03-06-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Código Delphi [-]
procedure TForm1.Table1HireDateGetText(Sender: TField; var Text: String;
  DisplayText: Boolean);
begin
  Text := FormatDateTime('hh:nn',Table1HireDate.AsDateTime);
end;

El campo se llama HireDate, es de la base de datos DBDemos que incluye delphi.

Haz Doble clic sobre tu tabla, señala el campo de tipo Fecha, y ahora en el inspector de objetos, en los eventos, tienes el GetText.

Cualquier Control que use este dataset para mostrar la hora, mostrará solo la hora y minutos.

En lugar de hacerlo directamente sobre la tabla, igual te conviene hacerlo solo en las consultas (para mostrarlo en el grid).

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 06-06-2005
Citlalli Citlalli is offline
No confirmado
 
Registrado: may 2005
Posts: 40
Poder: 0
Citlalli Va por buen camino
Lepe, en verdad... muchísimas gracias por tu ayuda.


Saludos
Responder Con Cita
  #9  
Antiguo 06-06-2005
ahkimpech ahkimpech is offline
Miembro
 
Registrado: may 2003
Posts: 14
Poder: 0
ahkimpech Va por buen camino
DecodeTime

Verifia con la función DecodeTime; Sirve para extraer la hora (hh:mm:ss) de una variable o campo de tipo TDateTime (Delphi) o TimeStamp (Interbase).
Existe la contraparte EncodeTime. Delphi tiene muchas funciones para el manejo de campos Fecha y hora.
Responder Con Cita
  #10  
Antiguo 07-06-2005
Citlalli Citlalli is offline
No confirmado
 
Registrado: may 2005
Posts: 40
Poder: 0
Citlalli Va por buen camino
Gracias ahkimpech pero esas funciones las conozco muy bien y para este caso no me sirven.

Lepe, oye fijate que me funcionó muy bien lo que me dijiste del GetText, pero ahora tengo otro problema... que problemática verdad jaja, fijate que no encuentro como comparar ahora dicho campo, mira tengo un timer en el que pongo:

Código:
 
procedure TMain.t_agendaTimer(Sender: TObject);
begin
  with DM.qryWork_Agenda_Aux, DM.qryWork_Agenda_Aux.SQL do
	begin
	  Close;
	  Clear;
	  Add('SELECT');
	  Add('Hora');
	  Add('FROM');
	  Add('Agenda');
	  Add('WHERE');
	  Add('Fecha = ' + sep + FormatDateTime('MM/dd/yyyy',Date) + sep);
	  Open;
	  First;
	  while not eof do
		begin
		  if DM.qryWork_Agenda_Aux.FieldByName('Hora').AsDateTime = Date then
			Showmessage(timetostr(time));
		  next;
		end;
	end;
end;
para que cuando el campo hora coincida con la hora del equipo me mande un mensaje.

Estoy insertando la hora en la tabla mediante parámetros como te mencioné antes.

Te explico exactamente que es lo que quiero desarrollar:

una agenda que funciona como un catalogo, el usuario da click en el boton insertar y aparece un cuadro de dialogo que le pide el mensaje y la hora en que quiere el aviso; listo, él sigue trabajando y cuando el timer detecta la hora del aviso, se debe mostrar una ventana con el mensaje que él capturó.

ojala me haya explicado, no soy muy buena describiendo verdad!! muchas gracias

Saludos
Responder Con Cita
  #11  
Antiguo 07-06-2005
Citlalli Citlalli is offline
No confirmado
 
Registrado: may 2005
Posts: 40
Poder: 0
Citlalli Va por buen camino
peeeeerdon, se me olvidaba lo mas importante: mencionarte que mi comparación no sirve, nunca me manda el mensaje.

ahora si, si nuevamente me puedes ayudar te lo voy a agradecer muchisimo, gracias.

saludos
Responder Con Cita
  #12  
Antiguo 07-06-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Deberías poner un showMessage en la linea:

DM.qryWork_Agenda_Aux.FieldByName('Hora').AsDateTime

para ver que te devuelve exactamente, no sé si devuelve HH:mm o bien HH:mm:ss depende de donde hayas puesto el OnGetText (en la tabla principal o en una consulta)

Como la fecha se la pasas por parametro, ese último "if" puedes construirlo con DateUtils, para montar la fecha de aviso en formato Fecha y hora y así hacer las comparaciones con "FechaAviso <= Now". Ten en cuenta que por un milisegundo de diferencia, las fechas y horas no son iguales.

Un saludo y ya me contarás.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #13  
Antiguo 10-06-2005
Citlalli Citlalli is offline
No confirmado
 
Registrado: may 2005
Posts: 40
Poder: 0
Citlalli Va por buen camino
Hola lepe, fijate que no he podido dar con la solucion, por favor aaayuudaaa!!!


Gracias
Responder Con Cita
  #14  
Antiguo 13-06-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por Lepe
Deberías poner un showMessage en la linea:

DM.qryWork_Agenda_Aux.FieldByName('Hora').AsDateTime
Que te sale??? sale la fecha correcta?, es igual a la fecha de hoy??

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #15  
Antiguo 13-06-2005
Citlalli Citlalli is offline
No confirmado
 
Registrado: may 2005
Posts: 40
Poder: 0
Citlalli Va por buen camino
Hola lepe, mira puse los siguientes showmessages y el resultado:


Código:
 
	  showmessage(Datetimetostr(DM.qryWork_Agenda_Aux.FieldByName('Hora').AsDateTime));
	  showmessage(timetostr(DM.qryWork_Agenda_Aux.FieldByName('Hora').AsDateTime));

el primero da un mensaje asi 13/06/2005

el segundo da un mensaje asi 12:00:00 a.m. que por cierto dicha hora no la tengo guardada en la base de datos, no se por que me dan las 12.

gracias lepe por tu ayuda
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 11:48:04.


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
Copyright 1996-2007 Club Delphi