Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-03-2010
jandres jandres is offline
Miembro
 
Registrado: may 2006
Posts: 47
Poder: 0
jandres Va por buen camino
Filtrar por fecha dinamicamente sql y delphi7

Saludos tengo un sistema de personal donde me gustaria filtrar por fecha una base de datos utilizo sql y delphi 7 me gustaria poder hacer un filtro dinamico que pueda seleccionar en un datetimepicker la fecha y que me filtre la tabla por esa feha pero es que no se como hacer lo en codigo solo tengo la idea

si pueden ayudar me

Gracias una vez mas.
Responder Con Cita
  #2  
Antiguo 23-03-2010
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola...

Podrías hacer algo como esto:

Código Delphi [-]
procedure TMyForm.DateSearch(ADate: TDate; AQuery: TQuery);
begin
  AQuery.Close;
  AQuery.SQL.Text := 'select * from Tabla where Fecha = :Fecha';
  AQuery.ParamByName('Fecha').AsDate := ADate;
  AQuery.Open
end;

Este método recibe dos parámetros, la fecha que quieres usar para filtrar tu tabla y un objeto TQuery que es sobre el que quieres hacer el filtro...

Para llamarlo desde una forma que tenga un TDateTimePicke, un TDBGrid, un TQuery, un TDataSource y un TButton haces esto:

Código Delphi [-]
procedure TmyForm.Button1Click(Sender: TObject);
begin
  DateSearch(DateTimePicker1.Date, Query1)
end;


Saludos...
Responder Con Cita
  #3  
Antiguo 23-03-2010
Avatar de afunez2007
afunez2007 afunez2007 is offline
Miembro
 
Registrado: oct 2007
Ubicación: La Ceiba, Honduras
Posts: 170
Poder: 17
afunez2007 Va por buen camino
Lightbulb

Das muy pocos datos, no dices si estas trabajando con alguna tabla en un grid o con una quer??

Te puedo dar un par de consejos:

Lo puedes hacer con un boton despues de seleccionar la fecha o en el evento OnCloseUp del datetime picker y podria ser algo asi como:

Si lo haces con un query:
Código Delphi [-]
Query1.Active:=False;
Query1.SQL.Text:'SELECT *FROM TUTABLA WHERE 
FECHA='+QuotedStr(DateToStr(DateTimePicker1.Date));
Query1.Active:=True;

Si lo haces con un TTable:
Código Delphi [-]
Table1.Active:=False;
Table1.Filtered:=False;
Table1.Filter:='FECHA='+QuotedStr(DateToStr(DateTimePicker1.Date));
Table1.Filtered:=True;
Table1.Active:=True;

Espero te sirvan estas ideas

Saludos
__________________
Si robas, roba un beso, si mientes que sea por amor y si engañas que sea a la muerte!!
Responder Con Cita
  #4  
Antiguo 04-12-2010
userdelphi userdelphi is offline
Miembro
NULL
 
Registrado: dic 2010
Posts: 15
Poder: 0
userdelphi Va por buen camino
quiero filtrar una fecha en un dateTimePicker1

hola,he leido muchos foros aca adentro y no logro encontrar mi error, necesito ayuda, primero, uso BD access el campo "fecha" es de fecha/hora, utilizo AdoQuery en delphi, un dateTimePicker, un dbgrid y para indicar el filtro seria eligiendo desde el dateTimePicker y luego presionar un button.

intente cambiar formato, ya q en mi BD se almacena dd/mm/aaaa y en el dbgrid se ve mm/dd/aaaa, eso me funciono, ya que el valor lo hacia copiar en un edit, tamb intente crear una variable vfecha y darle el valor del dateTimePicker convirtiendolo, pero se me rompe en la condicion q le doy para el sql.
he leido de hacer parametros, eso nunca lo vi en clases, me explicarian como se asigna y si se debe declarar en la seccion VAR???

aca les mando una parte del codigo.... no se asusten ya que lo que he encontrado lo ponia ahi, y comentaba y descomentaba.

si alguien me ayuda a ordenar eso se lo agradezco,
de ser asi, aun denme el fragmento de codigo y si debo declarar algo en la seccion var o donde , gracias

esto es: (hoy un desorden jaja)

procedure TFormListadoVentas.ButtonfiltrofechaClick(Sender: TObject);
var
vFecha:String;
begin
//ShortDateFormat:= 'd/m/yyyy';
vFecha:=FormatDateTime('dd/mm/yyyy',dateTimePicker1.DateTime);//Componente Month Calendar
//el formato lo puedes cambiar a dd/mm/yyyy o mm/dd/yyyy
editfiltrofecha.Text := vfecha;

formlistadoVentas.ADOQueryFiltro.Active := false;
// Utilizamos quotedString para ponerle comillas simple a la cadena (en el caso que sea de tipo string )
FormListadoVentas.AdoQueryFiltro.SQL.Text := 'SELECT * FROM tVentas WHERE Fecha ='+quotedstr(xfecha);
ParamByName('xFecha').AsDate := DateTimePicker1.Date;


formlistadoVentas.ADOQueryFiltro.Active := true;

FormListadoVentas.dbgridVentas.DataSource := datasourceFiltro;
FormListadoVentas.DBNavigator1.DataSource := datasourceFiltro;
end;


se los agradezco, como veran saque mucho de aca, y aun los comentarios de quien posteo estan , help me, please

gracias ,
Responder Con Cita
  #5  
Antiguo 24-11-2011
Vales08 Vales08 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 133
Poder: 14
Vales08 Va por buen camino
Cita:
Empezado por maeyanes Ver Mensaje
Hola...

Podrías hacer algo como esto:

Código Delphi [-]
procedure TMyForm.DateSearch(ADate: TDate; AQuery: TQuery);
begin
  AQuery.Close;
  AQuery.SQL.Text := 'select * from Tabla where Fecha = :Fecha';
  AQuery.ParamByName('Fecha').AsDate := ADate;
  AQuery.Open
end;

Este método recibe dos parámetros, la fecha que quieres usar para filtrar tu tabla y un objeto TQuery que es sobre el que quieres hacer el filtro...

Para llamarlo desde una forma que tenga un TDateTimePicke, un TDBGrid, un TQuery, un TDataSource y un TButton haces esto:

Código Delphi [-]
procedure TmyForm.Button1Click(Sender: TObject);
begin
  DateSearch(DateTimePicker1.Date, Query1)
end;


Saludos...


Muy buen dia a todos, estuve buscando sobre como filtrar un dbgrid con la fecha seleccionada de un datetimepicker y encontre este hilo..
Lo que me gustaria saber es donde pones este código:

Código Delphi [-]
procedure TMyForm.DateSearch(ADate: TDate; AQuery: TQuery);
begin
  AQuery.Close;
  AQuery.SQL.Text := 'select * from Tabla where Fecha = :Fecha';
  AQuery.ParamByName('Fecha').AsDate := ADate;
  AQuery.Open
end;

Desde ya muchas gracias..
Saludos!!
Responder Con Cita
  #6  
Antiguo 24-11-2011
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
Cita:
Empezado por Vales08 Ver Mensaje
Lo que me gustaria saber es donde pones este código
Hola.

Bueno depende del efecto que busques, por ejemplo:

Si deseas que se vaya filtrando a medida que se producen cambios en el TDateTimePicker:
Código Delphi [-]
procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
  DateSearch(Query, DateTimePicker1.Date);
end;

Si deseas que lo haga al salir del TDateTimePicker:
Código Delphi [-]
procedure TForm1.DateTimePicker1Exit(Sender: TObject);
begin
  DateSearch(Query, DateTimePicker1.Date);
end;

O si deseas que el filtrado se decida manualmente:
Código Delphi [-]
procedure TForm1.btnFiltrarClick(Sender: TObject);
begin
  DateSearch(Query, DateTimePicker1.Date);
end;
También podría ser filtrado en el evento OnCloseUp del TDateTimePicker, ...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 24-11-2011 a las 19:07:07.
Responder Con Cita
  #7  
Antiguo 24-11-2011
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola...

ecfisa, yo creo que más bien se refiere a donde coloca el código del método y no desde donde hace la llamada al método...

En dado caso, sería algo así:

Código Delphi [-]
// Declaración del tipo TMyForm:
type
  TMyForm = class(TForm)
    // Componentes agregados al formulario y eventos del mismo...
  private
    // Como solo se va a usar en este formulario lo declaramos en la sección private
    procedure DateSearch(ADate: TDate; AQuery: TQuery);
  end;

implementation

procedure TMyForm.DateSearch(ADate: TDate; AQuery: TQuery);
begin
  AQuery.Close;
  AQuery.SQL.Text := 'select * from Tabla where Fecha = :Fecha';
  AQuery.ParamByName('Fecha').AsDate := ADate;
  AQuery.Open
end;

end.


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #8  
Antiguo 24-11-2011
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
Cita:
Empezado por maeyanes Ver Mensaje
yo creo que más bien se refiere a donde coloca el código del método y no desde donde hace la llamada al método...
No había pensado en eso, pero es muy posible...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 24-11-2011
Vales08 Vales08 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 133
Poder: 14
Vales08 Va por buen camino
Muchas gracias por sus respuestas... En realidad tiene razon maeyanes pero igual no estaba de mas la explicacin de ecfisa...
Yo quería saber donde iba el código del método, porque no soy muy ducha en esto y nunca había utilizado un método..
Pero ya me sacaron la duda..

Muchas gracias..
Responder Con Cita
  #10  
Antiguo 25-11-2011
Vales08 Vales08 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 133
Poder: 14
Vales08 Va por buen camino
Buen dia..
Eh estado aplicando los códigos como me han dicho

Código Delphi [-]
  private
    { Private declarations }
    procedure DateSearch(ADate: TDate; AQuery: TIBQuery);
  public
    { Public declarations }
  end;


Código Delphi [-]
procedure TAgenda_de_turnos.DateSearch(ADate: TDate; AQuery: TIBQuery);
begin
  DM.Q_agen_tur.Close;
  DM.Q_agen_tur.SQL.Add('select * from AGENDAS_TURNOS where FECHA = :fecha');
  DM.Q_agen_tur.ParamByName('fecha').AsDate := Date;
  DM.Q_agen_tur.Open;
end;


Código Delphi [-]
procedure TAgenda_de_turnos.Buscar_fechaClick(Sender: TObject);
begin
  DateSearch(fecha_turno.Date, DM.Q_agen_tur)
end;


Pero me salta el siguiente error, cuando presiono el boton (donde llamo al metodo DateSearch)
Cita:
---------------------------
Debugger Exception Notification
---------------------------
Project Project_tesis.exe raised exception class EIBInterBaseError with message 'Dynamic SQL Error
SQL error code = -104
Token unknown - line 2, char 1
select'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

Necesito saber porque salta ese error, que estoy haciendo mal... Muchas gracias
Responder Con Cita
  #11  
Antiguo 25-11-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.009
Poder: 20
oscarac Va por buen camino
estas seguro (a) que el parametro (el valor) se llama Date?
no deberia ser ADate??
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #12  
Antiguo 25-11-2011
Vales08 Vales08 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 133
Poder: 14
Vales08 Va por buen camino
Me fije bien y en esta codigo, solamente me toma Date..

Código Delphi [-]
procedure TAgenda_de_turnos.Buscar_fechaClick(Sender: TObject);
begin
  DateSearch(fecha_turno.Date, DM.Q_agen_tur);
end;

Pero a este codigo si cambie Date por ADate.. Yo le habia puesto Date, porque a ADate no me lo tomaba..

Código Delphi [-]
procedure TAgenda_de_turnos.DateSearch(ADate: TDate; AQuery: TIBQuery);
begin
  DM.Q_agen_tur.Close;
  DM.Q_agen_tur.SQL.Add('select * from AGENDAS_TURNOS where FECHA = :fecha');
  DM.Q_agen_tur.ParamByName('fecha').AsDate := ADate;  //aqui modifique
  DM.Q_agen_tur.Open;
end;


Pero el error me sigue saltando de igual manera y en el mismo lugar..
Responder Con Cita
  #13  
Antiguo 25-11-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.009
Poder: 20
oscarac Va por buen camino
antes de esta linea
Código Delphi [-]
DM.Q_agen_tur.SQL.Add('select * from AGENDAS_TURNOS where FECHA = :fecha');

agregale por siacaso
Código Delphi [-]
 
DM.Q_agen_tur.SQL.clear;
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #14  
Antiguo 25-11-2011
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola...

El error te está indicando que el token select es desconocido, esto te sucede por que estás usando el método Add cada vez que usas el método, entonces lo que te hace es agregar una línea más. Esto es:

Código:
1era vez que usas el método DateSearch:
DM.Q_agen_tur.SQL.Strings[0] := 'select * from AGENDAS_TURNOS where FECHA = :fecha'

2da vez que usas el método DateSearch:
DM.Q_agen_tur.SQL.Strings[0] := 'select * from AGENDAS_TURNOS where FECHA = :fecha'
DM.Q_agen_tur.SQL.Strings[1] := 'select * from AGENDAS_TURNOS where FECHA = :fecha'
Esto genera una consulta SQL de este tipo:

Código SQL [-]
select * from AGENDAS_TURNOS where FECHA = :fecha
select * from AGENDAS_TURNOS where FECHA = :fecha

Si te fijas, el código origina que yo puse usa la propiedad Text:

Código Delphi [-]
AQuery.SQL.Text := 'select * from Tabla where Fecha = :Fecha';

Otro detalle que noto es que haces uso del componente Q_agen_tur directamente en el código del método, lo cual no debería ser ya que para eso está el parámetro AQuery.



Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #15  
Antiguo 25-11-2011
Vales08 Vales08 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 133
Poder: 14
Vales08 Va por buen camino
Claro me falto esa linea de codigo, ahora no me salta mas el error..
El problema ahora es que no me busca, me muestra la grilla vacia...

Tiene algo que ver la forma en que yo cargue las fechas..???
Porque yo a las fechas no las cargaba con el datetimepicker, directamente las cargada desde un dbedit, conectado al campo FECHA de la tabla AGENDA_TURNOS..
El campo FECHA, tiene la propiedad EditMask a la cual yo le puse Date, para que tome el formato '__/__/__'.

No se la verdad porque no me busca..
Responder Con Cita
  #16  
Antiguo 25-11-2011
Vales08 Vales08 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 133
Poder: 14
Vales08 Va por buen camino
Ahh ok, entonces interprete mal el codigo, ahora veo si lo soluciono....
Yo utilice el Add tambien porque en las consultas siempre utilice esa forma, pero voy a hacer como vos me decis maeyanes asi corroboro que este alli el problema..

Muchas gracias por sus respuestas..
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Filtrar Ztable por fecha. forgiveness Conexión con bases de datos 4 03-02-2010 17:33:57
Filtrar consulta por fecha y hora Alejandrina SQL 4 16-06-2008 09:18:10
Filtrar por dos Fecha???? Zakio14 Firebird e Interbase 6 23-02-2008 04:00:04
como filtrar por fecha anubis Firebird e Interbase 5 14-02-2008 11:52:43
Filtrar fecha al vuelo JorgeBec Varios 1 04-11-2003 20:33:29


La franja horaria es GMT +2. Ahora son las 03:34:32.


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