Ver Mensaje Individual
  #2  
Antiguo 23-07-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
He intentado contestar 2 veces a este post, y la verdad, no sé como empezar .

Código Delphi [-]
memo1.Lines:= CodigoSQL;

1º- CodigoSQL se ha creado???, lo correcto sería crearlo antes de hacer una asignación:
Código Delphi [-]
  CodigoSQL := TStringList.Create;

2º- Para las asignaciones no te acostumbres a usar Lines directamente, el mejor método es uno de estos:
Código Delphi [-]
  Memo1.Lines.Assign(codigoSQL); // o bien:
  Memo1.Lines.Add(CodigoSQL.TEXT); // o bien
  Memo1.Lines.Add(CodigoSQL);

Este error lo tienes cada vez que trabajas con todos los TStrings. Cuando metes el memo funciona, porque el TMemo implementa la asignación de Lines llamando al método Assign, pero el TStrings no lo tiene. Estudia la ayuda sobre estos métodos.

Lo más simple, es que pongas a String el CodigoSQL.

Código Delphi [-]
  var CodigoSQL :String
       OrderBy:String; // aqui guardarmos el campo por el que se va a ordenar

Código Delphi [-]
procedure TFrmBaseGrid.DBGrid1TitleClick(Column: TColumn);
{$J+}
const
  PreviousColumnIndex : integer = -1;
{$J-}
Var
  Campo: String;
  I,OrderByPos: Integer;
begin
 try
  DBGrid1.Columns[PreviousColumnIndex].title.Font.Style :=
  DBGrid1.Columns[PreviousColumnIndex].title.Font.Style - [fsBold];
 except
 end;
 Column.Title.Font.Style:= Column.Title.Font.Style + [fsBold];
 PreviousColumnIndex := Column.Index;
 {la parte anterior la consegui gracias a una liga del club
  la siguiente parte es la que ordena}

  OrderByPos := pos (' Order by ', codigoSQL);
  if OrderByPos > 0 then // ya estaba ordenado
    delete(codigoSQL, OrderByPos, 255);
    // sabemos que la clausula order by es lo ultimo del sql,
    // Delete intenta borrar 255 letras desde la posición OrderByPos, 
    // Si no hay 255 letras, borrará hasta el final del SQL.


  if Orden then 
    codigoSQL := CodigoSQL + ' Order by ' + OrderBy
    // OrderBy se asigna cuando hacemos clic en Proveedores Tile Click
  else
  begin
    codigoSQL := CodigoSQL + ' Order by ' + OrderBy + ' desc';
    Orden:= True;
  end;
   End;
end;

Para llamar:
Código Delphi [-]
procedure TFrmProveedores.DBGrid1TitleClick(Column: TColumn);
Begin
  CodigoSQL:= DtmDatos.pFIBproveedores.SelectSQL.TEXT;
  OrderBy  := column.Field.FieldName; // guardamos el campo por el 
  // que queremos ordenar

  inherited; // ya hemos asignado las 2 propiedades codigoSQL y OrderBy
  // llamamos a inherited
 

  DtmDatos.pFIBproveedores.Active:= False;
  DtmDatos.pFIBproveedores.SelectSQL.TEXT := codigoSql;
 DtmDatos.pFIBproveedores.Active:= True;
end;

En lugar de variables, yo hubiese usado propiedades, pero creo que así es más claro.

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 23-07-2005 a las 12:26:30.
Responder Con Cita