Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-02-2005
zerelho zerelho is offline
Miembro
 
Registrado: mar 2004
Posts: 28
Poder: 0
zerelho Va por buen camino
¿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?
Responder Con Cita
  #2  
Antiguo 11-02-2005
zerelho zerelho is offline
Miembro
 
Registrado: mar 2004
Posts: 28
Poder: 0
zerelho Va por buen camino
Unhappy 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...'?
Responder Con Cita
  #3  
Antiguo 12-02-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 14-02-2005
zerelho zerelho is offline
Miembro
 
Registrado: mar 2004
Posts: 28
Poder: 0
zerelho Va por buen camino
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
Responder Con Cita
Respuesta



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


La franja horaria es GMT +2. Ahora son las 11:40:02.


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