Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Al quitar un filtrado a la tabla el Ggrid se queda vacio. (https://www.clubdelphi.com/foros/showthread.php?t=95731)

feliz-58 20-06-2022 12:41:33

Al quitar un filtrado a la tabla el Ggrid se queda vacio.
 
Saludos, les comento algo curioso que me pasa, tengo un DBGrid enlazado a un Query con la siguiente consulta:

Código Delphi [-]
with QRecibidas do
  Begin
  Close;
  SQL.Clear;
  SQL.Text:='SELECT CodOrden, Fecha, Hora, Estado, Nombre, Entrega_Estimada, Usuario, Nota, '+
            'Total, Pagado FROM Ordenes WHERE Estado = ''Recibido''';
  Open;
  End;

Y luego hago el siguiente filtrado:
Código Delphi [-]
if EBuscar.Text <> EmptyStr then
  begin
    QRecibidas.Filtered:= False;
    QRecibidas.Filter  := 'Nombre like '+QuotedStr('%'+ EBuscar.Text + '%');
    QRecibidas.Filtered:= True;
    end
    Else
    QRecibidas.Filtered:= False;
  end;

Resulta que cuando escribo algun nombre que si esta en la tabla, y borro el contenido del Edit todo funciona bien, pero cuando escribo alguna letra o frase de la cual no existe en la tabla y la tabla se queda vacia, y elimino el contenido del edit, el dbgrid se queda vacio a menos que escriba otra cosa(hasta un espacio vacio) que si este en algun registro de la tabla y vuelva a borrar entonces aparecen todos los registros nuevamente.
:confused:

Alguien tiene alguna idea?

oscarac 20-06-2022 15:59:38

particularmente no uso filtros porque no conozco la cantidad de registros que tendra la tabla
lo que hago es en el query aplicar la busqueda

en el evento onchange del edit genero la cadena del query y lo voy abriendo mientras se escribe, como una busqueda secuencial

Neftali [Germán.Estévez] 21-06-2022 11:22:29

Cita:

Empezado por feliz-58 (Mensaje 547218)
...y elimino el contenido del edit, el dbgrid se queda vacio a menos que escriba otra cosa(hasta un espacio vacio)

¿Estás seguro de que en ese caso no está ejecutndo una sentencia incorrecta?
No parece que el código que has puesto tenga nada "raro".

feliz-58 21-06-2022 16:41:53

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 547237)
¿Estás seguro de que en ese caso no está ejecutndo una sentencia incorrecta?
No parece que el código que has puesto tenga nada "raro".

Lo he revisado y probado de diferentes formas, incluso intente al final cuando se quita la tabla del modo filtrado, cerrandola y abriendola de nuevo y no lo aparecen los registros aun. Es super extraño, sera cosas del IDE? tengo 10.4.

Esta mañana probé esto:
Código SQL [-]
SQL.Text:='SELECT CodOrden, Fecha, Hora, Estado, Nombre, Entrega_Estimada, Usuario, Nota, '+
                'Total, Pagado FROM Ordenes WHERE Nombre LIKE :Busq';
Parameters.ParamByName('Busq').Value := QuotedStr('%'+EBuscar.Text+'%');

y de esta forma hace lo mismo, al borrar todo la tabla se queda vacia.
Obviamente lo coloqué en el Onchange del edit....

feliz-58 21-06-2022 17:10:47

Cita:

Empezado por feliz-58 (Mensaje 547240)
Lo he revisado y probado de diferentes formas, incluso intente al final cuando se quita la tabla del modo filtrado, cerrandola y abriendola de nuevo y no lo aparecen los registros aun. Es super extraño, sera cosas del IDE? tengo 10.4.

Esta mañana probé esto:
Código SQL [-]
SQL.Text:='SELECT CodOrden, Fecha, Hora, Estado, Nombre, Entrega_Estimada, Usuario, Nota, '+
                'Total, Pagado FROM Ordenes WHERE Nombre LIKE :Busq';
Parameters.ParamByName('Busq').Value := QuotedStr('%'+EBuscar.Text+'%');

y de esta forma hace lo mismo, al borrar todo la tabla se queda vacia.
Obviamente lo coloqué en el Onchange del edit....

A fin de cuentas, eliminé los componentes en cuestion, los volvi a colocar, y en la consulta utilice esta:
Código Delphi [-]
SQL.Text:='SELECT CodOrden, Fecha, Hora, Estado, Nombre, Entrega_Estimada, Usuario, Nota, '+
              'Total, Pagado FROM Ordenes WHERE Nombre LIKE ' +quotedstr('%' + EBuscar.Text + '%');

y en el else, utilice esta:
Código Delphi [-]
'SELECT CodOrden, Fecha, Hora, Estado, Nombre, Entrega_Estimada, Usuario, Nota, '+
            'Total, Pagado FROM Ordenes WHERE Estado = ''Recibido''';

Que es la consulta original, y resolvió todo.
Cosas extrañas de la vida :o

movorack 21-06-2022 19:57:30

Aunque ya nos dijiste que encontraste una solución te comento lo siguiente para que no quede como una "cosa[s] extraña[s] de la vida"

Por lo que cuentas y muestras, yo pienso que el inconveniente que tienes es por la línea donde validas que el edit tenga algo de texto.

Código Delphi [-]
//Aquí estás validando que el edit tenga texto
if EBuscar.Text <> EmptyStr then
  begin
    QRecibidas.Filtered:= False;
    QRecibidas.Filter  := 'Nombre like '+QuotedStr('%'+ EBuscar.Text + '%');
    QRecibidas.Filtered:= True;
    end
    Else
    QRecibidas.Filtered:= False;
  end;

Como el evento se dispara cuando el texto cambia, aunque hayas borrado todo, creo que el filtro queda activo con algún carácter que impide mostrar todo el contenido de la tabla. Es por ello que al agregar una sentencia por defecto en el ELSE obtienes un resultado.

Con el filtro hubieses podido limpiar el filtro cuando el texto estuviese vacío.

Código Delphi [-]
if Trim(EBuscar.Text) <> EmptyStr then
begin
  QRecibidas.Filtered:= False;
  QRecibidas.Filter  := 'Nombre like '+QuotedStr('%'+ EBuscar.Text + '%');
  QRecibidas.Filtered:= True;
end
ELSE
  QRecibidas.Filtered:= False;

Ahora, debes evaluar cual método te es mas conveniente al realizar el cambio de texto. ir a la base de datos y realizar la consulta o realizar un filtro sobre el dataset que ya tienes en memoria. Igual, ambos tienen un costo en recursos y tiempo en la aplicación.

Neftali [Germán.Estévez] 22-06-2022 08:29:28

Aunque ya funciona y sólo como comentario, cuando utilizas el ParamByName, no hare falta realizar un QuotedStr. Según el tipo del parámetro se añadirán las comillas si hacen falta.


La franja horaria es GMT +2. Ahora son las 20:16: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