Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-10-2013
jocaro jocaro is offline
Miembro
 
Registrado: sep 2011
Posts: 104
Poder: 13
jocaro Va por buen camino
Edicion fecha que se guarda en una tabla

Hola.

Necesito orientación sobre la que considerais mejor forma de editar un campo fecha.

Mi intención es que en la edición.
  • Se pueda controlar que se introduce sólo información de tipo fecha.
  • Se presente una máscara para las barras de separación.
  • La fecha se pueda presentar en formato dd/mm/aaaa y guardar en la tabla en sentido contrario (aaaa/mm/dd).
  • Posibilidad de seleccionar la fecha desde un componente de calendario.
Como siempre, gracias de antemano por vuestra atención.


Un saludo.
Responder Con Cita
  #2  
Antiguo 25-10-2013
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Puede echarle un vistazo al componente TDateTimePicker, te pone una máscara con las barras, solo te deja introducir fechas válidas y puedes seleccionar la fecha en un calendario, a la hora de guardar la fecha con el formato que dices, creo que había una función que lo hacía pero ahora no lo recuerdo, de todas formas siempres puedes hacer lo siguiente:

Código Delphi [-]
TxtFecha.Text:=TxtFecha.Text[7]+TxtFecha.Text[8]+TxtFecha.Text[9]+TxtFecha.Text[10]+TxtFecha.Text[4]+TxtFecha.Text[5]+TxtFecha.Text[6]+TxtFecha.Text[1]+TxtFecha.Text[2]+TxtFecha.Text[3];

Saludos.
__________________
Confórmate con lo que tienes pero anhela lo que te falta.
Responder Con Cita
  #3  
Antiguo 25-10-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por jocaro Ver Mensaje
La fecha se pueda presentar en formato dd/mm/aaaa y guardar en la tabla en sentido contrario (aaaa/mm/dd).
¿Para qué quieres guardarla así?
Responder Con Cita
  #4  
Antiguo 25-10-2013
jocaro jocaro is offline
Miembro
 
Registrado: sep 2011
Posts: 104
Poder: 13
jocaro Va por buen camino
Cita:
Puede echarle un vistazo al componente TDateTimePicker, te pone una máscara con las barras, solo te deja introducir fechas válidas y puedes seleccionar la fecha en un calendario...
Muchas gracias ElDioni por tu ayuda. Creo que es justo lo que buscaba.

Cita:
¿Para qué quieres guardarla así?
Me he planteado la posibilidad de guardar la fecha en la tabla, como un string o un número para después utilizarlo en comparaciones, ordenaciones, etc sin usar funciones de fecha.
Responder Con Cita
  #5  
Antiguo 25-10-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola jocaro.

No sé que RDBMS estas usando, pero creo que existen soluciones mas sólidas (y simples) desde la misma base de datos.

Ahora respondiendo a tu pregunta, igual que ElDioni, considero que el TDateTimePicker da solución a los puntos primero, segundo y cuarto de tu consulta.

En cuanto al tercer punto, una opción es usar los eventos OnGetText y OnSetText del campo en cuestión y que también podes asignar en tiempo de diseño creando el campo persistente, ahorrándote así la asignación por código:
Código Delphi [-]
...
procedure TForm1.FormCreate(Sender: TObject);
begin
  Campo.ReadOnly := True;
  DataSet.FieldByName('CAMPO').OnGetText := CampoGetText;
  DataSet.FieldByName('CAMPO').OnSetText := CampoSetText;
end;

procedure TForm1.DateTimePicker1Change(Sender: TObject);
var
  f : string;
begin
  f := DateToStr(DateTimePicker1.Date);
  f := Copy(f, 7, 4) + '/' + Copy(f, 4, 2) + '/' + Copy(f, 1, 2);
  with DataSet do
  begin
    FieldByName('CAMPO').ReadOnly := False;
    Edit;
    FieldByName('CAMPO').AsString := f;
    FieldByName('CAMPO').ReadOnly := True;
  end;
end;

procedure TForm1.CampoGetText(Sender: TField; var Text: string; DisplayText: Boolean);
var
  f: string;
begin
  f := Sender.AsString;
  if f > '' then
    Text := Copy(f, 9, 2) + '/' + Copy(f, 6, 2) + '/' + Copy(f, 1, 4);
end;

procedure TForm1.CampoSetText(Sender: TField; const Text: string);
var
  f: string;
begin
  f := Text;
  if f > '' then
   Sender.AsString := Copy(f, 7, 4) + '/' + Copy(f, 4, 2)+ '/'+ Copy(f, 1, 2);
end;
...

procedure TForm1.FormDestroy(Sender: TObject);
begin
  DataSet.FieldByName('CAMPO').OnGetText := nil;
  DataSet.FieldByName('CAMPO').OnSetText := nil;
end;
De ese modo, mantendrá invertida la fecha en la tabla, pero la mostrará normal en todos los controles de datos sin más.

Notarás que por protección, el campo llamado "CAMPO" (así soy de ocurrente ), se mantiene en la condición ReadOnly y solo sale de ella por un momento en el evento OnChange del TDateTimePicker, ya que no existe implementado ningún mecanismo de validación sobre la fecha ingresada en otros controles.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 25-10-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por jocaro Ver Mensaje
Me he planteado la posibilidad de guardar la fecha en la tabla, como un string o un número para después utilizarlo en comparaciones, ordenaciones, etc sin usar funciones de fecha.
No necesitas guardarla en string para eso, ya que la fecha en la mayoría de BDs son números, así que puedes comparar, ordenar, sumar, restar, etc. sin tener que hace nada especial.
Responder Con Cita
  #7  
Antiguo 28-10-2013
jocaro jocaro is offline
Miembro
 
Registrado: sep 2011
Posts: 104
Poder: 13
jocaro Va por buen camino
Hola ecfisa

Gracias por tu ayuda.

He conseguido el resultado que quería, además de una forma mas simple; atendiendo tu indicación he mirado el tema de la gestión de fecha en la propia base de datos (la guarda directamente en formato año-mes-dia hora-minuto)

Un saludo
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Edición campo Fecha-hora fjcg02 Conexión con bases de datos 3 16-05-2008 14:40:08
Esto guarda imagene en tu tabla paradox HW-AND-SW Varios 12 02-11-2007 00:26:40
Problema con edicion de tabla JULIPO MySQL 1 21-08-2007 17:08:30
Guarda un menu en una tabla pborges36 Varios 0 30-05-2005 21:16:14
no guarda los datos en la tabla Giniromero Conexión con bases de datos 10 01-06-2004 16:13:31


La franja horaria es GMT +2. Ahora son las 17:25:34.


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