QuickReport. Hilfe



  • Hallo,

    ich brauche ein bischen Hilfe von Fachleuten.

    Also ich erstelle einen Quickreport mit Daten usw. funktioniert auch alles super.

    Wenn ich aus QR-Preview drucken möchte aber der Drucker ist nicht erreichbar (zB ist aus), wie fange ich das ab dass er nach kurzer Zeit aufhört den Drucker zu suchen und halt ne Meldung schreiben "Drucker nicht erreichbar" oder so?



  • Ok das Problem war kein richtiges Problem, ist nur beim ersten mal aufgetretten dass es so lange gesucht hat.

    Jetzt hab ich ein anderes und zwar wenn ich erste mal

    Form2->QuickRep1->Preview();
    

    zeigt er mir alles super aber wenn ich das zweite mal das aufrufe zeigt er mir eine leere Form ohne QReport an.

    Wie kann ich es realisieren dass es jedes mal die Ansicht anzeigt.

    Mein QReport hat ein ereignis:

    void __fastcall TForm4::QuickRep1NeedData(TObject *Sender, bool &MoreData)
    {
    
      static int i=0;
      i++;
      if(i <= Form2->SG1->ColCount-1)
      {
        QR_nr->Caption = IntToStr(i);
        QR_geschw->Caption = Form2->SG1->Cells[i][1];
        QR_kraft->Caption = Form2->SG1->Cells[i][2];
        MoreData = true;
      }
      else MoreData=false;
    }
    


  • debug mal dein int i beim zweiten darstellen der form
    dann wird dir sicher was auffallen 🙂



  • oh man ich heul gleich 😞

    hab nun i global deklariert aber jetzt sehe ich nichts nur noch graues Bildschirm

    void __fastcall TForm4::QuickRep1NeedData(TObject *Sender, bool &MoreData)
    {
      i++;
      if(i<=Form2->SG1->ColCount-1)
      {
        QR_nr1->Caption = IntToStr(i);
        QR_geschw1->Caption = Form2->SG1->Cells[i][1];
        QR_kraft1->Caption = Form2->SG1->Cells[i][2];
        MoreData = true;
      }
      else MoreData=false;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm4::QuickRep1AfterPreview(TObject *Sender)
    {
      i=0;
    }
    //---------------------------------------------------------------------------
    

    beim schliessen des Preview setze ich ja i=0.
    wieso klappt das jetzt nicht?



  • Hallo

    "Klappt nicht" ist niemals eine ausreichende Fehlerbeschreibung. Aus deinen Beschreibung wird jedenfalls nicht klar was das Problem ist und wodurch es verursacht werden könnte. Dein Quellcodeauszug hilft da auch nicht weil zum Beispiel niemand weiß
    - wird i überhaupt initialisert? Wenn ja mit was?
    - was ist Form2->SG1? Was könnte ColCount für einen Wert haben?

    Desweiteren sind globale Variablen meistens schlecht. Du solltest besser einen Klassenmember nehmen. Und einen aussagekräftigeren Namen als "i" verwenden wenn der Wert eine so übergreifende Rolle spielt.

    Wie schon gesagt solltest du einfach mal mit den Degubber Schritt für Schritt deine Anwendung durchgehen und den Ablauf und die Werte wichtiger Variablen überprüfen.

    bis bald
    akari



  • oki ich schreib den Code verständlicher.

    void __fastcall TForm4::QuickRep1NeedData(TObject *Sender, bool &MoreData)
    {
      zeahler++;
      if(i<=Form2->StringGrid1->ColCount-1)     <---ColCount kann max. 100 werden 
      {
        QRLabel1->Caption = IntToStr(zeahler);
        QRLabel2->Caption = Form2->StringGrid1->Cells[zeahler][1];  
        QRLabel3->Caption = Form2->StringGrid1->Cells[zeahler][2];
        MoreData = true;
      }
      else MoreData=false;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm4::QuickRep1AfterPreview(TObject *Sender)
    {
      zeahler=0;
    }
    

    die Strings aus dem StringGrid1 werden alle richtig rausgelesen und übernommen.
    Zeahler ist eine einfache int Laufvariable. Das Problem liegt irgendwo ganz am Ende der Procedur glaube ich, bin mir nicht sicher. Der soll das Preview anzeigen zeigt aber nur ein graues Bild ohne QuickReport.

    Vielleicht liegts auch ganz wo anders deswegen frag ich auch hier.

    Bin für jeden Vorschlag dankbar.



  • und ja Zeahler wird beim FormCreate mit" int Zeahler=0; " initialisiert.



  • Hallo,

    Setzt doch mal den Zähler bei "QuickRep1BeforePrint".
    Außerdem steht in der if-Bedingung immernoch das "i".

    Nash


Anmelden zum Antworten