Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Ordenar Campos String con valores (https://www.clubdelphi.com/foros/showthread.php?t=84033)

koalasoft 30-08-2013 01:57:15

Ordenar Campos String con valores
 
Me podrian orientar por favor .. tengo una consulta con Query, en donde un campo de la tabla es Alfanumerico con los siguiente datos.

100 TONS A RADIO DE 12.5 MTS
030 TONS A RADIO DE 12.5 MTS
200 TONS A RADIO DE 12.5 MTS
040 TONS A RADIO DE 12.5 MTS
037 TONS A RADIO DE 12.5 MTS


Necesito ordenar por rango estos datos, por ejemplo buscar el rango de toneladas que esten entre 030 a 200, los datos de rango los tengo dentro de combobox con la siguiente consulta:
Combobox1=rango del número 0 AL 999 al igual que el otro combobox2

Código Delphi [-]
       with Query1 do
       begin
         Close;
         SQL.Clear;
         SQL.Add('SELECT * FROM Reg_ctrl.db WHERE GRUA_PR BETWEEN ' + Combobox1.Text + ' AND ' + Combobox2.Text);
         Open;
       end;

Pero no me lo busca .. faltará algo?

ecfisa 30-08-2013 03:13:03

Hola koalasoft.

Primero que nada mi consejo es que pongas la cantidad de toneladas en un campo numérico aparte. Pero apegandome a tu consulta y a los datos de muestra, podes hacer:

Código Delphi [-]
  with Query1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM REG_CTRL.DB');
    SQL.Add('WHERE CAST(SUBSTRING(GRUA_PR FROM 1 FOR 3) AS INTEGER) BETWEEN :DESDE AND :HASTA');
    ParamByName('DESDE').AsInteger := StrToInt(Combobox1.Text);
    ParamByName('HASTA').AsInteger := StrToInt(Combobox2.Text);
    Open;
  end;


Saludos. :)

koalasoft 30-08-2013 16:05:18

mmm .. los valores que tengo en los combobox no son extraídos o no pertenecen a la BD, ya que allí solo tengo manualmente los rangos que necesito poner. en los dos con un FOR cargo los valores del 0 al 999 ...

Lo intente con esto pero igual no me dio resultado ..

SQL.Add('SELECT * FROM REG_CTRL.DB');
SQL.Add('WHERE CAST(SUBSTRING(GRUA_PR FROM 1 FOR 3) AS INTEGER) BETWEEN "' + Combobox1.Text + '" AND "' + Combobox2.Text + '"');

koalasoft 30-08-2013 17:18:12

Lo que intento es que de los datos que mencioné:

100 TONS A RADIO DE 12.5 MTS
030 TONS A RADIO DE 12.5 MTS
200 TONS A RADIO DE 12.5 MTS
040 TONS A RADIO DE 12.5 MTS
037 TONS A RADIO DE 12.5 MTS

Queden ordenados asi:

030 TONS A RADIO DE 12.5 MTS
037 TONS A RADIO DE 12.5 MTS
040 TONS A RADIO DE 12.5 MTS
100 TONS A RADIO DE 12.5 MTS
200 TONS A RADIO DE 12.5 MTS

Cuando en los combobox yo le den un rango de : 1 al 999.
Donde esos datos estan dentro de una campo tipo String.

ecfisa 30-08-2013 18:36:38

1 Archivos Adjunto(s)
Hola koalasoft.

En realidad no sé como estás haciendo tu código, por lo que te adjunto un demo totalmente operativo con el código que te puse en el mensaje anterior.

El demo incluye una tabla, REG_CTRL.DB, que posee solamente el campo interesado con los valores que mencionas en tu último mensaje.

Crea una carpeta con el nombre que desees y descomprimí el adjunto alli, revisalo y probalo con tranquilidad.

Saludos :)

koalasoft 30-08-2013 18:37:51

Ok muchas gracias !! ..

koalasoft 30-08-2013 18:56:13

Efectivamente era como usted lo plantea .. quedo de la siguiente forma ..

Para los rangos ..

Código Delphi [-]
   // rango de Cap. de Grua
Combobox4.Clear;
   For ri := 000 to 999 do
   Begin
   Combobox4.Items.Add(FormatFloat('000',ri));
   End;

Combobox5.Clear;
   For rf := 000 to 999 do
   Begin
   Combobox5.Items.Add(FormatFloat('000',rf));
   End;

Y la busqueda sería asi ..

Código Delphi [-]
  with Query1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM REG_CTRL.DB');
    SQL.Add('WHERE CAST(SUBSTRING(GRUA_PR FROM 1 FOR 3) AS INTEGER) BETWEEN : DESDE AND :HASTA');
    SQL.Add('ORDER BY GRUA_PR');
    ParamByName('DESDE').AsInteger := StrToInt(Combobox4.Text);
    ParamByName('HASTA').AsInteger := StrToInt(Combobox5.Text);
    Open;
  end;

No estaba muy relacionado con parámetros SQL con delphi pero veo que creaste dos parámetros que ayudaron a buscar mas fácil los rangos que son DESDE HASTA .. Hoy aprendi algo nuevo jejej !! ^\||/

Muchas gracias .. !! tema resuelto ..


La franja horaria es GMT +2. Ahora son las 22:11:07.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi