Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   ¿Cuanto de potente puede ser un filtro en una ADOTable? (https://www.clubdelphi.com/foros/showthread.php?t=18412)

zerelho 10-02-2005 22:37:20

¿Cuanto de potente puede ser un filtro en una ADOTable?
 
Hola a todos, tengo una tabla de pedidos y quiero filtrarla mediante una serie de condiciones que tampoco es que sean muy complejas pero no hay manera, me sale el siguiente msje de error:
"Argumentos incorrectos, fuera del intervalo permitido o en conflicto con otros"

Código Delphi [-]
 
TbPedidos.Filter:=Format('( %s = %s ) AND ( ( %s = %d ) OR ( %s = %d ) )',
                       ['CodProveedor',QuotedStr(getProveedorAlbaran(TbLinAlb_idAlbaran.Value)),
                        'EstadoPedido',stPedConfimado,
                        'EstadoPedido',stPedParcial]);

TbPedidos en una TADOTable, los campos CodProveedor y EstadoPedido existen y las variables y constantes utilizadas tambien.

para esta condición en cuestion, la podria replantear utilizando solamente ANDs, pero en la aplicación permito a los usuarios que creen sus propios filtros y por lo que se ve los de este estilo no funcionan

y pregunto, no se pueden utilizar condiciones de "2 niveles" como filtros en la propiedad filter de un dataset?

zerelho 11-02-2005 12:33:39

No da salido
 
Hola otra vez, por lo que pude ver en los foros, hay mas gente que tiene este mismo problema, pero no veo ninguna solución al respecto.
Por lo que veo, el problema se da al tener una condición multiple formada por varias condiciones unidas por OR y combinar esta condición compuesta con otra mediante AND, es decir,
Código Delphi [-]
 ADOTable.Filter:='(X OR Y) AND Z'

Es una limitación de los filtros con ADO?

Desisto entonces de hacerlo de esta manera y voy a intentarlo con una ADOQuery...

me gustaria saber que forma es mas eficiente de las dos:
filtrando una tabla con FILTER o haciendo una QUERY 'select * from where...'?

Lepe 12-02-2005 14:58:06

Los filtros estan muy bien para cosas simples, no los fuerces más de lo necesario.

Indiscutiblemente el query es más eficiente y flexible, a menos que tengas 200 campos en la misma tabla y la restricción del where deje pasar millones de registros.;)

Hablando en serio, si te parece engorroso andar con objetos Tquery prueba algo tan simple como:

Código Delphi [-]
procedure CambiaQryA(qry:Tquery; sql: String);
begin
  if qry = NIL then
    qry := createqry(DTM.DtbPPal, sql)
  else
  begin
  if qry.Active then
    qry.Close;
  qry.SQL.Clear;
  qry.SQL.Text := sql;
  qry.Open;
  end;

end;
function CreateQry(dtb: TDatabase; SQL: String): TQuery;
begin
    Result := Tquery.Create(NIL);
try
    Result.DatabaseName := dtb.DatabaseName;
    Result.SessionName  := dtb.SessionName;
    Result.SQL.Clear;
    Result.SQL.Text := SQL;

    Result.Prepare;
    Result.Open;
  except
    FreeAndNil(Result);
    raise;
  end;
end;
Solamente tienes que llamar a 'CambiaQry' y despues asociar el Datasource del grid a esta query.

Acuerdate de usar Freeandnil(qry) al cerrar la ventana en cuestion.

Saludos

zerelho 14-02-2005 19:41:51

gracias por la ayuda Lepe, me pondré al tema.

Me fastidia porque lo tenia todo preparado para utilizar el FILTER de las tablas, pero equivocandose es como se aprende :(


La franja horaria es GMT +2. Ahora son las 11:44:31.

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