![]() |
Quickreport und DB-Felder
Hi,
muß mich so langsam mal an das Ausdrucken herantasten. Deshalb habe ich mir mal den Quickreport angeschaut. Page-Header, -Footer usw. ist schon klar, aber ich krieg die Verbindung zu meinen Daten nicht hin. 8) Ich habe mein Datenmodul mit USES in das Programm aufgenommen, aber finde nicht, wo ich die einzelnen Felder herkriege. Als Dataset habe ich meiner Ansicht nach das Richtige angegeben. Aber irgendwo hänge ich fest. Gruß Hansa P.S.: Habe gerade noch einmal nachgeschaut und festgestellt, daß über Qreport nicht viel zu finden ist. Was sollte man denn ansonsten verwenden? Daß der QR Macken hat, habe ich auch schon gelesen. |
Hallo Hansa,
das mit QReport ist wie mit Paradox: es gibt schon einige Macken, aber man kann dennoch sehr umfangreiche Anwendungen mit beiden erstellen. Nun zu deiner Frage: In der Quickreport Komponente selbst gibt es die Eigenschaft DataSet, die muss auf die dem Report zugrundeliegende Datenmenge verweisen. Um die Daten anzuzeigen fügst du ein Detailband ein. In diesem platzierst du dann die datensensitiven Komponenten z.B. QRDBText. Dort setzt du DataSet und DataField so, dass das gewünschte Feld angezeigt wird. |
Hi MrSpock,
Vielleicht kannst Du mir nochmal helfen. Wollte heute schon nichts mehr machen, habe aber gerade einen PageHeader gedruckt, das wars aber auch schon :mrgreen: Zitat:
Gruß Hansa |
Hi,
letzteres hat sich erledigt. Das Datamodul muß in das Projekt aufgenommen werden mit "Add to Project". Ansonsten steht das Dataset nicht immer zur Verfügung. Fiel mir dadurch auf, daß ich in der IDE das Programm und das datamodul geöffnet hatte. Dann gings, nur mit dem Programm eben nicht. :mrgreen: Das erklärt auch seltsame Sachen an anderer Stelle. Wann und wo Add to Project gemacht werden muß ist mir aber trotzdem nicht richtig klar. Jetzt nochmal zum QR. Also ich habe jetzt einen PageHeader, einen ColumnHeader und komme auch an die Datensätze ran. Leider druckt er mir aber pro Seite nur einen Kunden. Ich habe halt ins DetailBand die Adressen-DBfelder einmal eingefügt und gehofft, er würde drucken bis zum Seitenende und wieder mit den Headern beginnen. Pustekuchen. Gruß Hansa @MrSpock : Wenn auch viel schlimmes über den Quickreport gesagt wird, glaube ich, daß Du Recht hast. Gestern Abend habe ich mir zum ersten mal QR angesehen und mußte erst mal schauen, ob ich den überhaupt habe bzw. wo er ist. Heute mittag habe ich schon einen Report aus der DB geschrieben. Aber die Formatierung. :oops: :mrgreen: |
Hi,
das mit einem Datensatz pro Seite ist jetzt auch klar. Das war ein Denkfehler. Ich hatte das Detailband über den ganzen Bildschirm gezogen. :idea: Jetzt habe ich es verkleinert und es funktioniert. Dafür sind aber doch noch ein paar Kleinigkeiten aufgetaucht : 1. Ich brauche in dem Page-Header eine Trennzeile oder 2 Page-Header pro Seite. 2. Lasse ich das Programm laufen bleibt im Hintergrund immer noch der QR stehen. Das brauche ich so aber nur zur Entwurfszeit. Der muß noch weg. 3. Wie kriege ich vernünftige Seitenzahlen in den PageFooter ? Habe vor es so zu machen : Variable Hochzählen und falls es irgendwas mit AfterPage oder so gibt setz ichs da rein. Muß jetzt weg..... Hat jemand eine bessere Idee ? Gruß Hansa |
Hi,
Zitat:
Zitat:
Ralph Gruß Hansa[/quote] |
Hi,
den QR habe ich erst heute wieder benutzt. Das mit den Seitenzahlen geht am besten mit TQrExp. Da geht man im OI in das Feld Expression. Dort öffnte sich ein Editor, dann muß man "Variable" anclicken und schließlich PAGENUMBER auswählen. Dann habe ich noch folgendes gemacht : im Mask-Feld "- ### -" eingegeben, so daß die Seitenzahl z.B. so aussieht : - 43 -. Ich gehe davon aus, daß maximal 999 Seiten auf einmal gedruckt werden. Gruß Hansa |
Hi,
zu schnell abgeschickt. :mrgreen: Ich habe da nämlich noch ein Problem : im Detailband des QR sollen Rechnungspositionen stehen. Bei einer Testrechnung mit 4 Pos. druckt er mir nur eine aus. Zuerst dachte ich, irgendeine SQL-Anweisung sei falsch und habe deshalb noch ein DBgrid auf die Form gelegt und es mit demselben Dataset verbunden, den auch der QR verwendet. Seltsamerweise waren in dem Grid aber alle 4 Pos. drin ! Etwas ähnliches tritt bei den Artikeln der Rechnung auf. Die erscheinen gar nicht. :spin: Gruß Hansa |
Hi,
hast Du vergessen im TQuickrep das "Dataset" Property zu setzen? Es reicht NICHT aus, dies bei den einzelnen TQrDBText etc zu machen Ralph |
Hi,
Nee das Dataset war nicht gesetzt. :roll: Ich brauche auf dem QR Daten aus 6 Tables (mindestens). Wie soll ich das in ein Dataset reinkriegen ? Das muß anders gehen. Nur wie :?: Gruß Hansa |
Hi,
ohne die Angabe eines Datasets weiß QR aber doch gar nicht, welches das "Führungs-Set" ist, das also für den Wechsel auf ein neues Detail-Band gelten soll. 1. Möglichkeit: Eine SQL-Abfrage verwenden 2. Möglichkeit: "OnNeedData" Event verwenden. 3. Berechnete Felder in der Master-Tabelle benutzen Ralph |
Hi,
also soll das Dataset für das Detailband genommen werden als DataSet für den Quickreport, oder wie ? Gruß Hansa |
Hi,
jo, probieren geht über studieren. :mrgreen: Jetzt habe ich die 4 Rechnungspos., aber von den Artikeln sieht man noch nichts. Gruß Hansa |
Hi,
Kommando zurück. Meine Artikel-Table ist leer. 8) 8) 8) Dann kann das ja nicht gehen. So eine Sch..... Werde keinem mehr zeigen, was der Unterschied zwischen DROP TABLE und DELETE FROM ist, bzw. daß es so was gibt. :mrgreen: @SurFan : Dein Tip war gut, anscheinend muß man wirklich nur das Detailband im Auge behalten. Gruß Hansa |
Hi,
das klappt jetzt so weit. Aber etwas fehlt noch. An einer Stelle brauche ich berechnete Felder. In der DB habe ich Menge und Einzelpreis. Die wollte ich miteinander multiplizieren. Deshalb habe ich in das Detailband noch ein QRexpr rein gesetzt. Aber ich glaube, das ist verkehrt. Jedenfalls habe ich in dem Expression-Editor keinen Zugriff auf Database-Fields. Da ist alles leer. Gruß Hansa |
Hi,
oh je, hab hier noch was, da weiß ich gar nicht wo ich anfangen soll. Auf einem Report müssen Daten aus zwei verschiedenen Tables drauf, die nicht viel miteinandern zu tun haben. Die Daten müssen auch ganz anders gedruckt werden. Zu allem Überfluß muß ich es so hinkriegen, daß die auch total durcheinander gedruckt werden können. Im Prinzip bräuchte ich zwei verschiedene Detailbänder. Aber da gibt es noch irgendwas mit Childband oder Linkband oder Subdetail??? Kann mir da jemand helfen ? Sehe vor lauter Bändern und Headern den Quelltext fast nicht mehr. :mrgreen: Gruß Hansa |
Hi,
also ich bin jetzt echt an einem toten Punkt angelangt. Deshalb habe ich die Qreports mal sein lassen. Nun habe ich nochmal neu angefangen, aber es gelingt mir einfach nicht, ein berechnetes Feld hinzukriegen. Weder an die entsprechende Table, noch an ein Feld komme ich heran. Wenn ich das noch schaffe, hätte ich zumindest einen Prototyp des gewünschten Reports. Woran kann das nur liegen ? Gruß Hansa |
Hi,
also ich bin jetzt echt an einem toten Punkt angelangt. Deshalb habe ich die Qreports mal sein lassen. Nun habe ich nochmal neu angefangen, aber es gelingt mir einfach nicht, ein berechnetes Feld hinzukriegen. Weder an die entsprechende Table, noch an ein Feld komme ich heran. Wenn ich das noch schaffe, hätte ich zumindest einen Prototyp des gewünschten Reports. Woran kann das nur liegen ? Gruß Hansa |
Hallo Hansa,
was genau funktioniert nicht beim Versuch ein berechnetes Feld in einer Tabelle anzulegen? Du kannst übrigens die Steuerung von QReport komplett selbst übernehmen, in dem du gar keine Daten sensitiven Komponenten benutzt, sondern mit OnNeedData die Daten selbst aus beliebigen Tabellen ausliest, den Inhalt entsprechenden z.B. QRText Feldern zuweist und erst wenn du fertig bist den Parameter MoreData auf False setzt. So kannst du wirklicjh beliebige Daten ausgeben (auch z.B. ein Textfile). |
Hi,
Zitat:
Gruß Hansa |
Hallo Hansa,
wenn du über den Experten an ein Datenbank Feld kommen willst, muss das entsprechende Objekt (TTable oder TQuery) in dem Formular existieren, in dem auch der Report steht. Wenn das aber nicht geht oder nicht gewünscht ist, kannst du in dem Formular, in dem sich das Objekt tatsächlich befindet , den Feldeditor nutzen um ein Feld hinzuzufügen, das du als "berechnet" definierst. Dem OnCalcField Ereignis weist du dann den Code zu, der das Feld berechnet, z.B.:
Delphi-Quellcode:
:mrgreen:
tabRechnungenGesamtSumme.AsFloat := tabRechnungenNetto.AsFloat *1.16
{ oder 1.17 nach den nächstenb Landtagswahlen } ; |
Hochschieb....
Mein Beitrag wurde wegen eines Fehlers beim Provider unseres Forums nicht in der Übersicht angezeigt... :mrgreen: |
Hi,
da hab ich doch glatt einen Schreibfehler übersehen. :mrgreen: { oder 1.17 nach den nächstenb Landtagswahlen } ; Das sollte wohl 1.18 heißen. und aus der 0.07 würde eine 0.09 !!! Mit unrunden Zahlen geht das nämlich schlechter ! Beim QR sieht es so aus, daß ich schon an die DB-Felder komme, eben nur nicht an berechnete. Ich habe auf der Form eine Qexpr. Mit der rechten Maustaste öffnet sich doch dann der Expr.-Editor. Bei available Database,table oder Fields ist nichts ! Das ist das Problem. Z.B. kann ich ohne weiteres einem DBtext-Feld das richtige Datafield zuordnen. Insofern kann es wohl nicht daran liegen, daß die Daten nicht im Projekt verfügbar wären. Gruß Hansa |
Hallo Hansa,
wie gesagt in dem Experten für QRExpr werden nur die Daten angezeigt, deren Object (TTable, TQuery) in dem Formular sind, in dem auch der QRReport steht. Nimm mal ein TTable Objekt, ziehe es in das Formular von QRReport und öffne dann den QRExpr Experten, dann zeigt er dir diese Tabelle an! |
Hi MrSpock,
hehe, da gibts ja einen neuen Enterprise Film. Hab ich heute Mittag Ausschnitte gesehen. :mrgreen: Zum Thema : An die Felder komme ich doch einwandfrei dran. In dem Experten aber nicht, deshalb ist doch davon auszugehen, daß ein Zugriff möglich ist, nur nicht über QRexpr. Das sieht mittlerweile nach einem Bug aus. Soll ich vielleicht einfach einmal deine Hinweise in den Quelltext einbauen ? Gruß Hansa |
Hallo Hansa,
ja ich glaube das ist wirklich eine Beschränkung von QRExpr. Deshalb würde ich das berechnete Feld halt als solches in die Tabelle einfügen wie oben beschrieben und dann ganz normal über ein QRDBText darstellen. |
Hi,
Zitat:
Gruß Hansa |
[OT]
Zitat:
Grüsse, Daniel :hi: |
Re: [OT]
Hi,
Zitat:
Gruß Hansa |
Re: Re: Re: Re: Re: [OT]
Zitat:
Grüsse, Daniel :hi: |
Hallo Hansa,
Zitat:
Zitat:
:lol: |
Hi Vulkanier,
aber nicht mehr im Dienst. :mrgreen: So gehts. Komme mir hier manchmal auch als Rentner vor. :dancer: Gruß Hansa |
Hi,
auf Nemesis bin ich schon seit ca 5 Monaten ganz heiß, seitdem der erste Trailer im Netz kursiert. In der Zwischenzeit vergnüge ich mich mit TNG auf DVD OnTopic: Ich verstehe das Problem nicht so ganz, was Du hast. Die QRExpr-Komponente ist doch im Grunde ein "Expression Evaluator" (was Gescheiteres fällt mir dan i.A. nicht ein). Wenn Du was berechnen mußt dann mach das doch damit. Beispiel: Wenn Du als Expression bveispielsweise " 'Brutto: ' + Table1.Netto * (1 + Table1.MwstProz / 100)" eingibst, erhältst Du auf dem Ausdruck den Brutto-Betrag mit vorangestelltem Text "Brutto". Ralph |
Hi,
da hängt auch noch SQL mit drin. Schreibe ich :
Code:
einfach mal so in die Expression steht auf dem Report "unavailable Function : siehe oben". Das hatte ich ja bereits vermutet.
RecDataMod.RecDS.FieldByName (VKPREIS) * RecDataMod.RecDS.FieldByName (MENGE)
Mache ich folgendes : ich gehe im OI auf Expression, drücke den Button "Database Fields", dann habe ich 2 Listboxen, "select Database" und "available Fields". Beide sind leer. Was ich nicht verstehen kann, denn bei einem NICHT berechneten Feld wähle ich im OI einfach Dataset und Datafield aus und alles funktioniert. Das kann also auch nicht an einem falschen SelectSQl liegen. Auf dem Report stehen direkt nebeneinander MENGE, VKPREIS und zwar richtig ! Daneben soll noch die Multiplikation stehen. Trage ich diese in die DB direkt ein, so kriege ich anderswo Ärger. Außerdem wäre es eine unnötige Redundanz. In dem Expression-Editor ist doch alles vorhanden ! Entweder ist der für die :cat: ,oder ich mach was verkehrt, was ich eher glaube. Gruß Hansa |
TQRExpr
Der Feldeditor funktioniert nur, wenn Du bereits eine Datenmenge geöffnet hast. Aber Du kannst auch einfach Deine Formel (syntaktisch richtige!) eingeben, das funktioniert ebenfalls. Die Angabe des DataSet kannst Du Dir schenken, wenn Du nur eines hast, ansonsten musst Du sie vor die Felder schreiben: MyQuery.MyField * MyQuery.YourField
Noch ein Tipp: manchmal gibt es Probleme mit der Typumwandlung. Es ist also günstig, die Datenmenge so zu gestalten, dass die Felder jeweils den gleichen Typ haben. Noch ein weiterer Tipp: mit einer Query kannst Du alle berechneten Felder selber errechnen. QReport kann dann diese Felder auch wie gewohnt über TQRText anzeigen. Also schreibe: RecDS.VKPREIS * RecDS.MENGE bzw. in der Query: VKPREIS * MENGE AS MyNewField und benutze dieses Feld dann in QReport. |
Hi,
genau, allerdings brauchst Du persistente Felder, ohne diese geht's tatsächlich nicht Ralph |
Hi,
gerade noch gesehen. Persistente Felder hab ich keine. Da soll man mal von alleine draufkommen ! Der Witz ist noch: ich habe auch noch keine Query gebraucht. Ich mach das alles auf DataSet-Ebene: Dataset active auf false setzen, SelectSQL in den Quelltext schreiben und active auf true setzen, dann hab ich meine Daten. Wieso lese ich an jeder Ecke Query, Query, Query ? Das konnte mir noch keiner genau erklären. :mrgreen: Mit den persistenten Feldern, das ist so was ähnliches. Zitat:
Gruß Hansa |
Hi,
irgendwie reden wir aneinander vorbei glaube ich. Welchen Typ Dataset verwendest Du denn? Wenn Du irgendwo eine SQL-Abfrage, ob im Quelltext oder über die IDE eingeben kannst, mußt Du eigentlich ein Dataset verwenden, das von TQuery abgeleitet ist. Darauf bezogen sich die "Query"-Aussagen. Wenn Du jetzt eine "generische" Abfrage hast, bei der zur Kompilierzeit noch nicht feststeht, welche Felder in der Abfrage auftauchen, ist's natürlich Essig mit persistenten Feldern, ansonsten haben diese nur Vorteile: Sind schneller beim Zugriff, man braucht weniger zu schreiben (was mir als 2-finger Adler-Tipper sehr gelegen kommt ;) ), und hat schon zur Designzeit Zugiff auf Formatierungen Ralph r |
Tipp
Ich gehe bei meinen Überlegungen davon aus, dass Du folgendes machst:
1. Erstellen eines Formulars mit Quick-Report 2. Erstellen einer TDataSet-Komponente, die Basis für den Report ist. 3. Erstellen diverser Bänder (TQRxxxBqand) mit Verweis auf die o.a. TDataSet-Komponente 3. Erstellen diverser TQRText bzw. TQRExpr Komponenten in den Bändern. Die TDataSet-Komponente sowie die TQR*-Komponenten können auch zur Laufzeit erzeugt werden, der Rest sollte visuell erfolgen. Wenn Du die TDataSet-Komponente, also z.B. ein TQuery der BDE öffnest, dann funktioniert der Feldeditor. P.S. Du kannst sogar im Entwurfsmodus den Bericht bereits anzeigen (rechte Maustaste/Druckvorschau), wenn Du alles visuell programmiert. Ohne die Query (oder meinetwegen TTable oder eine ADO- bzw. dbExpress-Komponente) geht es aber wohl nicht. |
Hi,
das klappt immer noch nicht. Jetzt habe ich persistente Felder daraus gemacht. Keine Änderung, außer daß jetzt noch zig Felder im Quelltext stehen. Im Feld-Editor habe ich "Add all Fields" ausgeführt, war das vielleicht verkehrt ? Dann hab ich noch eine Query eingefügt, bei SQL "SELECT * FROM blabla", das Dataset zugeordnet usw. Alles für die :cat: Gruß Hansa |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz