Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ejecutar cierto codigo una vez seleccionada la fecha en DateTimePicker (https://www.clubdelphi.com/foros/showthread.php?t=63713)

Lizette 27-02-2009 07:29:43

Ejecutar cierto codigo una vez seleccionada la fecha en DateTimePicker
 
Hola, lo que pretendo hacer, es que una vez que seleccione la fecha y que ésta se visualice en el DateTimePicker, me revise una tabla de la base de datos para verificar si coincide algun registro con la fecha elegida, si coincide me despliega los datos en un dbgrid, de lo contrario me dice k no existen registros con esa fecha.

Pero no sé si exista algun evento del DateTimePicker que se active cuando selecciono la fecha.. :confused:

Gracias y saludos

pjmedina 27-02-2009 09:30:02

Utiliza el evento "on change"

Neftali [Germán.Estévez] 27-02-2009 09:32:34

¿Has probado con son simples?
Es decir OnClick/OnChange.

No lo tengo delente, pero lo lógico es que cuando seleccionas una fecha, salte el segundo. El primero tal vez no si lo haces con teclado, pero es cuestión de probar.

Caro 27-02-2009 16:31:25

Hola, Neftali lo unico malo con el OnClick es que, no se da cuando se hace click sobre el calendarío, por lo que sería mejor usar el OnChange, pero en este caso ocurren dos veces el OnChange al cambiarse la fecha desde el calendarío, supongo cuando presionas en el calendarío y cuando se cambia la fecha en el edit del dateTimePicker y algo parecido sería cuando se cambia directamente la fecha, por lo que tendría que controlar de hacer la busqueda solo una vez.

Saluditos

Lizette 27-02-2009 18:38:56

Exactamente Caro, utilice el OnChange, pero me repite 2 veces la búsqueda, por lo tanto me salen 2 veces el mismo mensaje de k no lo encontro.. Otro problema que detecte, esk si me desplazo a otro mes, como que se cicla, y me aparece el monton de mensajes de k no se encontro el registro, pk incrementa solo el mes, el año, no sé pk pase eso.. :eek:

ContraVeneno 27-02-2009 19:15:23

lo que pasa es que cuando te mueves de mes o de año, se ejecuta el evento onchange y hace todo lo que tengas ahí. Por eso no es recomendable hacer validaciones en este evento. Es muy recomendable para verificar cosas, pero no para validar.

Es decir, el evento onchange es muy bueno para verificar valores de otro datetimepicker, por ejemplo, cuando tienes que seleccionar fecha inicial y fecha final, en el onchange puedes cambiar el mindate de la fecha final para que no sea menor a la fecha inicial. Ahí si es recomendable el evento onchange.

Pero para validar, como supongo lo estas haciendo tu, es mejor utilizar otro evento. Tal vez en el botón "procesar" o "buscar", o al finalizar el proceso de captura.

aunque también simplemente podrías no mostrar el mensaje de "no se encuentra". A final de cuentas el usuario va a ver la tabla vacía, no es necesario el mensaje. Digo, si ya ve la tabla vacía, asume que no hay nada.

rgstuamigo 27-02-2009 20:42:06

Quisas seria mejor utilizar el evento OnCloseUp ya que el componente
TDateTimePicker no cuenta con un evento OnSelect como un TComboBox.
Segun veo seria el mas adecuado para tu caso.;).
Saludos.:)

roman 27-02-2009 21:27:13

Lo malo con el CloseUp es que el usuario puede cambiar la fecha en el control sin abrir el calendario. Por otra parte, como ya han observado, el evento OnChange se produce dos veces cuando se selecciona la fecha en el calendario, pero, además, el usuario puede desplazarse de fecha con las teclas de flecha estando abierto el calendario, y cada cambio generaría la consulta a la base, aun cuando el usuario cancele y la fecha finalmente no cambie.

Creo que lo ideal sería utilizar otro control mejor hecho. Probé con el DateEdit de la biblioteca RX y funciona mejor pero éste genera dos OnChange si el cambio de fecha se hace desde el edit en lugar del calendario. Quizá en la biblioteca Jedi lo hayan corregido.

Por lo pronto, parece que no queda de otra que controlar uno mismo el cambio de fecha llevando registro de la última fecha seleccionada y generando la consulta sólo si realmente ha cambiado. Pero también hay que controlar el cambio que menciono con las teclas de flecha, pues lo detectaríamos como cambio antes de saber si el usuario realmente selecciona esa fecha.

Este evento OnChange, de plano hace caso omiso de cualquier cambio realizado mientras el calendario está abierto:

Código Delphi [-]
procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
  if not DateTimePicker1.DroppedDown then
  begin
    {
      Aquí la consulta a la base
    }

    LastDate := DateTimePicker1.DateTime;
  end;
end;

Sólo funciona si el calendario está cerrado. Para cuando esté abierto entonces usamos el evento OnCloseUp:

Código Delphi [-]
procedure TForm1.DateTimePicker1CloseUp(Sender: TObject);
begin
  if DateTimePicker1.DateTime <> LastDate then
  begin
    {
      Aquí la consulta a la base
    }

    LastDate := DateTimePicker1.DateTime;
  end;
end;

LastDate sería una variable de tipo TDate declarada en el formulario.

// Saludos

Lizette 27-02-2009 21:58:14

Gracias Roman ;)


La franja horaria es GMT +2. Ahora son las 18:08:50.

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