Quickreport Zeilenumbruch



  • Hallo,

    Also ich habe folgendes Problem:

    Will mit Quickreport eine Rechnung erstellen. Klappt soweit alles, bis auf die Bezeichnung. Die passt nicht auf die Zeile und sollte durch einen Zeilenumbruch auf der nächsten Zeile weitergehenIch greife auf einen Text einer Datenbankabfrage zu, muss also z.B. QRDBText nehmen. Dieser erlaubt aber keinen Zeilenumbruch, zumindest habe ich es nicht hinbekommen. Dann habe ich ein QRDBRichedit auf das Details Band gelegt und dann dort das Dataset und das Bezeichnungsfeld der Datenbank angegeben, aber leider wird dort nichts angezeigt. (das DB Feld ist ein Textfeld)

    Habe übrigens das ganze Forum und auch google nach einem Hinweis durchsucht aber nichts bekommen.

    So sollte es aussehen:

    ReNr: Bezeichnung: Datum:
    111 Lalalalalalalaa 11.01.01
    weiterlala

    112 bezeichnung2 02.02.01

    thnx schonmal für eure Hilfe



  • Hi,
    versuchs doch mal mit einem normalen QRMemo oder mehreren QRLabels.
    Die Daten kann man mit dem Ereignis OnNeedData() aus der Datenbank lesen und in die Labels einfügen. Da die Datenquelle bereits offen ist, mußt Du immer nur den aktuellen Wert auslesen und in das Memo oder die Labels eintragen.



  • Hi, danke für deine schnelle Hilfe,

    Also mir sind noch ein paar Sachen unklar. Diese onNeedData() Funktion ist die des QReports. Wie lese ich nun den akutellen Datensatz aus der Dataset?

    OnNeedData()
    {
    QRMemo->Lines-> was kommt also hier hin für das lesen des jeweiligen Datensatzes.
    }

    Mir ist es vorallem wichtig dass ich nicht alles dynamisch erzeugen muss, das wäre sonst wesentlich mehr aufwand, z.b. mit den positionen und so.

    cu



  • Ruhig... Dynamisch erzeugen brauchst Du nix. Und wenn ich so darüber nachdenke, ist die BeforePrint Mehthode wahrscheinlich besser geeignet.
    Ich gehe davon aus, dass die Datenquelle bereits geöffnet ist. Dann brauchst Du nicht anderes als eine simple Zuweisung.
    Was bei dir genau hinkommt, kann ich ohne weitere Informationen nicht sagen. Aber schau Dir mal das untere Beipiel an. Dort wird, in Abhängigkeit eines Wertes in dem aktuell zu druckenden Datensatz die Farbe des Feldes gändert.

    FormVPMain enthält die Datequelle qdaa, aus der gedruckt werden soll.

    void __fastcall TFormPrintReport::DetailBand1BeforePrint(
    		TQRCustomBand *Sender, bool &PrintBand)
    {
             // hier wird auf bestimmte Werte in der DB geprüft 
    	if (FormVPMain->qdaaAuftr_art->AsString == "ABR" && FormVPMain->qdaaKaufpos->AsInteger == 1)
    	{ 
    		QRDBArtnr->Font->Color = clRed;  // und die Farbe angepaßt
    	}
    	else
    	{
    		QRDBArtnr->Font->Color =  clBlack;
    	}
    }
    

    Wenn qdaaAuftr_art nun das Feld Wäre, welches Du ausgeben willst:

    QRMemo1->Text = FormVPMain->qdaa_Auftr_art->AsString;
    

    Das war es schon. Ich hoffe es hilft Dir.



  • Hi, Danke erstmal für deine Antwort. Das klappt noch nicht ganz, wie du es beschreibst.

    Ich habe eine Komponente DAODatabase1, DAOQuery1 und DataSource1.
    DAODatabase1=auswahl der datenbank.
    DAOQuery= auswahl der DAODatabase, sowie SQL Abfrage. auf DAOQuery greifen ja die QRDBText z.b. zu und ich kann dann das Feld auswählen und so.

    meinst du jetzt mit qdaa die DAOQuery als datenquelle,oder DataSource1?
    Dem Namen nach würde ich sagen DataSource(siehe englische übersetzung) aber er kennt nichts das DataSource1_FeldName->AsString heisst, sodass ich diesen wert zuweisen könnte. (das gleiche habe ich mit DAOQuery1 auch probiert, hier müssten ja eigentlich alle Daten bereits enthalten sein, da ja die QRDBText z.b. den Inhalt anzeigen kann.

    Es bleibt also immer noch das Problem, was auf der rechten seite steht von
    QRMemo1->Text=...........;

    wäre toll wenn du mir das nochmal genau beschreiben könntest.
    thnx
    cu



  • Sorry, hätte ich wohl dazu schreiben sollen.
    In dem Beispiel oben ist qdaa eine TQuery und das Feld ist Auftr_art.

    Zugriff auf die Query hast Du ja aus dem Report, sonst würde gar nichts gedruckt werden. Aber ich kann nicht nachvollziehen, warum Du keinen Zugriff auf die einzelnen Felder hast. Du mußt auch nicht innerhalb der Datenmenge navigieren, das macht der QuickReport für dich. Du mußt eigentlich nur den Feldwert auslesen und in das Memo schreiben.



  • Also das Problem ist folgende,
    es kann z.b. nicht qdaa_Feldname->AsString heissen, weil das ja genau so ein name sein könnte von einem anderen Query. Es müsste also wenn, dann qdaa->feldname, oder qdaa.feldname.
    Aber beide Syntax funktionieren nicht.

    Es liegt also am Zugriff des einzelnen Feldes. Das Beispiel von oben kann nicht ganz stimmen.

    Wäre echt supa, wenn du da noch was wüsstest, ist das einzige das ich noch lösen muss damit ich das ganze programm fertig bekomm.
    thnx nochmal im vorraus für dein engagement.

    cu



  • Das Beispiel oben stammt aus einem meiner Programme. Das funktioniert, bei mir, einwandfrei. Es kann nicht der Name eines anderen Queries sein, weil die alle unterschiedlich heißen müssen. Indentische Namen können nur in verschiedenen Units verwendet werden. Aber auch dann ist das kein Problem, da Du ja über die Unit referenzieren mußt.

    Verwendest Du persistente Felder? Mußt Du eigentlich, oder
    wie versorgst Du den QuickReport mit Werten?



  • So,jetzt bin ich wieder da.
    Habe das Problem folgendermaßen gelöst.
    Habe einfach ein normales QRMemo benutzt und beim DetailsBand unter
    BeforePrint()
    {
    DBMemo1->Lines->SaveToFile("dbmemospeicher.xx"); //Normales DB Memo, welches den Inhalt der Beschreibung enthält.
    QRMemo1->Lines->LoadFromFile("dbmemospeicher.xx");
    }

    Das funktioniert einwandfrei.

    achja und was den gleichen namen angeht.

    Wo ist der Unterschied zwischen einem Query welches "qdaaAuftr_art", was ja legitim ist als name, mit unterstrich, und einem query welches nur "qdaa" heisst, aber beidem dann beim zugriff "qdaaAuftr_art->AsString" lautet um auf das Feld "Auftr_art" zuzugreifen. Verstehste jetzt was ich meine?



  • qdaa->FieldByName("Auftr_art")...
    


  • ah, ok diese syntax klingt logisch, hätte ich das nur früher gehabt, aber egal, besser spät als nie.
    thnx
    cu


Anmelden zum Antworten