PDA

Ver la Versión Completa : Filtrar un dataset


Sick boy
02-07-2004, 09:40:10
Hola,

Estoy tratando de filtrar un dataset, y me encuentro con algunos problemas.
Para empezar, no puedo usar like '%lokesea%', ya que la base de datos (paradox) no lo soporta.

Lo siguiente que no puedo hacer es usar dos asteriscos '*lokesea*', que daria un resultado similar. Si me deja usar un solo asterisco 'lokesea*'.

Este codigo funciona cuando se utiliza un asterisco:


datasource2.DataSet.Filtered := True;
buscar:=''+edit14.Text+'*';
datasource2.dataset.Filter := '[nombre] = ''' + buscar +'''';


Quizas me he hecho un lio con las comillas, o quizas no se puede hacer lo que quiero, pero se admiten sugerencias y/o soluciones

Gracias

jachguate
02-07-2004, 11:06:22
Me parece que si te sobran comillas.

Además, lo normal, es poner Filtered a True después de establecer el filtro. La verdad no se si de igual... pero me parece mas lógico hacerlo asi.

Luego, quizas es mejor que establezcas el filtro con algo como:


datasource2.dataset.Filter := '[nombre] = ' + QuotedStr(eBuscar.Text + '*');
datasource2.dataset.Filtered := True;


el otro cambio ha sido edit14 por eBuscar. Creo que es buena practica SI poner nombres a los objetos que tienen algún uso. Yo normalmente nombro aquellos a los que hago referencia en el código.

Hasta luego.

;)

Sick boy
02-07-2004, 14:06:30
Gracias por lo de QuotedStr, no conocia la función.

Tambien probaré lo de activar el filtro despues, pero ese no era mi problema.

El problema es que no puedo aplicar los asteriscos por ambos lados, osea que lo que busco es hacer un like %buscar%

Lo de poner el asterisco por la derecha ya lo tenia resuelto.

Saludos

jachguate
02-07-2004, 14:39:22
El problema es que no puedo aplicar los asteriscos por ambos lados, osea que lo que busco es hacer un like %buscar%

Pues como al final si te sobraban comillas... por allí podria venir el problema. Otra cosa es que esa funcionalidad este soportada por los datasets específicos que usas. Valdria la pena que leas un poco acerca de ellos, pero sobre todo, que hagas una prueba seguro que el filtro está bien establecido. Si no funciona, es porque no está soportado.

Para asegurarte que la propiedad está bien establecida, podes chequearla en modo debug, o bien asignarla a un label o un edit que te te la muestre.

Hasta luego.

;)

roman
02-07-2004, 17:01:16
Para empezar, no puedo usar like '%lokesea%', ya que la base de datos (paradox) no lo soporta.


¡Ah! ¿Cómo de que no?

Te aseguro que sí se puede. Digo, Paradox es limitado pero no es para tanto.

// Saludos

Sick boy
02-07-2004, 17:28:13
Hola,

Cambie las sentencias, ahora queda asi:

datasource2.DataSet.Filtered := True;
buscar:='*'+edit14.Text+'*';
datasource2.dataset.Filter := '[nombre] = '+quotedstr(buscar);
datasource2.DataSet.Filtered := True;

Y tampoco funciona.
Si le quito el primer asterisco si, pero no es lo que busco.

¡Ah! ¿Cómo de que no?

Te aseguro que sí se puede. Digo, Paradox es limitado pero no es para tanto.
Quizas me exprese mal, no es que paradox no pueda hacer un like en una sentencia sql, es que el dataset en concreto no permite un like. Segun la ayuda de delphi, el TclienteDataset permite like, pero hay una indicacion de que no esta disponible en otros datasets.


Like Memo LIKE '%filters%'
Works like SQL-92 without the ESC clause. When applied to BLOB fields, FilterOptions determines whether case is considered.

In Day(DateField) in (1,7)
Works like SQL-92. Second argument is a list of values all with the same type.
* State = 'M*'
Wildcard for partial comparisons


Y aqui se hace referencia a el asterisco, pero solo por la derecha.

¿Entiendo entonces que no es posible poner like en un filter?
Lo he probado, y da un mensage "Operator not aplicable".

roman
02-07-2004, 17:53:18
No sé qué datasets estés usando pero al menos con TTable no es posible un like en el filtro y tampoco dos asteriscos. Yo lo que haría es usar un Query con una consulta LIKE que sí te va a funcionar.

// Saludos

Sick boy
02-07-2004, 18:08:58
Ok, perfecto.

Muchas gracias