FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 |
#2
|
||||
|
||||
Cita:
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. |
#3
|
|||
|
|||
Gracias lepe, lo voy a probar y te aviso
saludos |
#4
|
|||
|
|||
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 + ','); 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; 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 |
#5
|
||||
|
||||
Cita:
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. |
#6
|
|||
|
|||
gracias lepe, me podrias mostrar un ejemplo?
saludos |
#7
|
||||
|
||||
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. |
#8
|
|||
|
|||
Lepe, en verdad... muchísimas gracias por tu ayuda.
Saludos |
#9
|
|||
|
|||
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. |
#10
|
|||
|
|||
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; 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 |
#11
|
|||
|
|||
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 |
#12
|
||||
|
||||
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. |
#13
|
|||
|
|||
Hola lepe, fijate que no he podido dar con la solucion, por favor aaayuudaaa!!!
Gracias |
#14
|
||||
|
||||
Cita:
Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#15
|
|||
|
|||
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 |
|
|
|