Lo que hago yo con los reportes es tener un DataSet para ellos mismos.
Los componentes del Form (DBNavigator, DBGrid, DBEdit, etc.) tiran de un DataSource que a su vez tira de un DataSet.
Este DataSet se utiliza para hacer las inserciones, modificaciones y bajas.
Para los listados tengo otro DataSet que previo al listado se filtra según lo que se desee listar.
De esta manera, el DataSet de trabajo mantiene la posición y estado, mientras el DataSet de listado se va moviendo por los registros filtrados.
En tu caso, parece que el DataSet de trabajo es ADOQuery1.
Prueba crear un segundo DataSet ADOListado, en el que estén los registros que quieres listar.
El QuickReport y los componentes QRDBText deben tirar de ADOListado.
Utiliza QuickRep1BeforePrint para poner en visible/invisible el componente que corresponda a medida que va avanzando por los registros a listar.
Mirando en internet, he visto que también exite el método OnBeforePrint para la banda.
http://www.admind.info/help/system/i...ml?tqrband.htm
Supongo que es allí donde debes poner el código, ya que la banda es la que va pasando por cada registro y es en ese momento donde el valor de cession es el del regisro que se está imprimiendo.
Código Delphi
[-]
procedure [Form_o_Datamodule].Listar;
begin
ADOListado.Close;
...
ADOListado.Open;
FRMRELEVE.QuickRep1.DataSet:=ADOListado;
FRMRELEVE.QRDBText1.DataSet:= ADOListado;
FRMRELEVE.QRDBText1.DataField:='description' ;
FRMRELEVE.QRDBText3.DataSet:= ADOListado;
FRMRELEVE.QRDBText3.DataField:='notetotal';
FRMRELEVE.QRDBText2.DataSet:= ADOListado;
FRMRELEVE.QRDBText2.DataField:='notetotal';
FRMRELEVE.QuickRep1.Preview;
end;
procedure [Form_o_Datamodule].QRBand1BeforePrint(Sender: TObject; var PrintBand: Boolean);
begin
if ADOListado.FieldValues['cession'] ='II' then
begin
FRMRELEVE.QRDBText3.Visible := True;
FRMRELEVE.QRDBText2.Visible := False;
end
else
if ADOQuery1.FieldValues['cession'] ='I' then
begin
FRMRELEVE.QRDBText3.Visible := False;
FRMRELEVE.QRDBText2.Visible := True;
end;
end;