Benutzung Quickreport
-
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; }
-
bei mir funktioert der QReport mit Query wie folgt:
- QuickReport auf Form
- darauf 2 Bands (BandType: rbColumnHeader, rbDetail)
- auf das "Spaltentitel"-Band die QRLabels
- auf das Detail-Band die QRDBTexts
- die QRDBText müssen mit einem DataSet und einem DataField verbunden werden:
-> DataSet ist das Query
-> DataField ist das Feld welches angezeigt werden soll z.B. Namesoweit zu den Einstellungen des Quickreport
beim Query die Abfrage erstellen und dann mit Open() starten, danach den Preview des Qucikreport
Query->Close(); Query->SQL->Clear(); Query->SQL->Add("select * from tabelle"); Query->Open(); FormX->QuickRep->Preview();OnNeedData hab ich nicht verwendet/nicht gebraucht
-
Ich hab mal das mit Table gemacht...müsste ja auch gehen!
Table1->next(); MoreData =! Table1->Eof;er zeigt mir aber trotzdem immer nur einen Datensatz an!
Wenn ich beende und wieder neu zeigt er mir dann einen anderen an....aber nie alle!
Warum denn nur nicht?Bin echt am verzweifeln!
-
@Linnea: naja aber bei DataField kann ich ja nix eingeben wenn ich ein Query habe...und den select zur laufzeit erstelle!
Da kommt ja "Keine SQL Anweisung"!oder hab ich was verpasst?
-
Kamill schrieb:
oder hab ich was verpasst?
Ja.
-
du MUSST bei DataField was eingeben und wenn nicht zur Entwurfszeit, dann zur Laufzeit
QRDBText1->DataField = "Name";
-
Wow!
@Linnea
Also ich hab jetzt mal bei DataField ein Feld meiner Datenbank eingegben, und es geht wirklich

Aber bei jedem Buchstabe den ich eingegebn hab kam immer "Keine SQL Anweisung verfügbar...kann ich das irgendwie umgehen?
@All: langsam sehen wir licht im tunnel!

-
Hallo
natuerlich kannst du das
einfach deinem Query ein SQL-Statement mitgeben
(SELECT * .....)
MfG
Klaus
-
Ja danke leute das funktioniert jetzt!
Jetzt hab ich ein neues problem...ich schreibs einfach mal,wenn ihr meinung seit neuer thread...mach ich einen auf!
Also ich meiner Datenbank eine neue Tabelle hinzugefügt...!
Und wenn ich nun mein Programm starte, kommt Exception, das das Feld "Masterrechte" nicht indiziert ist!
Es ist aber indiziert! (masterrechte ist in einer tabelle die es schon länger gibt!Und die form wo der Fehler verursacht wird hat auch garnix mit der neuen Tabelle zu tun...kann ich da jetzt irgendwas retten oder muss ich neue DB machen?
-
Hallo
schau doch mal mit dem Debuffer
Was/Wer/Wie/Wo der Fehler liegt
Wenn du nicht weiterkommst zeig uns den Codeabschnitt
MfG
Klaus
-
ok werd das morgen auf arbeit gleich machen!
Btw...erstmal schauen wir der debugger so funktioniert...hab den noch nie benutzt!
-
Also Fehler tritt hier auf:
void __fastcall TForm1::Edit1Exit(TObject *Sender) { Form3->Database1->Open(); Form3->Table1->Open(); Form3->Table1->SetKey(); Form3->Table1->Fields->Fields[0]->AsString = Edit1->Text; if (!Form3->Table1->GotoKey()) { } else { } }Fehler is DataBaseError: Feld Masterrechte ist nicht indiziert und kann nicht verändert werden!
Komisch is nur,das bei dem Edit Exit garnix mit Masterrechte gemacht wird!
Sondern nur der Key auf den eingegeben Benutzername gesetzt wird!
Tabelle besteht aus LName,Passwort,Rechte und Masterrechte!