Benutzung Quickreport



  • @ 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. Name

    soweit 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! 🙂


  • Mod

    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?


  • Mod

    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!



  • Achso, genau bei:

    if (!Form3->Table1->GotoKey())
    

    Ich hab auch mal ein Backup der Datenbank eingespielt...da tritt fehler nich auf...also liegt definitiv am Programm!



  • Boach was schreib ich für Mist:

    [quote="Kamill"]Achso, genau bei:

    Ich hab auch mal ein Backup der Datenbank eingespielt...da tritt fehler nich auf...also liegt definitiv am Programm!

    Damit mein ich,das der Fehler vorher bei dem Backup nicht auftrat...aber jetzt auch da auftritt...also liegt es nicht an Datenbank!



  • Man kann sich das Leben natürlich auch selbst schwer machen.
    Ich würde Dir empfehlen, Linneas Beiträge noch mal sehr aufmerksam durchzulesen.

    Mit welcher DB arbeitest Du?

    Edit: Das nur ein Datensatz ausgeben wird, liegt im Regelfall daran, dass im QR die Eigenschaft DataSet nicht gesetzt ist.



  • Hmm....Linneas Beiträge beziehen sich doch auf Quickreport...und nichtmehr auf den Fehler oder?
    Wenn du weißt woran es liegt...sag es mir bitte!!!

    Ich benutze Access!


Anmelden zum Antworten