Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Ordenar registros de una tabla con mastersource (https://www.clubdelphi.com/foros/showthread.php?t=85064)

DavidSG4 22-01-2014 12:50:08

Ordenar registros de una tabla con mastersource
 
Buenas señor@s y gracias de antemano.
Delphi 5, paradox 7

tengo una tabla facturas y otra lineas de facturas, para visualizar los registros correspondientes a cada factura de lineas de facturas tengo puesto en lineas de factura como mastersource el datasource de la tabla facturas con el campo NFactura (asi consigo que cuando voy pasando de factura me muestra las lineas de factura que la corresponden).

mi problema:
Necesito poder ordenar el dbgrid (Tabla) por otros campos de lineas de facturas por ejemplo por Cantidad, utilizo indexfieldnames o indexfield y no da error pero claro pierdo el mastersource que me hace corresponder cada linea de factura con la factura que le corresponde.

alguna solución por favor.

ecfisa 23-01-2014 07:28:39

Hola DavidSG4.

Si es sólo a fin de visualizar, la propuesta que te hago es que en lugar de un TTable, utilices un TQuery para mostrar los datos de la tabla detail.

Ejemplo:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  with Query1 do
  begin
    DataSource := DataSource1;  // DataSource del TTable (asignable desde el Object Inspector)
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM TBDETALLE TD');
    SQL.Add('WHERE TD.REF_FACTURA  = :NFACTURA');
    SQL.Add('ORDER BY TD.CAMPO1, TD.CAMPO2,...');
    Open;
  end;
end;
A continuación de la cláusula SELECT, podes decidir que campos se mostraran poniendo sus nombres separados por una coma. Al usar un asterisco como en el ejemplo, se muestran todos los campos de la tabla detalle.

El código:
Código SQL [-]
TD.REF_FACTURA  = :NFACTURA
Establece la relación mediante los nombres de los campos involucrados (master/detail). Para que funcione deberás cambiarlos por los nombres reales que dichos campos tienen en sus respectivas tablas.

Luego de la cláusula ORDER BY podes enumerar los campos por los que se establecerá el órden (separados por comas) de la tabla detalle.

Saludos :)

DavidSG4 23-01-2014 10:01:02

respuesta solucion
 
buenas y gracias por vuestras respuestas.

lo he conseguido solucionar de la siguiente manera. He definido un indice secundario con el campo que vinculo y el campo con el que quiero ordenar.
"NFactura;campo de la columna" y mediante el dbgrid.column.fieldname veo que campos tengo que definir en la tabla como indexfieldsname.

Gracias de todos modos

Saludos


La franja horaria es GMT +2. Ahora son las 10:03:59.

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