PDA

Ver la Versión Completa : Ordenar Campos String con valores


koalasoft
30-08-2013, 01:57:15
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


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:


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
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 ..


// 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 ..


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 ..