Benutzung Quickreport
-
Hi Leute...
eins vornweg, ich hab schon in der hilfe nachgeschaut und etwas im Forum gesucht...aber irgendwie nix passendes gefunden!
Also mein Problem:
Habe eine Form1 mit einem DBGrid...wo ich Daten aus einer DB lese und anzeige...und diese Daten will ich drucken!
Wird wohl am besten mit QR funktionieren...habs aber irgendwie nicht raus!Also was brauche ich genau daür? Also QReport? Voransicht...Bands oder keine?
Und wie lautet der Syntax um es zu drucken?
Also Form2->QuickReport1->??!
Danke schonmal
Kamillenbblüte...=)
-
Hallo
schau dir die mitgelieferten Beispiele vom BCB an :
<BCB_PATH>\Examples\DBTasks\QuickRptbis bald
akari
-
Hmm...damit kann ich auch nich direkt was anfange...weil es ja nix mit einem DBGrid zu tun hat und so!
Kann mir nich jemand helfen?
-
Hallo
schau dir mal das Beispielt genauer an !
aus readme.ext:BESCHREIBUNG:
Dieses Beispiel verknüpft 2 Tabellen, customer.db und orders.db, auf dem Wege einer
SQL-Abfrage. Die Ergebnisse werden in einem DBGrid (Register "Datensteuerung" auf
der Komponentenpalette); die SQL-Anweisung findet man in der Eigenschaft
'SQL' des TQuery-Objekts auf dem Formular.DEMONSTRIERT:
TQuery, TDataSource, TDBGridund eine SQL-Abfrage findest du im Modul 'ManyGrpForm'.
ansonsten such bei Google.
/Edit : Der Info-Text passt wohl nicht zum Beispiel. Ist aber auch egal. Das DBGrid ist unwichtig, die Abfrage für das DBGrid ist entscheident!
bis bald
akari
-
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?