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 29-04-2006
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 20
amadis Va por buen camino
Question ¿como usar OnFilterRecord? (para un filtro x nombre)

Que tal Gente.

Hace tiempo he posteado preguntando como filtrar o hacer locate sobre campos calculados (lookup) (en este caso nombres de clientes en una tabla con sus codigos y en otra tabla, en la que deseo filtrar numeros de cliente y otros datos de servicios que tiene ese cliente)

Habia solucionado todo trabajando con los ClientDataSet pero a medida que los registros crecen se hace sumamente lento (corriendo en un P4 2.4 512mb)

Si aplico un filtro sobre la tabla serviciosyclientes, en el campo cliente que es un String lookup tomado de la tabla cliente con su codigo me acusa error.
Lo mismo si hago un locate en el mismo campo.


Asi que buscando en el foro encontre que para busquedas avanzadas se usa OnFilterRecord pero no he logrado lo que quiero, mas bien no se usarlo.

Lo que yo necesito es filtrar la tabla serviciosyclientes (que esta conectada a un DBgrid )y mostrar allí solo los resultados del filtro.

Criterio de busqueda --> POR NOMBRE en un Edit y la idea es que en cada OnChange del Edit vaya actualizando el filtro. para lo cual en onchange puse FILTER:= false; y luego lo paso a true.

Pero no me muestra nada en la Grilla.

Abajo adjunto el codigo que en mi ignorancia armé.

Código Delphi [-]
procedure serviciosyclientes, FilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
var
  nombre: String;
begin

   nombre := Edcli.text + '*';
   Accept := Dataset['Cliente'] = QuotedStr(nombre); 
    { Cliente es el campo String calculado mediante el campo codcli de la    tabla actual sobre el campo codigo de la tabla clientes]
 
end;


Les agradecería su ayuda, comentarios o cualquier orientacion que me puedan dar.

Cualquier forma de filtrar un lookup sera bien recibida

Gracias

Amadís

-------------------------------------
NO A LAS FABRICAS DE CELULOSA
Responder Con Cita
  #2  
Antiguo 30-04-2006
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
Prueba esto:
Código Delphi [-]
Accept := (Dataset['Cliente'] = QuotedStr(nombre));

agregando los parentesis..
__________________
¿Microsoft? No, gracias..
Responder Con Cita
  #3  
Antiguo 30-04-2006
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Hola amadis,

El OnFilterRecord, no tiene que deactivar el Filtred y volverlo activar por lo hace solo.

El porque tarda tanto cuando cambias o borras algo, por que tiene que volver a filtrar de nuevo toda la base de datos desde el principio del DBGRID, si tiene un DBGRID de 30 registros tiene que entrar 30 veces en OnFilterRecord para que cada registro que filtra cumpla con lo que le has filtrado.

Un Saludo.
Responder Con Cita
  #4  
Antiguo 30-04-2006
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
Cita:
El OnFilterRecord, no tiene que deactivar el Filtred y volverlo activar por lo hace solo.
Esto no es cierto, el evento se dispara cuando se pone la propiedad Filtered a True..
__________________
¿Microsoft? No, gracias..
Responder Con Cita
  #5  
Antiguo 01-05-2006
Avatar de NestorN
NestorN NestorN is offline
Miembro
 
Registrado: ago 2005
Ubicación: Argentina
Posts: 15
Poder: 0
NestorN Va por buen camino
Lightbulb

Hola proba con este codigo a mi me funciona como filtro, espero que a vos tambien saludos.

clientes.Filter:= 'country ='+ Quotedstr(combo.Text);{Utiliso un combobox para poner las opciones pero seguramente con otros componentes debe funcionar}
clientes.Filtered:=true


Bueno espero tu repuesta para ver si te ayudo.

Saludos
Responder Con Cita
  #6  
Antiguo 02-05-2006
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 20
amadis Va por buen camino
Unhappy no funciona

Probé agregandole el parentesis pero no funciona.

Al filtrar no muestra nada o sea no obtiene resultados.

Recuerden que ese campo cliente es un String calculado

Ya comienzo a creer que esto no tiene solucion.

Hace tiempo habia tenido los mismos problemas intentando un Locate sobre ese campo y no pude solucionarlo.

Gracias!
Responder Con Cita
  #7  
Antiguo 03-05-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Los filtros se aplican del lado del cliente, así que siempre consumirá mas recursos que una consulta al servidor.

Es más fácil y rápido hacer una consulta al servidor, pero no en el evento OnChange, sino cuando el usuario pulse la tecla Enter en el Edit (que no cuesta tanto ).

Es muy bonito cuando vas pulsando teclas y ves como cambian los datos, pero tecleando rápido.... da igual que sea un AMD 3500 Mhz, con 5000 registros se vé lo lento que es el sistema, por el filtro, y por la "comodidad" de ver los datos cambiar.

Yo veo más eficiente y rápido que el usuario escriba con libertad y al pulsar intro, se lance la consulta, haga un inner join de las tablas y se aplique las restricciones con un "WHERE".
Código SQL [-]
select c.*, s.* 
from clientes c inner join servicios s on c.codcliente = s.idcliente 
where c.nombreCliente like : prNombre
Código Delphi [-]
query1.parambyname('prNombre':= '%'+ edCli.Text + '%';
query1.open;

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 04-05-2006
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 20
amadis Va por buen camino
Unhappy

Mas alla del OnChange o el Enter en el Edit

Por lo que veo o no se puede filtrar sobre un lookup o es muy complejo.

La razon por la que me rehuso a usar sql es porque mientras tengo la tabla filtrada yo uso las funciones, de la tabla edit, post, next, prior, first, last. etc. para seguir con el alta y baja de datos inclusive estando la tabla filtrada.

Pero con SQL eso ya es complicarme mas la vida creo.
Responder Con Cita
  #9  
Antiguo 04-05-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Pues no.

Asociando un dbnavigator a una consulta te mueves exactamente igual que hasta ahora.

Para hacer los Edit etc, si solo rescatas datos de una tabla, tambien se puede hacer con la misma facilidad que hasta ahora.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como obtener el Nombre de usuario sin usar GetUserName menfis API de Windows 8 06-05-2007 22:44:52
Filtro para TShellListView soul6301 Varios 1 06-06-2004 08:27:15
que usar o como para poder imprimir? mrmanuel Impresión 4 30-03-2004 09:20:31
Saludo para todos, como puedo usar 2 tablas edwin1 Impresión 0 10-09-2003 16:59:53


La franja horaria es GMT +2. Ahora son las 05:15:57.


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