PDA

Ver la Versión Completa : Problema con Filter de ADO


pelaorb68
16-04-2007, 21:12:38
Hola a todos, necesito si me pueden ayudar con mi problema:
Tengo un DBGrid con datos de un ADOQuery y quiero aplicar filtros según el campo del DBGrid. Para campos string no hay ningún problema, pero cuando intento hacerlo sobre un campo numérico, la aplicación me dá el error que no pudo abrir el filtro:

He aquí el Filtro:


with DBGrilla do begin
DataSource.DataSet.Filtered := False;
DataSource.DataSet.Filter := Columns[cboBuscarEn.ItemIndex].FieldName +
' LIKE ''' + '%' + edtValorBuscar.Text + '%''';
DataSource.DataSet.Filtered := (Trim(edtValorBuscar.Text)<>'');
end;


Estuve leyendo la ayuda de MySql y dice que sí se puede usar like sobre campos numéricos, pero en la aplicación no resulta....

Agradeceré si me puedan ayudar....

Saludos,

Caral
16-04-2007, 21:19:45
Hola
Para mi el error esta en el edit, que es texto, si quieres poner un campo numerico tienes que indiacrlo.

with DBGrilla do begin
DataSource.DataSet.Filtered := False;
DataSource.DataSet.Filter := Columns[cboBuscarEn.ItemIndex].FieldName +
' LIKE ''' + '%' + IntToStr(edtValorBuscar.Text) + '%''';
DataSource.DataSet.Filtered := (Trim(edtValorBuscar.Text)<>'');
end;
En este caso un integer, floattostr, campo con decimales.
Saludos

pelaorb68
16-04-2007, 22:22:06
Disculpa Caral, pero no entiendo tu respuesta.....

luisgutierrezb
16-04-2007, 22:26:12
no tendras que hacer un cast en la instruccion SQL para que te convierta el campo de numerico a cadena?

Caral
16-04-2007, 22:42:10
Hola
La verdad no se que es lo que no entiendes, te explico lo que entiendo yo y vemos si es lo mismo.
Entiendo que estas haciendo un filtro, con campos text no hay problemas, con campos numericos, si hay problemas.
Te puse una opcion para cambiar el tipo de text a numerico.
Otra es que no uses el like sino el >= que hace casi lo mismo.
Saludos

pelaorb68
16-04-2007, 22:59:06
Ok Caral....este es mi problema: lo que tengo en la grilla es datos de Facturación: Nº Factura, Fecha, Cliente, Valores, Nº Orden, etc....
Tengo un combo que permite indicar por qué campo se desea filtrar información...y además un Edit para ingresar el valor que el usuario desea filtrar.
Si el usuario dice que desea filtrar por Nº de Factura y digita en el Edit 55, el filter queda: NumeroFactura LIKE '%55%' .... y si es por nombre queda NombCliente LIKE '%Juan%' , etc......

Lo que busco es que el filtro entregue los registros en los cuales el contenido del campo a filtrar contenga los valores a filtrar, es decir, todos aquellos donde el número de factura contenga 55 (2255, 2559, 5590, etc)

Ahora cuando ejecuto el filter por NumeroFactura(que es un campo de tipo numérico) no funciona y lanza el Error "No se puede abrir el filtro".......

Saludos

pelaorb68
17-04-2007, 00:33:59
Disculpa luis, no había leido tu mensaje......Tienes toda la razón...se solucionó aplicando cast para los campos que no son numéricos....Apliqué cast al Nº de Factura y cuando hago el filtro, me entrega todos aquellos que contengan el valor especificado para filtrar. Ej: para 55 me entregó (2255, 2558, 5591, etc)

Muchas gracias por la ayuda y tambien gracias para Caral

Saludos,

pelaorb68
17-04-2007, 00:34:52
Perdón...el cast "es para los que son numéricos"......