Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ordenar alfabeticamente un ComboBox (https://www.clubdelphi.com/foros/showthread.php?t=65391)

Jucho69 10-12-2009 18:43:16

Ordenar alfabeticamente un ComboBox
 
Hola a todos los del Foro


Por favor necesito que me ayuden con el siguiente problema, estoy haciendo una aplicación para el area de Finanzas de la empresa y como es logico tengo algunas dificultades, ¿como se puede reorganizar alfabeticamente los item que ya están guardados de forma aleatoria en un ComboBox y que aparezcan en él mismo ordenados? los datos provienen de una sentencia SQL de una base de datos microsoft, sé que con las instrucciones SQL como por ejemplo:

Form1.ADOQuery9.SQL.Add('Order by NoSub asc');

se pueden ordenar los datos antes de que llene el Combo pero quisiera saber si se puede ordenar una ves que los datos ya están dentro del Combo desorganizados

Gracias y disculpen lo extenso del post

Caral 10-12-2009 19:47:37

Hola
Código Delphi [-]
  ADOQuery9.SQL.Text := 'SELECT TuTabla.NoSub FROM TuTabla ORDER BY TuTabla.NoSub';
   ADOQuery9.Active := True;
   While not ADOQuery9.Eof do
   begin
      ComboBox1.Items.Add(ADOQuery9.Fields[0].Text);
      ADOQuery9.Next;
   end;
Saludos

Jucho69 10-12-2009 20:03:56

Hola Caral

Gracias por tu ayuda, Voy de inmediato a provar el codigo y despues te digo si me sirvió.

Saludos

rgstuamigo 10-12-2009 20:24:00

Aunque como te ha indicado Caral haciendolo directamente en la Consulta SQL, tambien podrias haber puesto a la propiedad Sorted=True de tu combobox y ya hubiera estado tambien;).
Saludos...:)

Jucho69 10-12-2009 20:57:18

Hola

Te diré como hice el codigo y me dá un error en la clausula Select

ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Text := 'SELECT * FROM Pagos ORDER BY Beneficiario';
ADOQuery2.SQL.Add('Where CBanca = '+QuotedStr(Form1.ComboBox1.Items[Form1.ComboBox1.ItemIndex]));
ADOQuery2.Active := True;
While not ADOQuery2.Eof do
begin
if not(ADOQuery2.Fields[0].Text='')then begin
with Form5.ComboBox7.Items do if IndexOf(AdoQuery2.Fields[0].Text) = - 1 then Add(AdoQuery2.Fields[0].Text);
with Form5.ComboBox9.Items do if IndexOf(AdoQuery2.Fields[0].Text) = - 1 then Add(AdoQuery2.Fields[0].Text);
end;
AdoQuery2.Next;
end;


Gracias por adelantado

rgstuamigo 10-12-2009 21:15:06

La clausula order by tiene que ir al final de la sentencia SQL;).
Me temo amiguito que deberias leer un buen Libro o Tutorial sobre SQL:o.
Saludos...:)

2-D@monic 11-12-2009 05:31:07

Creo que el método sorted solo ordena números no?????????? cadenas las maneja de manera diferente

maeyanes 11-12-2009 15:40:39

Hola...

La propiedad (más no método) Sorted le indica al componente TComboBox que debe ordenar las cadenas de texto contenidas en su propiedad Items. Esto es, 2-D@monic, que para el TComboBox no existen números como tal, solo cadenas de texto y eso es lo que se ordena.


Saludos...

Caral 11-12-2009 19:27:51

Hola
Muéstrame o tráeme toda la tabla:eek:.
Cita:

Empezado por Jucho69 (Mensaje 348643)
ADOQuery2.SQL.Text := 'SELECT * FROM Pagos ORDER BY Beneficiario';

Cuando la recorras TODA.:eek:
Cita:

Empezado por Jucho69 (Mensaje 348643)
While not ADOQuery2.Eof do
begin

Adjunta o adhiere al combobox SOLO el primer archivo.:cool:
Cita:

Empezado por Jucho69 (Mensaje 348643)
.............then Add(AdoQuery2.Fields[0].Text);

En otras palabras, para mi corto conocimiento, algo que no le habéis comentado al amigo es que su planteamiento esta mal.
Me parece que no es lógico en el uso de SQL.
Saludos

Jucho69 24-12-2009 15:39:54

Hola

Gracias Caral y a los demas que me ayudaron, ya resolvi como hacer el codigo, lo hice de esta forma>

ADOQuery1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+Form1.Edit2.Text+';Persist Security Info=False;Jet OLEDB:Database Password=rosello07';
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * From Pago');
ADOQuery1.SQL.Add('Where CBanca = '+QuotedStr(Form1.ComboBox1.Items[Form1.ComboBox1.ItemIndex]));
ADOQuery1.SQL.Add('Order by ChequeTransf asc');
ADOQuery1.Open;


O sea, se recorren todos los registros de la tabla, pero se ordena alfabeticamente por el campo ChequeTransf, claro,lo lojico seria seleccionar solo ese campo y no todos los demas pero es que los utilizo tambien aunque ya no ordenados.

Les reitero las gracias a todos y al moderador

Saludos


La franja horaria es GMT +2. Ahora son las 06:50:15.

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