Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Ordenar adoquery por nuevo campo calculado (https://www.clubdelphi.com/foros/showthread.php?t=43939)

lacovera 24-05-2007 13:46:05

Ordenar adoquery por nuevo campo calculado
 
hola a todos, he estado buscando pero no encuentro nada que me sirva sobre el tema, tengo un adoquery donde le he añadido un campo (que lo calculo en el OnCalcFields) es decir, que en el select no está, pero quiero ordenar los resultados del DBGrid por ese resultado, alguien tiene idea?

muchas gracias :p

karlaoax 24-05-2007 16:29:08

O sea, que no usas la clausula SELECT, y todo los haces en el evento ONCALCFIELDS, mmmm ya checaste la clausula ORDERBY ?

loxod 25-05-2007 02:46:48

Puedes utilizar:

adoquery1.Sort := 'campo1 asc';

Paoti 25-05-2007 03:07:48

porque no pruebas meter el calculo que hacs con los campos en el evento on calc field, meterlo en la consulta select, en caso que lo estes haciendo así.


por ejemplo.

calculas el total, y ordenas por la columna numero cinco.


Código SQL [-]
select id_articulo, nombre, cantidad, precio, (cantidad * precio) 
from articulos
order by 5


esto seria aplciado solo si en tu tabla o consulta select los calculos son a nivel registro.

lacovera 25-05-2007 09:50:54

viendo lo visto, mejor calcularlo en la consulta y luego ordenar :)
muxas gracias xlas respuestas!

Paoti 25-05-2007 20:36:37

en definitiva en la mejor forma......


así utilizas order by n

donde n, es el numero de la columna calculada.


saludos carnal.

opsmc 16-01-2021 17:34:11

campos calculados NO SON PARA sumar, restar o hacer operaciones básicas.
 
El problema es que los campos calculados NO SON PARA sumar, restar o hacer operaciones básicas. En mi caso el valor de los campos calculados son datos que no vienen ni siquiera en la misma base de datos. Es por esto que si alguien tiene una idea de como ordenar por uno de esos campos les agradecería muchísimo.

O si alguien conoce en que evento del ADOQuery puedo llamar al

AdoQuery1.Sort := 'Campo1 asc'

Es decir cual es el último evento o disparador que sucede al terminar de formarse el data set.

olbeup 25-01-2021 09:16:07

Hola opsmc,

Yo utilizo esto para ordenar cualquier columna aunque no este en el SELECT, mientras este en el DBGrid

Código Delphi [-]
type
  TIDFieldSorted = packed record
    FieldColumn: String;
    FieldSorted: String;
  end;

type
  TfrmForm1 = class(TForm)
    ...
    ...
    ...
  private
    // Columna de ordenación
    PFieldSorted: TIDFieldSorted;
  public
  end;

var
  frmForm: TfrmForm1

implementation

//      FUNCIONE DEVUELVE LA COLUMNA DEL DBGRID PASANDO EL NOMBRE DE LA COLUMNA //

// Devuelve la columna del DBGrid según FieldColumn
function GetGridColumn(Grid: TDBGrid; FieldColumn: String): TColumn;
var
  nI: Integer;
begin
  Result := nil;
  for nI := 0 to Grid.Columns.Count -1 do
    if (Result <> nil) then
      Break
    else
      if (Grid.Columns.Items[nI].FieldName = FieldColumn) then
        Result := Grid.Columns.Items[nI];
end;

// Ya en el DBGridTitleClick, pones esto
procedure TfrmForm1.DBGRid1TitleClick(Column: TColumn);
{$J+}
const
  PreviousColumnIndex : integer = -1;
{$J-}
begin
  if (Column = nil) and (PFieldSorted.FieldColumn = '') then
    Exit;

  if (Column = nil) then
    Column := GetGridColumn(DBGRid1, PFieldSorted.FieldColumn);

  with TCustomADODataSet(DBGRid1.DataSource.DataSet) do
  begin
    if PreviousColumnIndex > -1 then
      DBGRid1.Columns[PreviousColumnIndex].Title.Font.Style :=
        DBGRid1.Columns[PreviousColumnIndex].Title.Font.Style - [fsItalic, fsBold];

    Column.title.Font.Style :=
    Column.title.Font.Style + [fsItalic, fsBold];
    PreviousColumnIndex := Column.Index;

    if (Sort = '') and (PFieldSorted.FieldSorted <> '') then
      Sort := PFieldSorted.FieldSorted
    else
      if (Pos(Column.Field.FieldName, Sort) = 1) and (Pos(' DESC', Sort)= 0) then
        Sort := Column.Field.FieldName + ' DESC'
      else
        Sort := Column.Field.FieldName + ' ASC';

    PFieldSorted.FieldColumn := Column.FieldName;
    PFieldSorted.FieldSorted := Sort;
  end;
end;

end.
Espero que te sirva.

Un saludo.


La franja horaria es GMT +2. Ahora son las 16:14:23.

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