QReport manuell füllen
-
in letzter Zeit wurden ja schon ein paar Beispiele geschrieben wie man
den QReport manuell mit Daten füllen kann aber leider klappt das bei mir
noch nicht.Auf dem QReport ist ein TQRBand und darauf ein TQRLabel
void __fastcall TForm1::QuickRep1NeedData(TObject *Sender, bool &MoreData) { static int Row = 1; AnsiString myString = "abcdefghijklmnopqrstuvwxyz"; if (Row <= 26) MoreData = true; else MoreData = false; if (MoreData) { QRLabel1->Caption = myString[Row]; Row++; } else Row = 1; }void __fastcall TForm1::Button1Click(TObject *Sender) { QuickRep1->Preview(); }er zeigt mir jetzt immer 'a' an. Wie bekomm ich den dazu das er ein
neues Band hinzufügt?
-
Was willst Du mit einem neuen Band?
Reicht Dir das eine nicht?
Bist du Dir sicher, daß Du den richtigen Ansatz verfolgst?
Da gab's doch gestern schon ein Frage dazu. Schau mal nach den Antworten.
http://www.c-plusplus.net/forum/viewtopic-var-t-is-139683-and-start-is-10-and-sid-is-188714a9a65919d5bc35c5f53687cec0.htmlDie passen auch hier.
-
Hallo,
hier ist der Link http://www.qusoft.com zum Hersteller von QReport schau
da mal unter FAQ da findest du Tut's.
-
Hallo,
wenn du mir damit sagen willst das ich erstmal die Grundlagen lernen soll
dann mach ich das gerne. Die Grundlagen von C++ kenn ich aber schon. Mir fehlen
die Grundlagen vom QReport das kann ich auch ganz offen zugeben. Mir ist zwar
klar wie ich den QReport von einer DB füllen lassen kann (dafür gibt es ja
ein Beispiel) aber wie das eben manuell geht weiß ich nicht und ich find auch
nichts darüber bis auf eben das Beispiel das bei mir leider nicht geht.Leider find ich in der Borland Hilfe nichts was mich weiterbringt. Deshalb
frag ich hier nach.
-
Bsp. in 5 min zusammengeschossen, gleich mit 4 Werten(DS) je Zeile (wie in Frage gestern).
void __fastcall TForm1::Button1Click(TObject *Sender) { m_nCounter=0; QuickRep1->Preview(); }void __fastcall TForm1::QRBand1BeforePrint(TQRCustomBand *Sender, bool &PrintBand) { m_nCounter = m_nCounter + 1; AnsiString asCounter = m_nCounter; ZeilenNummer->Caption= "Zeile " + asCounter; if (!ADOQuery1->Eof) { QRLabel1->Caption=ADOQuery1->FieldByName("auftrag")->AsString; ADOQuery1->Next(); } else QRLabel1->Caption="EOF"; if (!ADOQuery1->Eof) { QRLabel2->Caption=ADOQuery1->FieldByName("AUFTRAG")->AsString; ADOQuery1->Next(); } else QRLabel2->Caption="EOF"; if (!ADOQuery1->Eof) { QRLabel3->Caption=ADOQuery1->FieldByName("AUFTRAG")->AsString; ADOQuery1->Next(); } else QRLabel3->Caption="EOF"; if (!ADOQuery1->Eof) { QRLabel4->Caption=ADOQuery1->FieldByName("AUFTRAG")->AsString; } else QRLabel4->Caption="EOF"; }Deklaration
int m_nCounter; in unit1.hDie eigentliche Frage ist, hilft Dir das weiter?
Jetzt hast Du gesehen, wie ich das schnell und ohne Nachdenken gemacht habe.Das ist eine simple Lösung, keine schöne, keine intelligente!
-
Hallo!
Danke für deine Antwort. Leider hilft mir das nicht wirklich weiter.
Also was mir klar ist:
- wie man einen QReport mit Daten aus einer Datenbank füllt
- wie man Labels eines QReports mit Daten vollpacktDas einzigste wo es klemmt ist dem QReport zu sagen, dass nun eine
neue Zeile kommen soll. Ich nehme an der QReport wird dann wohl die
aktuelle Zeile fixieren und daher kann man dann wieder auf Label1 zugreifen.Es hängt bei mir wirklich nur an der einen Zeile
QReport->NextDataLine() oder was auch immer.
-
Bau das doch mal auf fixe Werte um!
Nimm OnNeedData zur Abfrage, ob weitere Daten (=Zeile !!!!) benötigt werden.
Zähle Deine Werte in BeforePrint hoch.Und Du wirst sehen, es funktioniert einwandfrei.
void __fastcall TForm1::Button1Click(TObject *Sender) { m_nCounter=0; m_nCounter2=0; QuickRep1->Preview(); } void __fastcall TForm1::QRBand1BeforePrint(TQRCustomBand *Sender, bool &PrintBand) { m_nCounter = m_nCounter + 1; AnsiString asCounter = m_nCounter; ZeilenNummer->Caption= "Zeile " + asCounter; QRLabel1->Caption=m_nCounter; m_nCounter2 = m_nCounter2 + 1; QRLabel2->Caption=m_nCounter; m_nCounter2 = m_nCounter2 + 1; QRLabel3->Caption=m_nCounter; m_nCounter2 = m_nCounter2 + 1; } //und in OnNeedData if (m_nCounter2=250) MoreData=false; else MoreData=true;Wo also liegt Dein Problem?
Die Lösung liegt direkt vor Deinen Augen.
-
Danke für deine Hilfe aber bei mir klappt das einfach nicht. Da muss irgendwas
anderes nicht stimmen. Ich hab auch versucht deine Beispiele umzuwandeln oder
das andere Beispiel das neulich gepostet wurde.Auf der Form:
- TButton (Button1)
- TQReport (QuickRep1) darauf TQRBand (QRBand1) darauf TQRLabel (QRLabel1)in der Form als private deklariert:
unsigned int iRow;OnNeedData:
void __fastcall TForm1::QuickRep1NeedData(TObject *Sender, bool &MoreData) { QRLabel1->Caption = "test " + IntToStr(iRow); iRow++; MoreData = iRow < 5; }Button1
void __fastcall TForm1::Button1Click(TObject *Sender) { iRow = 1; QuickRep1->Preview(); }normal müsste nun 4 mal "test " und die Nummer dastehen. Bei mir
kommt aber nur Test 1
NeedData wird laut Debugger 4 mal aufgerufen das passt also. Durch spielerei
mit verschiedenen Bändern hab ich es auch schon (leider nicht reproduzierbar)
geschafft bis zu 3 Zeilen darzustellen. Das war mit einem ChildBand.Also irgendwie funktioniert bei mir der QReport nicht so wirklich...
-
void __fastcall TForm1::QuickRep1NeedData(TObject *Sender, bool &MoreData)
{
QRLabel1->Caption = "test " + IntToStr(iRow);
iRow++;
MoreData = iRow < 5;
}Weisst du überhaupt für was MoreData zuständig ist?
MoreData heißt "mehr Daten" und ist ein bool Variable mit der du der Methode mitteilst ob noch Daten(Zeilen) kommen,
also es kommen noch Zeilen dann JA (true) und wenn nicht NEIN (false) übergeben.
-
und was mach ich mit dieser Zeile?
MoreData = iRow < 5;ich schaue ob iRow kleiner 5 ist (true) oder größer gleich 5 (false)
somit gibt es mehr Daten wenn iRow kleiner als 5 ist und sonst nicht.
Ist doch alles richtig oder? Ich hab schon verstanden was ich gemacht
hab aber nciht warum die anderen geposteten Beispiele bei euch funktionieren
und bei mir nicht.Muss man vom QReport noch irgendwelche Updates einspielen? Ich verwende die
Version die bei BCB6 dabei ist. Die BCB6 Updates (v4 + Linker) hab ich gemacht.
-
hast du QRBand1->BandType = rbDetail; eingestellt?
falls nicht mach das mal
-
void __fastcall TForm1::QuickRep1NeedData(TObject *Sender, bool &MoreData) { QRLabel1->Caption = "test " + IntToStr(iRow); iRow++; MoreData = iRow < 5; }Ist dir ist bewusst, das er so auch kein "test 4" anzeigen kann ?
-
Danke! Es lag am BandType
