Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   ADO, SQL y Filtros (https://www.clubdelphi.com/foros/showthread.php?t=44871)

Deiv 16-06-2007 21:07:59

ADO, SQL y Filtros
 
Hola,
Estoy empezando a trabajar con ADO, Tengo una Tabla de Access "Elementos.mdb" con 3 campos: "ID", "Nombre" y "Tipo", un ADOQuery1, un DataSource1 y un DBGrid1; mi problema que no entiendo es en esta parte cuando trato de Filtrar por el Campo "Tipo" con el siguiente código:
Código Delphi [-]
procedure TForm1.Button4Click(Sender: TObject);
begin
  ADOQuery1.Active:= False;
  if (ADOQuery1.Filter = '') then
    begin
      ADOQuery1.Filter:= 'Tipo = "Metal"';
      ADOQuery1.Filtered:= True;
      Button4.Font.Style:= Button4.Font.Style + [fsBold];
    end
  else
    begin
      ADOQuery1.Filter:= '';
      ADOQuery1.Filtered:= False;
      Button4.Font.Style:= Button4.Font.Style - [fsBold];
    end;
  ADOQuery1.Active:= True;
end;

Este código no me muestra nada, NO FILTRA, es decir solo me muestra un DBGRID VACÍO. En la Línea:
ADOQuery1.Filter:= 'Tipo = "Metal"';

he intentado cambiar las comillas a:
ADOQuery1.Filter:= 'Tipo = Metal';

Pero me lanza error en la última línea:

"Project: Proyecto.exe raised exception class EOleException with message 'Argumentos Incorrectos, fuera del intérvalo permitido o en conflictos con otros'. Process Stopped"

La ConectionString está bien ya que la propiedad Active está en True y puedo ver mi Tabla en el DBGrid.

¿Cómo le hago para mostrar en el DBGrid los registros filtados por "Tipo" correspondientes a "Metal"?

poliburro 16-06-2007 21:49:37

que tal brother, pues en principio, quiero desaconsejarte el uso de Filtros, pues estos son sumamente costosos en la aplicación.

Por que no mejor cambias el enfoque y utilizas Querys?, ya que es más eficiente.

Suerte

Deiv 17-06-2007 23:06:52

Cita:

Empezado por poliburro
Por que no mejor cambias el enfoque y utilizas Querys?, ya que es más eficiente

¡¿Cómo? ¿con que?
Y cómo aplico filtros para tu consejo?
Gracias por ello, en realidad me gustaría saber a que te refieres con "Querys" si bien uso ADOQuery en mi aplicación, pero además de ello mi duda estaba en la línea:
ADOQuery1.Filter:= 'Tipo = Metal';
y cómo corregirla?, creo que voy mal con las comillas, mi Base de Datos no es grande y no crecerá mas de 200 Registros.

courtois 18-06-2007 08:35:53

al parecer tu filtro si funciona, si te aparece vacio es porque no encontró ningun registro que cumpliera el criterio de tu filtro.

Lepe 18-06-2007 10:51:07

Lo que dice poliburro es que no uses la propiedad Filter, sino que esa condición la añadas al Where de tu consulta en tiempo de ejecución.

Código Delphi [-]
procedure TForm1.Button4Click(Sender: TObject);

const sqlClientes = ' Select * from clientes ';

begin
  ADOQuery1.Active:= False;
  ADOQuery1.Sql.text := sqlClientes;
  if (ADOQuery1.Filter <> '') then
    begin
      ADOQuery1.Sql.text := sqlClientes + ' where Tipo = "Metal"';
      Button4.Font.Style:= Button4.Font.Style + [fsBold];
    end
  else
      Button4.Font.Style:= Button4.Font.Style - [fsBold];
  ADOQuery1.Active:= True;
end;

Edito el signo "igual", debe ser "distinto"

Saludos

courtois 19-06-2007 03:43:59

En este caso, talvez no importe, si fuese un sevidor de bases de datos propiamente dicho, que es mas costoso, hacer una consulta no planeada desde sql o hacer un filtro? nótese que son 100 registros


La franja horaria es GMT +2. Ahora son las 02:55:20.

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