Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Fastreport zeigt Daten erst beim zweiten Aufruf (https://www.delphipraxis.net/214972-fastreport-zeigt-daten-erst-beim-zweiten-aufruf.html)

rokli 15. Apr 2024 09:57

Fastreport zeigt Daten erst beim zweiten Aufruf
 
Moin,

mit dieser Funktion drucke ich einen einfachen Report, der aus Kopfdaten und ein paar Zeilendaten besteht.

Delphi-Quellcode:
procedure TfrmMain.p_PrnStkLi;
{-----------------------------------------------------------------------------------------------------------------------
   Stückliste drucken
-----------------------------------------------------------------------------------------------------------------------}
begin
   iPrn      := 0; // Seitenzähler

   qryRep.Close;  // Kopfdaten
   qryStkLi.Close; // Zeilendaten

   qryRep.ParamByName('AB1').AsInteger      := qryLi.FieldByName('AB1').AsInteger; // eindeutige Auftragsnummer besteht aus AB1 und ABFolge in zwei Feldern
   qryRep.ParamByName('ABFolge').AsInteger      := qryLi.FieldByName('ABFolge').AsInteger;
   qryRep.Open();

   qryStkLi.ParamByName('AB1').AsInteger      := qryLi.FieldByName('AB1').AsInteger;
   qryStkLi.ParamByName('ABFolge').AsInteger   := qryLi.FieldByName('ABFolge').AsInteger;
//   qryStkLi.Open(); // Versuch
//   qryStkLi.Close;  // Versuch
   qryStkLi.Open();

   TfrxMemoView(frxRep.Pages[1].FindObject('memHeader')).Text   := 'Vorfertigung';
   TfrxMemoView(frxRep.Pages[1].FindObject('memName')).Text   := ', 04-2024';

   iPrn      := qryRep.FieldByName('Erledigt').AsInteger;
   if iPrn = 0 then
      TfrxMemoView(frxRep.Pages[1].FindObject('memKopie')).Text:= ''
   else
      TfrxMemoView(frxRep.Pages[1].FindObject('memKopie')).Text:= 'KOPIE ' + IntToStr(iPrn);
   inc(iPrn);

   frxRep.PrepareReport(true);
   frxRep.ShowPreparedReport;

   qryRep.Close;
   qryStkLi.Close;
end;
Die Tabelle qryRep enthält die Kopfdaten und qryStkLi enthält die Zeilendaten, die im Masterband angezeigt werden sollen.
iPrn steuert lediglich, ob es der erste Ausdruck ist, oder ob eine Kopie (und die wievielte) gedruckt wird.

Wenn ich das erste mal den Button 'Drucken' drücke und damit die Procedure p_PrnStkLi durchlaufe, wird der Kopf gedruckt. aber der Zeilenbereich ist leer.
Wenn ich ein zweites Mal den Button drücke, ist alles ok - gleichgültig, ob ich die gleichen Daten verwende, oder einen anderen Auftrag aufrufe.

Ich habe bereit ein zusätzliches Grid mit dem Inhalt aus qryStkLi eingebaut - dort stehen die Daten bereits nach dem ersten Klick bereit.

Delpht 10.4
FastReport 6.7.9 prof.

Hat das schon Mal jemand gehabt und eine Idee, wie ich dem beikomme?

Danke!

mytbo 15. Apr 2024 11:23

AW: Fastreport zeigt Daten erst beim zweiten Aufruf
 
Zitat:

Zitat von rokli (Beitrag 1535752)
Hat das schon Mal jemand gehabt und eine Idee, wie ich dem beikomme?

Ein Artikel mit Quelltext zum Thema FastReport und Datenquellen.

Bis bald...
Thomas

haentschman 15. Apr 2024 12:11

AW: Fastreport zeigt Daten erst beim zweiten Aufruf
 
Hallöle...8-)

Hast du jeweils nach dem Open (qryRep.Open, qryStkLi.Open) die Datensätze mal anzeigen lassen? :wink:

rokli 15. Apr 2024 12:35

AW: Fastreport zeigt Daten erst beim zweiten Aufruf
 
Hi haentschman,

die aus qryStkLi schon, dass sind ja die, die nicht kommen. Die aus der anderen Tabelle nicht, da die auf dem Beleg ja drauf stehen.

'Ich habe bereit ein zusätzliches Grid mit dem Inhalt aus qryStkLi eingebaut.. ' weil ich irgendwo gelesen habe, dass es zu Verzögerungen kommen kann, wenn die DB nicht schnell genug antwortet.
Das ist aber hier nicht der Fall, weil das Hilfsgrid ordentlich gefüllt wurde.

Ist das Problem eigentlich neu? Ich meine, dass hätte ich schon mal gehabt.

Hallo mytbo,
um das nachvollziehen zu können, lade ich mir mal Deine Bereitstellung herunter und seh mir das an. Danke.

haentschman 15. Apr 2024 13:21

AW: Fastreport zeigt Daten erst beim zweiten Aufruf
 
Zitat:

weil ich irgendwo gelesen habe, dass es zu Verzögerungen kommen kann, wenn die DB nicht schnell genug antwortet.
Quatsch...:P Wer das geschrieben hat komisches Zeug geraucht.

Wie weist du die Datenmenge qryStkLi der frxxx Datenmenge zu? ObjektInspector?

Hänge mal den FR-Report und TfrmMain hier mal an...

himitsu 15. Apr 2024 13:24

AW: Fastreport zeigt Daten erst beim zweiten Aufruf
 
Wenn es zu Verzögerungen kommt, dann wartet das OPEN oder spätestens der Lesezugriff, wenn Records nachgeladen werden.
So oder so, hängt das Programm nur kurz, wenn es zu einer Verzögerung kommt, aber die Daten sind dann immer da.

rokli 16. Apr 2024 06:01

AW: Fastreport zeigt Daten erst beim zweiten Aufruf
 
Moin,

mein Workaround:

Delphi-Quellcode:
   
   frxRep.PrepareReport(true);   // erster Aufruf
   frxRep.PrepareReport(true);   // zweiter Aufruf
   frxRep.ShowPreparedReport;
Seitdem ich den Prepare 2 x aufrufe, passiert das nicht mehr ... nicht besonders schön, aber geht.

Danke für Eure Mühen!


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz