Seite 1 von 4

Im Bericht ein Feld anzeigen

Verfasst: Mo 11. Mär 2013, 19:01
von Mr. Cutty
Moin Community,

als Datenbankneuling habe ich seit ein paar Tagen folgendes Problem, wo ich einfach nicht weiter komme: In einer Kochrezeptdatenbank möchte ich eine Zutaten-/Einkaufsliste via Formular ausdrucken. Im Bericht möchte ich in der Kopfzeile den Rezeptnamen aufführen und im Hauptteil alle für das entsprechende Rezept benötigten Zutaten. As far, as good.

Nun meine Frage: Wie ist es zu bewerkstelligen, dass im Bericht nicht sämtliche Zutaten und Rezeptnamen auftauchen, sondern nur die zusammengehörenden, also pro Satz? Seit Tagen google ich mir die Finger wund und komme auf keine Lösung.

Danke für's Lesen.

Cutty

Re: Im Bericht ein Feld anzeigen

Verfasst: Mo 11. Mär 2013, 20:54
von F3K Total
Hi,
das hängt vom Aufbau der Datenbank, den Tabellen/Abfragen usw. ab.
Ohne mehr Infomationen darüber wirds schwer mit der Hilfe.

Gruß R

Re: Im Bericht ein Feld anzeigen

Verfasst: Mo 11. Mär 2013, 21:38
von RobertG
Hallo Cutty,

schon im Base-Handbuch das Kapitel Berichte gelesen? (http://de.libreoffice.org/hilfe-kontakt/handbuecher/ - etwas nach unten scrollen ...)

Gruß

Robert

Re: Im Bericht ein Feld anzeigen

Verfasst: Mo 11. Mär 2013, 23:18
von Mr. Cutty
'N Abend Community,

erstmal danke für die Antworten.

Ich weiß gar nicht mehr wieviele Handbücher, Anleitungen und Videoclips ich in den letzten Tagen durchgeackert habe. Im Prinzip geht es mir nur darum die Zusammenhänge zu begreifen; deshalb öffne ich etliche fertige Datenbanken um zu sehen, wie man was umgesetzt hat. An dieser Stelle vielen Dank an Robert für die Vorlagen.

Habe durch Zufall einen Lösungsansatz für einen anderen User entdeckt, der vor der gleichen Frage stand, und werde den mal ausprobieren.

Wenn ich nun nach folgender Anleitung vorgehe, bleibt mein Bericht leer.
Zitat von eBayer aus dem Openoffice Forum:

Die ID genügt.
Im Bericht gehst Du auf Ansicht - Berichtsnavigator - Bericht.
Nun werden rechts im Entwurf 2 Tabs aufgezeigt (Allgemein und Daten)
Daten anklicken und nun bei Art des Inhalts SQL-Befehl auswählen - dann in der Zeile "Inhalt" auf den Button mit den 3 Punkten klicken.
Nun kommst Du in einen Abfrageentwurf, wo Du die beteiligten Tabellen und die Datenfelder durch Doppelklick auswählen kannst.
Erste Tabelle ist Deine Hilfstabelle, 2. und weitere Tabellen mußt Du selbst kennen.
Wichtig ist nun, daß Du die ID der Hilfstabelle mit der ID Deiner Datentabelle verbindest (Beziehung aufbauen).
Du kannst die Funktionalität dieser Abfrage jederzeit während Deiner Arbeit testen. Wenn die Abfrage funktioniert, sollte der Bericht auch funktionieren.
Komme einfach zu keinem Ergebnis, egal was ich auch mache. Die angehängte Übungsdatenbank beinhaltet eine Tabelle mit Namen Ort. Dort sind die Spalten Auto-ID, Ort, Name, Straße enthalten. Eine Hilfstabelle mit Namen Hilfe beinhaltet eine Spalte mit Namen Ort und ID.

Ich bekomme es einfach nicht hin, dass mir im Bericht nur ein Ort angezeigt wird, anstelle aller Orte, die in der Tabelle enthalten sind. Es ist zum Haareraufen.

Schönen Abend noch.

Gruß

Franky

Re: Im Bericht ein Feld anzeigen

Verfasst: Di 12. Mär 2013, 16:08
von RobertG
Hallo Franky,

Du willst nur einen Datensatz im Bericht sehen? Kein Formular, wo Du den auswählst? Dann mache das doch mit einer Parameterabfrage. Siehe Anhang.

Gruß

Robert

Re: Im Bericht ein Feld anzeigen

Verfasst: Di 12. Mär 2013, 16:49
von Mr. Cutty
Moin Robert,

herzlichen Dank für die Antwort.
Du willst nur einen Datensatz im Bericht sehen? Kein Formular, wo Du den auswählst?
Ich glaube, ich habe gewaltig geschusselt. Du hast selbstverständlich recht, dass es über ein Formular gehen soll. Manchmal sind die Bretter vorm Kopf reichlich dick.

Mein Gedanke ist der, dass ich in einer Kochrezeptedatenbank (da habe ich eine astreine Vorlage aus dem OO Forum) in einem Formular einen Datensatz (Rezept) auswähle. Mir schwebt vor, aus diesem Formular heraus eine Einkausliste und auf Wunsch das komplette Rezept ausdrucken zu lassen. Ich dachte da an eine Geschichte über einen Button im Formular. Die vorhandene Vorlagendatenbank aus dem OO Forum ist prima zum ausprobieren. Wenn ich die Zusammenhänge begriffen habe, möchte ich eine komplett eigene Datenbank erstellen => der Ehrgeiz ist geweckt. :-)

Als ich auf die Schnelle diese kleine Übungsdatenbank erstellt habe, hatte ich natürlich nicht mehr an das Formular gedacht. Dort wird ja quasi der anzuzeigende Datendatz ausgewählt. Wenn ich nun die ID von der Rezepttabelle in die Hilfstabelle kriege, wäre das die halbe Miete, vermute ich mal. Leider muss ich gerade mit dem Hund los. Nachher werde ich das nochmal austesten. Irgendwie kann das nix Schlimmes sein, was mich verzweifeln lässt. Werde mich heute Abend nochmal diesbezüglich melden.

Gruß

Franky

Re: Im Bericht ein Feld anzeigen

Verfasst: Di 12. Mär 2013, 17:39
von RobertG
Hallo Franky,

ich habe das noch einmal zusammengeklickt: Das Formular selbst besteht aus zwei Teilen: Hauptformular und Unterformular. Einfach einmal im Formularnavigator nachsehen. Das Hauptformular greift auf die Tabelle "Filter" zu. Abgespeichert wird, indem der Button betätigt wird. Rufst Du die Abfrage auf, dann ist da das drin, was Du haben möchtest. Das kannst Du dann im Bericht nutzen.
Direkt starten kannst Du den Bericht aus dem Formular heraus mit einem kleinen Makro - falls Du das möchtest. Dann melde Dich wieder.

Gruß

Robert

Re: Im Bericht ein Feld anzeigen

Verfasst: Di 12. Mär 2013, 18:03
von Mr. Cutty
Moin Robert,

astrein, vielen Dank. Nun kann ich mal etwas rumexperimentieren und schauen, wie ich das umgesetzt bekomme. Dank solch emsiger Helfer wie Dir, macht mir der Umgang mit Base reichlich Spaß.

Edit:
Habe versucht Deine Vorschläge umzusetzen. Als Anhang habe ich mal die Datenbank von Maikäfer aus dem OO Forum angehängt, wo ich versucht habe, Deine Vorschläge einzupflegen. Irgendwie bekomme ich keine Anzeige im Bericht. Der bleibt schlicht und ergreifend leer. Vermutlich sitzt der Kinken in der Abfrage. Doch wo liegt bloß mein Gedankenfehler?

Ich habe alle benötigten Tabellen in Beziehung gesetzt, damit alle Infos (Felder) zusammengesetzt werden, die man im Bericht (tatsächlich ja Einkaufsliste) benötigt. Als da wären: Rezeptname (Tabelle Rezepte), Anzahl der Personen, Zutat (Tabelle Zutaten), Anzahl (in der Tabelle irrtümlich Gewicht genannt), Einheit (g, kg, ml, l, TL, EL, St, Ds, etc...) (alles Tabelle Anleitung).

Gruß

Franky

Re: Im Bericht ein Feld anzeigen

Verfasst: Di 12. Mär 2013, 19:52
von RobertG
Hallo Franky,

das ganze hat zwei Klinken:
Der erste sitzt in der Abfrage. Da müssen alle Felder so miteinander verbunden sein, dass beim Rezept auch wirklich alle zugehörigen Zutaten usw. mit aufgenommen werden. Auch bei fehlenden Feldern muss eine Anzeige des Rezeptes möglich sein. Also besser so:

Code: Alles auswählen

SELECT "tblRezept"."Rezept", "tblRezept"."Portionen", "tblZutaten"."Zutat", "tblAnleitung"."Gewicht", "tblAnleitung"."Einheit", "tblRezept"."pkRezept" FROM "Filter" LEFT JOIN "tblRezept" ON "Filter"."Integer" = "tblRezept"."pkRezept" LEFT JOIN "tblAnleitung" ON "tblAnleitung"."fkRezept" = "tblRezept"."pkRezept" LEFT JOIN "tblZutaten" ON "tblAnleitung"."fkZutat" = "tblZutaten"."pkZutat"
Die zweite Klinke sitzt in dem Formular. Du möchtest am liebsten einen Datensatz, den Du gerade im Hauptformular aufgesucht hast, gleichzeitig in einer anderen Tabelle speichern - der Filtertabelle. Die Idee mit dem Filter ist anders konstruiert. Sie erfordert eine Eingabe der entsprechenden Primärschlüsselnummer des Rezeptes und ein Formular, das nur immer im ersten Datensatz eine Abspeicherung vornimmt - gegebenenfalls also z.B. ein Eingabefeld zum Übertragen der Rezeptnummer sowie ein Button zum Abspeichern (der momentane aktualisiert ein Formular ...). Dann funktioniert das Ganze ohne Makro. Ansonsten hilft nur ein Makro - aber da Du bereits Makros eingebaut hast müsste das auch kein Problem sein:

Code: Alles auswählen

SUB Filter_schreiben
	DIM oDoc AS OBJECT
	DIM oDrawpage AS OBJECT
	DIM oForm AS OBJECT
	DIM oFeld AS OBJECT
	DIM oDatenquelle AS OBJECT
	DIM oVerbindung AS OBJECT
	DIM oSQL_Anweisung AS OBJECT
	DIM stSql AS STRING
	DIM stInhalt AS STRING
	oDoc = thisComponent
	oDrawpage = oDoc.drawpage
	oForm = oDrawpage.forms.getByName("HF_Rezept")
	oFeld = oForm.getByName("pkRezept")
	stInhalt = oFeld.getCurrentValue()
	oDatenquelle = ThisComponent.Parent.CurrentController
	If NOT (oDatenquelle.isConnected()) THEN
		oDatenquelle.connect()
	END IF
	oVerbindung = oDatenquelle.ActiveConnection()
	oSQL_Anweisung = oVerbindung.createStatement()
	stSql = "UPDATE ""Filter"" SET ""Integer"" = '"+stInhalt+"' WHERE ""ID"" = TRUE"
	oSQL_Anweisung.executeUpdate(stSql)
	' ThisDatabaseDocument.ReportDocuments.getByName("Name deines Berichtes").open
END SUB
Das Makro sucht das Feld in dem Formular auf, in dem der Primärschlüssel steht. Den schreibt es in den Filter. Wenn Du schließlich noch einen Bericht erstellt hast, der funktioniert, dann kannst Du den Namen des Berichtes zum Schluss eintragen und der gefilterte Bericht erscheint.
Das Makro verbindest Du mit dem Button. Der Button braucht dann keine andere Funktion mehr zu haben (aktuell aktualisiert er ein Formular ...)

An eine Überarbeitung des Formulars habe ich mich nicht ran gewagt, da einige Zellen dort nicht an dem einzigen Absatz links oben in der Ecke verankert sind. Dann kann das Formular schnell lauter Verschiebungen aufweisen.

Gruß

Robert

Re: Im Bericht ein Feld anzeigen

Verfasst: Di 12. Mär 2013, 19:58
von Mr. Cutty
Hallo Robert,

vielen herzlichen Dank für Deine Bemühungen. Dank Deiner Hilfe bin ich wieder etwas schlauer geworden. Werde mich gleich mal ransetzen und ausprobieren.

Schönen Abend noch.

Gruß

Franky