unit forden;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Grids, DB, DBClient,STRUTILS;

type
  TORDEN = class(TForm)
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    Button1: TButton;
    Button3: TButton;
    Button4: TButton;
    SGORDEN: TStringGrid;
    SGORDEN1: TStringGrid;
    Button2: TButton;
    CDS: TClientDataSet;
    Label1: TLabel;
    Label2: TLabel;
    CBORDEN: TComboBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    SORDEN:STRING;
    nombre:string;

  end;

var
  ORDEN: TORDEN;

implementation

{$R *.dfm}

procedure TORDEN.Button1Click(Sender: TObject);
VAR AUX,AUX1:STRING;
begin
   IF  SGORDEN1.Row <> 0 THEN
   BEGIN
      AUX1 := SGORDEN1.Cells[0,SGORDEN1.Row];
      AUX  := SGORDEN1.Cells[0,SGORDEN1.Row-1];
      SGORDEN1.Cells[0,SGORDEN1.Row]:= AUX;
      SGORDEN1.Cells[0,SGORDEN1.Row-1] := AUX1;
      SGORDEN1.Row := SGORDEN1.ROW - 1;
   END;
end;

procedure TORDEN.Button2Click(Sender: TObject);
VAR AUX,AUX1:STRING;
begin
   IF SGORDEN1.Row <> (SGORDEN1.RowCount -1) THEN
   BEGIN
      AUX1 := SGORDEN1.Cells[0,SGORDEN1.Row];
      AUX  := SGORDEN1.Cells[0,SGORDEN1.Row+1];
      SGORDEN1.Cells[0,SGORDEN1.Row]:= AUX;
      SGORDEN1.Cells[0,SGORDEN1.Row+1] := AUX1;
      SGORDEN1.Row := SGORDEN1.ROW + 1;
   END;
end;

procedure TORDEN.Button3Click(Sender: TObject);
VAR I:INTEGER;
    AUX :STRING;
begin
   IF (SGORDEN1.RowCOUNT > 0) AND (SGORDEN1.CELLS[0,0] <> '') THEN
   BEGIN
     I := SGORDEN1.ROW;
     AUX :=SGORDEN1.Cells[0,SGORDEN1.ROW];
     WHILE I < SGORDEN1.RowCount-1 DO
     BEGIN
       SGORDEN1.Cells[0,SGORDEN1.ROW] := SGORDEN1.CELLS[0,SGORDEN1.Row+1];
       SGORDEN1.ROW := SGORDEN1.ROW +1;
       I:= I+1;
     END;
     SGORDEN1.CELLS[0,SGORDEN1.ROW] := '';
     SGORDEN1.Row:=0;
     SGORDEN1.RowCount := SGORDEN1.RowCount -1 ;
   I:=0;
   IF (SGORDEN.CELLS[0,0] <> '') THEN
      SGORDEN.ROWCOUNT := SGORDEN.ROWCOUNT +1;
   WHILE I < SGORDEN.ROWCOUNT DO
   BEGIN
      IF SGORDEN.Cells[0,I]<>'' THEN
         I:=I+1
      ELSE
      BEGIN
         SGORDEN.Cells[0,I]:= AUX;
         I:= SGORDEN.ROWCOUNT + 1;
      END;
   END;
 END;
end;

procedure TORDEN.Button4Click(Sender: TObject);
VAR I:INTEGER;
    AUX :STRING;
begin
   IF (SGORDEN.RowCOUNT > 0) AND (SGORDEN.CELLS[0,0] <> '')  THEN
   BEGIN
     I := SGORDEN.ROW;
     AUX :=SGORDEN.Cells[0,SGORDEN.ROW];
     WHILE I < SGORDEN.RowCount-1 DO
     BEGIN
       SGORDEN.Cells[0,SGORDEN.ROW] := SGORDEN.CELLS[0,SGORDEN.Row+1];
       SGORDEN.ROW := SGORDEN.ROW +1;
       I:= I+1;
     END;
     SGORDEN.CELLS[0,SGORDEN.ROW] := '';
     SGORDEN.Row:=0;
     SGORDEN.RowCount := SGORDEN.RowCount -1 ;
   I:=0;
   IF (SGORDEN1.CELLS[0,0] <> '') THEN
      SGORDEN1.ROWCOUNT := SGORDEN1.ROWCOUNT +1;
   WHILE I < SGORDEN1.ROWCOUNT DO
   BEGIN
      IF SGORDEN1.Cells[0,I]<>'' THEN
         I:=I+1
      ELSE
      BEGIN
         SGORDEN1.Cells[0,I]:= AUX;
         I:= SGORDEN1.ROWCOUNT + 1;
      END;
   END;
  END;
end;

procedure TORDEN.FormShow(Sender: TObject);
  var aux,AUX1:string;
    i:integer;
begin
  i:= 0;
  aux := '';
  SGORDEN.RowCount := CDS.Fields.COUNT;
  while i < CDS.FIELDS.Count   do
  begin
    AUX1:=CDS.Fields[i].Name;
    SGORDEN.Cells[0,I] := (rightstr(AUX1,LENGTH(AUX1)-LENGTH(nombre)));
    i:= i+1;
  end;


end;

procedure TORDEN.FormCreate(Sender: TObject);
begin
   SORDEN:='';
   nombre:='';
end;

procedure TORDEN.BitBtn1Click(Sender: TObject);
VAR I:INTEGER;
begin
   I:=1;
   IF SGORDEN1.Cells[0,0] <> '' THEN
    IF TRIM(CBORDEN.Text) = 'ASCENDENTE' THEN
      SORDEN := SGORDEN1.Cells[0,0]+ ' ASC '// SE PUEDE ORDENAR ASCENDENTE
      // Y DESCENDENTE POR CAMPOS INDIVIDUALES.
    ELSE
      SORDEN := SGORDEN1.Cells[0,0]+' DESC ';
   WHILE SGORDEN1.Cells[0,I] <> '' DO
   BEGIN
     SORDEN := SORDEN + ',' + SGORDEN1.CELLS[0,I];
     I:=I+1;
   END;
   IF SGORDEN1.Cells[0,0] <> '' THEN
      SORDEN := ' ORDER BY ' + SORDEN
end;

end.
