Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   IndexDef en ADODataSet (https://www.clubdelphi.com/foros/showthread.php?t=85899)

Jere_84 21-05-2014 02:56:57

IndexDef en ADODataSet
 
Estoy creando un indice persistente en un ADODataSet pero no ordena la información, mi código es el siguiente:

Código Delphi [-]
    ADODataSetInforArtic.IndexDefs.Clear;
    case ComboBoxOrden.AsValue of
      0: begin
           with ADODataSetInforArtic.IndexDefs.AddIndexDef do
           begin
             Name := 'DenomArtic';
             Fields := 'DenomArtic';
             if ComboBoxOrden.Buttons.Image1.Id = 59 then
               Options := [ixDescending];
             ADODataSetInforArtic.IndexName := Name;
           end;
         end;

Que estoy haciendo mal? :confused:

olbeup 21-05-2014 09:22:56

Hola Jere_84,

Por que no haces la ordenación directamente desde la SQL, que beneficios te aporta esto, también la puedes ordenar en el dbgrid en el evento OnTitleClick

Un saludo

Jere_84 21-05-2014 13:20:14

Hola olbeup!, lo hago de esta manera por que es un reporte lo que estoy haciendo. No hay grilla, lo que tiene es un combo en el cual elige el campo por el que va a estar ordenada la información y otro botón en el cual puede seleccionar ascendente o descendente. No entiendo por que no esta funcionando....

ecfisa 22-05-2014 04:04:26

Hola Jere_84.

Te hice un ejemplo que permite ordenar por todos los campos del TADODataSet de forma ascendente o descendente, tal vez te sirva de guía:
Código Delphi [-]
...
implementation

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  ADODataSet1.Open;
  with ComboBox1 do
  begin
    Clear;
    for i:= 0 to ADODataSet1.FieldCount-1 do
      Items.Add(ADODataSet1.Fields[i].FieldName);
    ItemIndex:= 0;
  end;
  with RadioGroup1 do
  begin
    Items.Clear;
    Items.Add('Ascendente');
    Items.Add('Descendente');
    ItemIndex:= 0;
  end;
end;

procedure TForm1.RadioGroup1Click(Sender: TObject);
const
  ASCDESC: array[Boolean] of string=('ASC','DESC');
begin
  with ComboBox1 do
    ADODataSet1.Sort:= Format('[%s] %s',[Items[ItemIndex],
      ASCDESC[Boolean(RadioGroup1.ItemIndex)]]);
end;

Saludos :)

Jere_84 27-05-2014 00:18:02

Solucionado con propiedad Sort
 
Muchas Gracias ecfisa, voy a probar ese código nunca se me hubiera ocurrido programar:

Código Delphi [-]
ASCDESC[Boolean(RadioGroup1.ItemIndex)]]);

Simple y eficaz como debe ser!

Saludos cordiales.


La franja horaria es GMT +2. Ahora son las 21:40:16.

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