Ir al contenido


Foto

[RESUELTO] Mayusculas en query con firebird


  • Por favor identifícate para responder
7 respuestas en este tema

#1 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 13 junio 2009 - 03:31



delphi
  1. procedure TFRQcentral.EDCLIENTEChange(Sender: TObject);
  2. begin
  3.   if EDCLIENTE.TEXT <> '' then
  4.  
  5.   begin
  6.  
  7.     dmmonitoreo.zqconsultas.SQL.clear;
  8.     dmmonitoreo.zqconsultas.SQL.Add('SELECT * from  central left join acmsub on central.csid=acmsub.csid ');
  9.     dmmonitoreo.zqconsultas.SQL.Add('left JOIN evento ON CENTRAL.EVENTO = evento.Evento');
  10.     dmmonitoreo.zqconsultas.SQL.Add('WHERE ' + 'ACMSUB.clientes LIKE ' + quotedstr('%' + edcliente.Text + '%'));
  11.     dmmonitoreo.zqconsultas.SQL.Add(' and CENTRAL.FECHAN between ' + quotedstr(inicio) + 'and' + quotedstr(fin));
  12.     dmmonitoreo.zqconsultas.SQL.Add('ORDER BY CENTRAL.FECHAn');
  13.     dmmonitoreo.zqconsultas.Open;
  14.  
  15.   end;
  16. end;



Mi problema es que en sql server 2000 no importaba si escribia la busqueda en minuscula o en mayuscula. Sin embargo en firebird si importa. como puedo arreglar esto. En la consulta? o es algo
que debo arreglar en la base de datos.

Gracias 

  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 13 junio 2009 - 03:47

Haz este pequeño cambio:

En vez de:



delphi
  1. LIKE ' + quotedstr('%' + edcliente.Text + '%')



Este:



delphi
  1. LIKE ''*' + edcliente.Text + '*''



Saludos.
  • 0

#3 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 13 junio 2009 - 05:40

Me da error

[Error] UFRQcentral.pas(103): Unterminated string


o si no me da error de operador y cuando logro ajustar para que no me de error en la compilacion
me da error en la busqueda

dime como lo debo poner dentro de la consulta de delphi


delphi
  1. dmmonitoreo.zqconsultas.SQL.Add('WHERE ' + 'ACMSUB.clientes LIKE ' + quotedstr('%' + edcliente.Text + '%'));


http://img291.images...nsultaerror.jpg
  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 13 junio 2009 - 05:57



sql
  1. IF EDCLIENTE.TEXT <> '' THEN
  2.  
  3.   BEGIN
  4.  
  5.     dmmonitoreo.zqconsultas.SQL.clear;
  6.     dmmonitoreo.zqconsultas.SQL.ADD('SELECT * from  central left join acmsub on central.csid=acmsub.csid ');
  7.     dmmonitoreo.zqconsultas.SQL.ADD('left JOIN evento ON CENTRAL.EVENTO = evento.Evento');
  8.     dmmonitoreo.zqconsultas.SQL.ADD(' WHERE ACMSUB.clientes LIKE '+quotedstr('%' + edcliente.Text + '%')+'');
  9.     dmmonitoreo.zqconsultas.SQL.ADD(' and CENTRAL.FECHAN between ' + quotedstr(inicio) + ' and ' + quotedstr(fin) +'');
  10.     dmmonitoreo.zqconsultas.SQL.ADD(' ORDER BY CENTRAL.FECHAn');
  11.     dmmonitoreo.zqconsultas.OPEN;
  12.  
  13.   END;



Intenta con eso.

Saludos.
  • 0

#5 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 13 junio 2009 - 06:19

No me funciona.

Funciona igual que como la tenia al principio. Lo que pasa es que algunos nombres de el campo clientes tienen partes en minuscula, aunque la mayoria estan completamente en mayuscula.
Cuando escribo cualquier parte del nombre en mayuscula, la consulta funciona bien. Pero si escribo en minuscula solo la primera letra la busca, pero de los nombres que tengan minuscula. Desde que entro la
2da letra no importa que esta exista en minuscula o no en el campo clientes.

nota: cuando escribo lo nombres en mayuscula en el edit, solo me trae los nombres que estan totalmente en mayuscula.

PD: cuando la base de datos estaba en sql server, funcionaba sin problemas

nota2: en IBexpert esta declarado el campo asi: 

VARCHAR(60) CHARACTER SET ISO8859_1

 

  • 0

#6 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 13 junio 2009 - 07:29

Bueno, por el tema de las mayúsculas y minúsculas eso se debe al modo en como está definido el conjunto de caracteres. Lee ésto y ésto. Allí­ se habla al respecto.

Como una opción puedes valerse de la función UPPER para capitalizar el texto.

Saludos,
  • 0

#7 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 13 junio 2009 - 08:02



delphi
  1. procedure TFRQcentral.EDCLIENTEChange(Sender: TObject);
  2. begin
  3.   if EDCLIENTE.TEXT <> '' then
  4.  
  5.   begin
  6.  
  7.     dmmonitoreo.zqconsultas.SQL.clear;
  8.     dmmonitoreo.zqconsultas.SQL.Add('SELECT * from  central left join acmsub on central.csid=acmsub.csid ');
  9.     dmmonitoreo.zqconsultas.SQL.Add('left JOIN evento ON CENTRAL.EVENTO = evento.Evento');
  10.     dmmonitoreo.zqconsultas.SQL.Add(' where ' + ' (upper(ACMSUB.clientes COLLATE ES_ES_CI_AI )) LIKE ' +quotedstr('%' + edcliente.Text + '%')+'');
  11.     dmmonitoreo.zqconsultas.SQL.Add(' and CENTRAL.FECHAN between ' + quotedstr(inicio) + 'and' + quotedstr(fin));
  12.     dmmonitoreo.zqconsultas.SQL.Add('ORDER BY CENTRAL.FECHAn');
  13.     dmmonitoreo.zqconsultas.Open;
  14.  
  15.   end;
  16. end;



Gracias Delphius estaba trabajando con upper cuando vi tu respuesta y con ella encontre la parte que me faltaba. 

En este ejemplo:
ES_ES significa el idioma espanol.
CI es case insensitive(no sensible a mayuscula o minuscula)
AI  es insensible a los acentos.

Gracias a todos
  • 0

#8 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 14 junio 2009 - 07:37

Interesante el asunto, nunca me ha sucedido ese tipo de cosas con Firebird pero es bueno saber esos detalles en caso de que suceda, gracias Delphius (y).

Saludos.
  • 0




IP.Board spam blocked by CleanTalk.