Ir al contenido



Foto

[RESUELTO] Accent Insensitive no access?


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

#21 adriano_servitec

adriano_servitec

    Advanced Member

  • Miembros
  • PipPipPip
  • 91 mensajes
  • LocationCuritiba-Pr - Brasil

Escrito 07 enero 2011 - 09:11

Mas duvidas...

Quiero para seleccionar las letras también, ya que estas en el botón

print
Imagen EnviadaImagen Enviada

Así lo hice, pero no funcionó  :(



delphi
  1. procedure TForm1.FilterLetras(qQuery: TADOQuery; sLetraIni, sLetraFin: String);
  2. begin
  3.   with qQuery do
  4.   begin
  5.     Close;
  6.     SQL.Clear;
  7.     SQL.Add(&#39; SELECT * FROM TABLA WHERE (CAMPO >= :INI AND CAMPO <= :FIM) OR (CAMPO LIKE :FIM) &#39;);
  8.     SQL.Add(&#39; ORDER BY CAMPO &#39;);
  9.     Parameters.ParamByName(&#39;INI&#39;).Value := sLetraIni;
  10.     Parameters.ParamByName(&#39;FIM&#39;).Value := sLetraFin +&#39;%&#39;;
  11.     Open;
  12.   end;
  13. end;



Estoy llamando de esta manera



delphi
  1. procedure TForm1.SpeedButton1Click(Sender: TObject);
  2. begin
  3.   FilterLetras(ADOQuery1,&#39;A&#39;,&#39;B&#39;);
  4. end;
  5.  
  6. procedure TForm1.SpeedButton2Click(Sender: TObject);
  7. begin
  8.   FilterLetras(ADOQuery1,&#39;C&#39;,&#39;D&#39;);
  9. end;
  10.  
  11. procedure TForm1.SpeedButton3Click(Sender: TObject);
  12. begin
  13.   FilterLetras(ADOQuery1,&#39;E&#39;,&#39;F&#39;);
  14. end;
  15.  
  16. procedure TForm1.SpeedButton4Click(Sender: TObject);
  17. begin
  18. FilterLetras(ADOQuery1,&#39;G&#39;,&#39;H&#39;);
  19. end;
  20.  
  21. procedure TForm1.SpeedButton5Click(Sender: TObject);
  22. begin
  23.   FilterLetras(ADOQuery1,&#39;I&#39;,&#39;J&#39;);
  24. end;
  25.  
  26. procedure TForm1.SpeedButton6Click(Sender: TObject);
  27. begin
  28.   FilterLetras(ADOQuery1,&#39;K&#39;,&#39;L&#39;);
  29. end;
  30.  
  31. procedure TForm1.SpeedButton7Click(Sender: TObject);
  32. begin
  33.   FilterLetras(ADOQuery1,&#39;M&#39;,&#39;N&#39;);
  34. end;
  35.  
  36. procedure TForm1.SpeedButton8Click(Sender: TObject);
  37. begin
  38.   FilterLetras(ADOQuery1,&#39;O&#39;,&#39;P&#39;);
  39. end;
  40.  
  41. procedure TForm1.SpeedButton9Click(Sender: TObject);
  42. begin
  43.   FilterLetras(ADOQuery1,&#39;Q&#39;,&#39;R&#39;);
  44. end;
  45.  
  46. procedure TForm1.SpeedButton10Click(Sender: TObject);
  47. begin
  48.   FilterLetras(ADOQuery1,&#39;S&#39;,&#39;T&#39;);
  49. end;
  50.  
  51. procedure TForm1.SpeedButton11Click(Sender: TObject);
  52. begin
  53.   FilterLetras(ADOQuery1,&#39;U&#39;,&#39;V&#39;);
  54. end;
  55.  
  56. procedure TForm1.SpeedButton12Click(Sender: TObject);
  57. begin
  58.   FilterLetras(ADOQuery1,&#39;X&#39;,&#39;W&#39;);
  59. end;
  60.  
  61. procedure TForm1.SpeedButton13Click(Sender: TObject);
  62. begin
  63.   FilterLetras(ADOQuery1,&#39;Y&#39;,&#39;Z&#39;);
  64. end;
  65.  
  66. procedure TForm1.SpeedButton14Click(Sender: TObject);
  67. begin
  68.   FilterLetras(ADOQuery1,&#39;0&#39;,&#39;9&#39;);
  69. end;



Saludos

  • 0

#22 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 08 enero 2011 - 07:36

Ya que tienes la consulta lista, ¿no sería mejor aplicar un filtro desde el ADOQuery?


Saludos!
  • 0

#23 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.962 mensajes
  • LocationMéxico

Escrito 08 enero 2011 - 07:57

Hola

Siguiendo con el mismo concepto que se ha estado manejando, yo haría esto.



sql
  1. SELECT * FROM tabla
  2. WHERE (campo BETWEEN 'A' AND 'BZ') AND
  3.       (campo LIKE '_%') OR
  4.       (campo LIKE 'A%') OR
  5.       (campo LIKE 'B%')
  6. ORDER BY campo



Referente al paso de parámetros, podemos simplificar el código de esta forma

Crea un sólo evento (en cualquiera de los SpeedButton) y lo asignas a todos los demás.

El código que puedes usar es este:



delphi
  1. procedure TForm1.SpeedButton1Click(Sender: TObject);
  2. begin
  3.   FilterLetras( ADOQuery1,
  4.                 (Sender as TSpeedButton).Caption[1],
  5.                 (Sender as TSpeedButton).Caption[2] );
  6. end;



Salud OS
  • 0

#24 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 08 enero 2011 - 08:08

O también, siguiendo con la propuesta que te menciono, algo así:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3.   ADOQuery1.Filtered := False;
  4.   ADOQuery1.Filter := 'campo like ' + QuotedStr('a*');
  5.   ADOQuery1.Filtered := True;
  6. end;




Saludos!
  • 0

#25 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 08 enero 2011 - 08:15

La función te quedaría algo así:



delphi
  1. procedure TForm1.FilterLetras(qQuery: TADOQuery; sLetraIni, sLetraFin: String);
  2. var s: String;
  3. begin
  4.   with qQuery do
  5.   begin
  6.     Filtered := False;
  7.     s := 'campo like ' + QuotedStr(sLetraIni+'*') + 'or campo like ' + QuotedStr(sLetraFin+'*');
  8.     Filter := s;
  9.     Filtered := True;
  10.   end;
  11. end;




Es solo una propuesta, recuerda que sigues teniendo la opción del SQL.


Saludos!
  • 0

#26 adriano_servitec

adriano_servitec

    Advanced Member

  • Miembros
  • PipPipPip
  • 91 mensajes
  • LocationCuritiba-Pr - Brasil

Escrito 08 enero 2011 - 08:29

Muchas gracias Felipe e Egostar                         

Funcionó correctamente

Result del ejemplo


delphi
  1. procedure TForm1.FilterLetras(qQuery: TADOQuery; sLetraIni, sLetraFin: String);
  2. var s: String;
  3. begin
  4.   with qQuery do
  5.   begin
  6.     Filtered := False;
  7.     s := 'campo like ' + QuotedStr(sLetraIni+'*') + 'or campo like ' + QuotedStr(sLetraFin+'*');
  8.     Filter := s;
  9.     Filtered := True;
  10.   end;
  11. end;




Referente al paso de parámetros, podemos simplificar el código de esta forma

Crea un sólo evento (en cualquiera de los SpeedButton) y lo asignas a todos los demás.


Chamo assí



delphi
  1. procedure TForm1.SpeedButton1Click(Sender: TObject);
  2. begin
  3.   FilterLetras( ADOQuery1,
  4.                 (Sender as TSpeedButton).Caption[1],
  5.                 (Sender as TSpeedButton).Caption[2] );
  6. end;



Event del outros speedbutton apontado para event del speedbutton1.


Excelente ejemplo pessoal.

(y)
  • 0

#27 adriano_servitec

adriano_servitec

    Advanced Member

  • Miembros
  • PipPipPip
  • 91 mensajes
  • LocationCuritiba-Pr - Brasil

Escrito 08 enero 2011 - 11:29

Pensé que había resuelto, pero ....

Ejemplo:
Sí usar el button CD 

Y no EDIT Editar en text  "A"

No result en dbGrid...

¿cómo puedo dejar el button FILTER cuando se edita?

Espero ter escrito corectamente...

  • 0

#28 Caral

Caral

    Advanced Member

  • Administrador
  • 4.241 mensajes
  • LocationCosta Rica

Escrito 08 enero 2011 - 11:41

Hola
Si te es posible coloca la BD y el programa en un Zip aqui para revisarlo.
Saludos
  • 0

#29 adriano_servitec

adriano_servitec

    Advanced Member

  • Miembros
  • PipPipPip
  • 91 mensajes
  • LocationCuritiba-Pr - Brasil

Escrito 08 enero 2011 - 11:47

Hola
Si te es posible coloca la BD y el programa en un Zip aqui para revisarlo.
Saludos

Gracias Caral...

Resuelto....

He cambiado FILTRER para SQL



delphi
  1. procedure TForm1.FilterLetras(qQuery: TADOQuery; sLetraIni, sLetraFin: String);
  2. var
  3.   s: String;
  4. begin
  5.   if Trim(EdtPesquisa.Text) <> EmptyStr then
  6.     EdtPesquisa.Clear;
  7.  
  8.   with qQuery do
  9.   begin
  10.     //Filtered := False;
  11.  
  12.     qQuery.Close;
  13.     qQuery.SQL.Clear;
  14.     qQuery.SQL.Text := ' SELECT * FROM TABLA  WHERE campo LIKE '+ QuotedStr(sLetraIni+'%') +
  15.       'OR campo LIKE ' + QuotedStr(sLetraFin +'%') +
  16.       ' ORDER BY CAMPO ';
  17.     qQuery.Open;
  18.   {    s := 'campo like ' + QuotedStr(sLetraIni+'%') + 'or campo like ' + QuotedStr(sLetraFin+'%');
  19.     Filter := s;
  20.     Filtered := True;}
  21.   end;
  22. end;



con suerte que non haja otro inesperado.  :D


  • 0

#30 adriano_servitec

adriano_servitec

    Advanced Member

  • Miembros
  • PipPipPip
  • 91 mensajes
  • LocationCuritiba-Pr - Brasil

Escrito 08 enero 2011 - 12:04

Hola
Si te es posible coloca la BD y el programa en un Zip aqui para revisarlo.
Saludos

Si, no sei anexo en foro, segue link
http://www.4shared.c...nsensitive.html

Mas ja Resuelto....

Saludos.
  • 0

#31 Caral

Caral

    Advanced Member

  • Administrador
  • 4.241 mensajes
  • LocationCosta Rica

Escrito 08 enero 2011 - 12:58

Hola
Interesante forma de programar.
Saludos
  • 0