Benutzung Quickreport
-
Danke ich schaus mir an!
Wenn ich dann aber immernoch nich kapier,dann meld ich mich wieder!oki?
Danke!
-
Also hab mal bissl probiert...und langsam nimmts form an!
Hab in einer Form ne SQL Abfrage, wo das Ergebniss dann gedruckt (erstmal nur preview) wird. Der Quickreport ist auf andrer Form:
void __fastcall TForm4::Button15Click(TObject *Sender) { if (Form3->Query3->Active) Form3->Query3->Close(); Form3->Query3->Close(); Form3->Query3->SQL->Clear(); Form3->Query3->SQL->Add("select * from test where Name like '"+ Edit6->Text +"%'"); Form3->Query3->Open(); Form3->Query3->First(); Form10->QuickRep1->Preview(); }So nun zeigt er mir auf dem Quickreport auch was an....aber leider nur ein Ergebniss!
Immer das letzte!Wie erreich ich es das er alle anzeigt?
Habe Komponente:
QuickRep1
QRDBText1-3 (hier zeigt er ja ergebnisse an oder?)
QRBand (keine ahnung für was,zeigt nix an)
QRStringsBand (auch keine ahnung für was)!Bitte um Hilfe!
-
Hallo
du mußt unterscheiden zwischen einen QReport für einen (nämlich den aktuellen) Datensatz einer Abfrage/Tabelle und einem QReport für eine Liste von Datensätzen. Hab mit QReport selber noch nicht gearbeitet, schau dir das Modul grpList an. Darin wird ein QReport für eine Table definiert.
Und wenn man das Beispiel ausführt, kann man sehen, das der Menüpunkt 'Simple List with Group' genau diese Liste erstellt, aus allen Datensätzen der Tabelle.bis bald
akari
-
Die Bands sind das wichtigste bei einem QuickReport.Durch sie wird automatisch eine Liste erstellt und nicht nur 1 Datensatz.Ich glaube es wird noch nichtma gedruckt wenn es kein Band gibt.
Du musst aber alle anderen QuickReport-Komponenten wie QRDBText auf ein Band legen sonst fuktioniert es nicht.Das(die Bands wichtig sind) wird übrigens auch hier erklärt:
http://www.c-plusplus.net/forum/viewtopic.php?t=80156&highlight=quickreportIn der BCB-Hilfe gibt es auch eine Hilfe zu QuickReport, nur ist sie nicht wie andere komplett in die Hilfe integriert.Du musst die Menüpunkte Hilfe->C++Builder-Hilfe wählen und dann bei "Suchen" QuickReport oder QReport eingeben.
-
Also es geht einfach nich...habs eigentlich genau wie im Example nachgebaut...und es geht nicht!
Er zeigt mir garnix an!
-
Hallo
solange du uns keinen SourceCOde zeigst, können wir dir nicht helfen...
bis bald
akari
-
Naja SourceCode is ja nich viel...eben die SQL Abfrage!
void __fastcall TForm4::Button15Click(TObject *Sender) { if (Form3->Query3->Active) Form3->Query3->Close(); Form3->Query3->Close(); Form3->Query3->SQL->Clear(); Form3->Query3->SQL->Add("select * from test where Name like '"+ Edit6->Text +"%'"); Form3->Query3->Open(); Form3->Query3->First(); Form10->QuickRep1->Preview(); }Und eben die Komponenten der Quickreport (allerdings alles auf anderer Form)
Alle QRDBTexte mit Form4->Query3 verknüpft!
Quickreport mit Form4->Query3 verknüpft!Texte sind auf einer Band als Typ Detail!
Drüber band als ColumnHeader mit Labels, welche angeziegt werden!
Weiß nich worans liegt!
-
Hallo
also der Quellcode scheint in Ordnung.
Ich gehe davon aus, das kein SQL-Fehler kommt und es auch Datensätze gibt, die die Bedingung erfüllen.
Muß also am Report liegen. Hast du ein TQRBand um die sich wiederholenden Platzhalter gemacht? Und hast du den Report auf deine Query als DataSet verlinkt?bis bald
akari
-
Also:
Ja es gibt Datensätze die Kriterium erfüllen!
Ja DataSet steht auf Form3->Query3!
SQL Fehler kommt keiner...!Mit dem Platzhalter habe ich jetzt nicht verstanden...!
Da aber das Query3 zur Laufzeit verändert wird und somit nicht aktiv ist, konnte ich bei den texten natürlich nur DataSet, und kein DataField eingeben!
Hmm...weis nich!
-
Hallo
Mit Platzhalter meine ich alle Elemente von Report, die ein Wert aus der Datenbank bekommen, also z.B. TQRDBText.
Wenn du die Query zur Laufzeit änderst, mußt du eben danach die Verbindung wieder herstellen. Probier mal folgendes : Mach zur Entwurfszeit eine Abfrage ohne Bedingung. Dadurch bekommst du eine aktive Abfrage und du kannst die Verbindungen (Report->DataSet zu Query und Platzhalter zu Feldern und DataSet) zuweisen.
Teste, ob es mit der fester Abfrage funktioniert (also so wie im Beispiel). Wenn es nicht geht, mußt du den Report noch mal überprüfen.Wenn es geht, Ändere die Abfrage zur Laufzeit. Wenn du weiterhin Reporte erstellen kannst, ist dein Problem gelöst. Wenn nicht, mußt du dieVerbindungen, die zur Entwurfszeit festgelegt hast, noch mal nach Query-Open() nach mal zuweisen.
TQuery Query;
Query->Open();
...
TQuickReport->DataSet = Query;
TQRDBText->DataSet = Query;
TQRDBText->DataField = <Feldname>;ich hoffe das funktioniert.
bis bald
akari
-
Also es geht mit fester abfrage auch nich,er zeigt immer nur ersten datensatz an! Nicht mehr!
Meine Labels zeigt er auch nicht!
Kann mir nichtmal jemand sagen wie genau ein QR aufgebaut sein muss?
Also mit bänder etc...!
Will nur anzeigen aus einer Tabelle mit 5 verschiedenen Spalten!
Drüber paar labels und vielleicht die Sys Koponenten noch!
Mehr brauch ich garnich...!
Danke!
-
Hallo
da ich selber nicht mir QReport arbeite, kann ich nur sagen, schau dir das funktionierende Beispiel an und experimentiere ein bißchen damit, damit du die Komponenten verstehst.
bis bald
akari
-
Das hab ich ja schon...und eigentlich hab ichs auch verstanden!
Hab sogar das beispiel genau nachgebaut...und es geht nicht! Hab jede Koponenten verwendet,überll selbe einstellungen!
Hmm....was verwendest du denn eigentlich @ akari?
-
Hallo
vielleicht findest du ja im Netz noch andere Beispiele, die klarer aufgebaut sind.
Ich selber setze genau das selbe, d.h. aus einer Datenbank soll aus einem Template (Vorlage) ein Report erstellt werden. Dazu würde ich wahrscheinlich auch QReport nehmen, aber leider sollen meine Templates auch im Nachhinein vom Anwender änderbar sein. Und da müßte ich ja erst mal ein Editor für QReport schreiben..
Ich habe mich erstmal für HTML und RTF-Dateien entschieden, in die ich meine eigenen Platzhalter (d.h. die Feldnamen) reinschreibe, um ein Template zu erstellen. Um den Report zu bekommen, ersetze ich einfach alle Platzhalter durch Werte aus einem Datensatz. Da man die Dateien direkt (d.h. im Klartext) bearbeiten kann, ist es relativ einfach und gut kontrollierbar.bis bald
akari
-
Schau dir doch mal das Ereignis OnNeedData an.
mySQLQuery1->Next(); MoreData=!mySQLQuery1->Eof;
-
@ akari: kannst du mir vielleicht mal ein Beispiel von dir schicken? Würd mich interessieren ob das einfacher ist!
@ norman: was ist mit dem moredata?
-
Hallo
kannst du mir vielleicht mal ein Beispiel von dir schicken? Würd mich interessieren ob das einfacher ist!
Nein, das bringt nichts. Ich habe das oben sehr vereinfacht ausgedrückt. Das Erstellen eines Reports ist bei mir nur ein Teil einer ganzen Datenbank-Umgebung und kann nicht seperat ausgeführt werden.
Im Prinzip basiert es auf zwei Dingen :
Zuerst die Platzhalter aus einer von meinem Programm angezeigten Liste von vorhandenen Feldern einen Platzhalter in einen externen Editor (z.b. Word) per Clipboard kopieren, um ein Template zu erstellen.
Dann zum Erstellen des Reports Template-Datei kopieren, per fstream öffnen und mit den üblichen string-Methoden alle Platzhalter suchen und mit Daten aus Datenbank ersetzen, dann fertige Daten in Report-Datei speichern.Schau mal auf die Seite http://www.qusoft.com/. Das ist die Firma, die QReports entwickelt hat. Dort gibt es anscheinend weitere Downloads und Dokumentationen.
Das Problem muß lösbar sein. Wie Kamill geschrieben hat, ist der Event TQuickRep->OnNeedData interessant.bis bald
akari
-
Also MoreData hat sich erledigt...er zeigt mir trotzdem nur einen Datensatz an!
Muss ich bei den QDBRTexten was spezielles einstellen?
Bei dem Detailband?Oder spziellen Code?
Danke!
-
@ norman: was ist mit dem moredata?
Du wanderst durch dein Query (->Next()) bis EOF.
Wenn EOF erreicht dann setzt du MoreData = false;
ansonsten setzt du MoreData = true;
-
Muss ich bei den QDBRTexten was spezielles einstellen?
Nein
Bei dem Detailband?
Nein
Oder spziellen Code?
void __fastcall TForm1::QuickRep1NeedData(TObject *Sender, bool &MoreData) { mySQLQuery1->Next(); MoreData=!mySQLQuery1->Eof; }