PDA

Ver la Versión Completa : Operacion Not applicable


Yun-i
25-04-2012, 20:20:00
que tal foristas gracias por leer mis post.

mi problema es el siguiente:

estoy trabajando con Delphi 7 (viejisimo lo sé) me pidieron hacer unos cambios, bueno instale delphi 7 en mi pc con
win 7 32 bits estoy tratando de hacer un filtro de un query con conponentes bde la base de datos esta en MySQL y tengo llego aella por un ODBC


Query1.Filter:='snombre_evento LIKE '+#39+'%'+EditBusca.Text+'%'+#39; Query1.Filtered:=TRUE;


me dice que es una operacion no aplicable, podrian ayudarme con este tema.

desde ya muchas gracias :) saludos a todos

ecfisa
25-04-2012, 20:52:18
Hola Yun-i.

Probá de este modo:

with Query1 do
begin
Filtered:= False;
Filter:= 'SNOMBRE_EVENTO = '+ QuotedStr(EditBusca.Text + '*');
Filtered:= True;
end;


Pero si buscas cualquier ocurrencia, quizá te convenga:

with Query1 do
begin
Close;
SQL.Text:= 'SELECT * FROM TU_TABLA WHERE SNOMBRE_EVENTO LIKE :VALOR';
ParamByName('VALOR').AsString:= '%' + EditBusca.Text + '%';
Open;
end;


Saludos.

Yun-i
25-04-2012, 21:25:14
:D:D:D:D:D:D

Muchas Gracias ecfisa, las dos funcionan, nadamas que lo que quiero es que tambien filter no solo si la cadena esta en el inicio.
una pregunta es posible agregar un 'locaseinsensitive' o algo asi?


Muchaas gracias
Saludos Cordiales.

ecfisa
25-04-2012, 21:49:57
Hola Yun-i.

Mediante la propiedad Filter creo que no funciona con un comodín al principio.
Pero tál como está en el segundo ejemplo, toma el comodín tanto al inicio como del final del texto buscado. Como un ejemplo, si en EditBusca escribes "ro", te mostraría las siguientes ocurrencias:

arropar
promoción
toro
tronco


Saludos.

AzidRain
25-04-2012, 22:54:29
Tienes que hacer el filtro directamente en el query que mandas a MySQL es más eficiente y rápido ya que solo traes del servidor los datos sobre los que vas a trabajar, de otra forma siempre traeras toda la tabla para luego hacer el filtro localmente.

Yun-i
25-04-2012, 22:58:05
si, gracias [AzidRain] y ecfisa mejor hice el query como me lo recomendaron, asi quedo:


Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(' SELECT e.nid_evento, e.sclave, e.snombre_evento, te.stipo_eventos, e.slugar, e.dfecha_inicio, cl.srazon_social, c.snombre_contacto');
Query1.SQL.Add(' FROM eventos e INNER JOIN clientes cl ON e.nid_cliente = cl.nid_cliente LEFT JOIN tipo_eventos te ON e.nid_tipo_evento = te.nid_tipo_evento');
Query1.SQL.Add(' LEFT JOIN clientes_contactos cc ON cl.nid_cliente = cc.nid_cliente LEFT JOIN contactos c ON c.nid_contacto = cc.nid_contacto ');
Query1.SQL.Add(' LEFT JOIN medios_contacto mco ON c.nid_contacto = mco.nid_contacto LEFT JOIN medios_comunicacion mec ON mec.nid_medio_comunicacion = mco.nid_medio_comunicacion');
Query1.SQL.Add(' WHERE e.nstatus = 3 OR e.nstatus = 1 and SNOMBRE_EVENTO like' +#39+'%'+Trim(EditBusca.Text)+'%'+#39);


GRacias por su ayuda. Saludoss :)