Seite 1 von 1

Wenn dann Bedingungen im Bericht/Formular

Verfasst: Do, 03.07.2008 12:23
von wodga
Bisher nutzte ich für die Datenein- und Ausgabe Calc. Nun möchte ich - der Übersicht halber - auf base umstellen.
Folgende Probleme ergeben sich dabei:
- Eingabe von Zahlenwerten deren Summen bereits im Formular angezeigt werden (ist das möglich?)
- Wenn eine bestimmte Summe erreicht ist automatisch Noten anzeigen (bisher als wenn ... dann Verknüpfung in calc z. B.: =WENN(U5>U4*0,9;1;WENN(U5>U4*0,76;2;WENN(U5>U4*0,56;3;WENN(U5>U4*0,38;4;WENN(U5>U4*0,24;5;6)))))

Re: Wenn dan Bedingungen im Bericht/Formular

Verfasst: Do, 03.07.2008 20:47
von SchneiderH
Hallo wodga,

die WENN DANN Bedingung läßt sich am besten mittels der CASE WHEN SQL-Anweisung durchführen. Das Problem hierbei ist, dass diese nur im SQL-Modus "SQL-Kommando direkt ausführen funktioniert". In diesen Modus kommt man, wenn man beim Abfrageentwurf die Design-Ansicht ausschaltet und die SQL-Schaltfläche drückt.

Die SQL-Anweisung würde wie folgt aussehen:

Code: Alles auswählen

CASE
WHEN U5>U4*0,9 THEN 1
WHEN U5>U4*0,76 THEN 2
:
WHEN U5>U4*0,24 THEN 5
ELSE 6
END AS "Note"
Wenn Du nun die Ergebnisse einer derartigen Abfrage mittels Sun Report Builder ausgeben willst, funktioniert er mit dieser Art von Abfragen nicht. Du kannst Dir aber behelfen, indem Du aus dieser Abfrage eine Ansicht erstellst. Die Ansicht wird dann wie eine Tabelle in den Report Builder eingebunden.

Re: Wenn dann Bedingungen im Bericht/Formular

Verfasst: Do, 03.07.2008 22:54
von wodga
cool, da kennt sich jemand aus!
Gibt es dann sowas wie eine Art "sql-Wörterbuch" das du mir empfehlen kannst?
Muss ich für jede Berechnung eine eigene Abfrage erstellen?
Kann ich die Ausgabe auch im Formular anzeigen lassen?

Re: Wenn dan Bedingungen im Bericht/Formular

Verfasst: So, 06.07.2008 12:32
von SchneiderH
Hallo wodga,

wenn Du Dich noch nicht mit Datenbanken auseinandergesetzt hast, ist der Einstieg doch etwas umfangreicher. Der Blickwinkel bei Datenbanken ist etwas anders, als bei einem Tabellendokument, bei dem man die Tabelle ja optisch am Bildschirm sieht. Die Überlegungen bei Datenbanken kann man vereinfacht so zusammenfassen:
- Zuerst überlegt man sich die Grundtabellen mit den zugehörigen Datenfeldern (Spalten). Hierbei ist zu beachten, dass keine Daten doppelt geführt werden.
- Anschließend stellt man die Beziehungen zwischen den Tabellen her (z.B. die Tabelle der Namen mit der Tabelle der erzielten Punkte pro Prüfung).
- Mittels Abfragen kann man sich dann Zusammenstellungen der Tabellendaten erzeugen, die für den jeweiligen Einsatzfall geeignet sind. Mit den Abfragen lassen sich Daten in Tabellen verknüpfen. Mittels Funktionen lassen sich neue Spalten erstellen (z.B. die erzielte Note mit der schon erwähnten CASE WHEN Anweisung). Auch kann man mittels Aggregatfunktionen mehrere Zeilen zusammenfassen (z.B. die Summe aller Einzelpunkte der Aufgaben pro Schüler).

Hier noch einige Links:
Einführung Base: http://de.openoffice.org/doc/einfuehrun ... g_Base.pdf
Beispieldatenbank: http://de.openoffice.org/doc/oooauthors ... enbank.pdf
SQL-Tutorial: http://www.sql-und-xml.de/sql-tutorial/index.html

Der Einstieg in Base ist etwas aufwendiger. Es lohnt sich aber. Ist die Datenbank gut angelegt, kann man sich alle Informationen mittels Abfragen zusammenstellen, die man benötigt. Diese kannst Du dann in einem Formular oder einem Bericht darstellen. Der Bericht hat den Vorteil, dass man ihn ausdrucken kann.

Re: Wenn dann Bedingungen im Bericht/Formular

Verfasst: Di, 08.07.2008 12:35
von wodga
Danke für deine ausführliche Info! Es ist nicht so, dass Datenbanken für mich völliges Neuland wären, da ich bereits ein Grundlagenbuch darüber gelesen habe. Im Detail habe ich jedoch vermutlich doch noch einige Verständnisprobleme.

Vorallem natürlich in Bezug auf das`, was base nun kann und was (noch) nicht.

Ist es möglich über den sql-Befehl "Select Sum" mehrere Spalten einer Zeile zu addieren (und nicht nur mehrere Zeilen einer Spalte)?

In einem Tutorial habe ich gelesen, dass mit openoffice nur "select"-Befehle in sql funktionieren, ist das auch mit der aktuellen 2.4. noch der Fall?

Re: Wenn dann Bedingungen im Bericht/Formular

Verfasst: Di, 08.07.2008 18:49
von SchneiderH
Die Funktion SUM ist eine Aggregat-Funktion und addiert somit einen Spaltenwert über mehrere Zeilen. Wenn Du einzelne Spalten einer Zeile addieren willst, so geht das viel einfacher. Du addierst einfach die entsprechenden Spalten der Zeile in der Abfrage, z.B.

Code: Alles auswählen

SELECT
Spalte1,
Spalte2,
Spalte1 + Spalte2 AS Ergebnis

FROM tabelle
Diese Abfrage liefert als Ergebnis eine Tabelle mit drei Spalten: Spalte1, Spalte2 und Ergebnis.

Es ist richtig, dass man in OpenOffice nur lesende Abfragen erstellen kann (im Gegensatz zu MS Access). Willst Du mittels SQL auf die Datenbank schreiben, so geht das nur mittels der Funktion Extras SQL-Befehl direkt ausführen. Hierbei ist aber größte Vorsicht geboten, da auf diese Weise durchgeführte Veränderungen der Datenbank nicht mehr rückgängig gemacht werden können.

Berechnungen im Formular anzeigen

Verfasst: Mi, 09.07.2008 11:15
von wodga
An das Ende meiner select-Anweisung habe ich folgendes angehängt:

"aufg1-01" + "aufg1-02" + "aufg1-03" + "aufg1-04" AS "sumaufg1", "aufg2-01" + "aufg2-02" + "aufg2-03" AS "sumaufg2", "aufg3-01" + "aufg3-02" + "aufg3-03" + "aufg3-04" + "aufg3-05" + "aufg3-06" AS "sumaufg3" FROM "grunddaten-schueler"

Das funktioniert soweit ganz prima. Doch bei der Eingabe der Daten in mein Formular bekomme ich eine Fehlermeldung angezeigt, dass für "sumaufg1" eine Eingabe erforderlich ist, obwohl ich im Formular "nur lesen: ja" eingestellt habe.

Welche Einstellung ist nun im Formular falsch, oder können Berechnungen nicht ins Formular eingebaut werden?

CASE WHEN in der Praxis

Verfasst: Mi, 09.07.2008 13:14
von wodga
Gleich noch eine Frage hinterher: Ich hab das jetzt ausprobiert mit der "case-when-Anweisung"

Der Einfachkeit halber habe ich nur 2 Resultate als Möglichkeiten angegeben:

SELECT "Gesamtpunktzahl" CASE WHEN "Gesamtpunktzahl"<50 THEN "schlecht" ELSE "gut" END AS "Bemerkung" FROM "Abfrage_grunddaten-schueler".

Welchen Fehler habe ich in meinem sql-Ausdruck?
Benötigt man eigentlich immer die Anführungszeichen, oder kann man sie auch weglassen?

Re: Wenn dann Bedingungen im Bericht/Formular

Verfasst: Mi, 09.07.2008 21:32
von SchneiderH
Es ist nicht ganz einfach, bzgl. der Fehlermeldungen eine Ferndiagnose durchzuführen. Im Formular kann man ohne Code keine Berechnung durchführen. Was aber geht, als Datenquelle des Formulars eine Abfrage anzugeben. In der Abfrage kann man sich dann die Spalten mit den zugehörigen Berechnungen zurechtlegen und überprüfen, ob sie das richtige Ergebnis liefert. Wenn alles OK ist, dann ein Formular entwerfen und die Abfrage als Datenquelle angeben.

Die CASE WHEN Anweisung muss richtig lauten:

Code: Alles auswählen

SELECT 
"Gesamtpunktzahl",
 CASE WHEN "Gesamtpunktzahl"<50 THEN 'schlecht' ELSE 'gut' END AS "Bemerkung" 

FROM "Abfrage_grunddaten-schueler"
Als Ergebnis bekommst du eine Liste mit zwei Spalten. Die erste mit der Gesamtpunktzahl und die zweite mit der zugehörigen Note. Zu beachten ist, dass die Spalten (Felder) durch Komma voneinander getrennt sind.
Die doppelten Anführungszeichen (") werden benötigt, um die Feldnamen eindeutig zu spezifizieren. Die einfachen Anführungszeichen (') brauchst Du, wenn Du einen Text-String angeben willst. Deshalb kann man sie nicht einfach weglassen.

Re: Wenn dann Bedingungen im Bericht/Formular

Verfasst: Do, 10.07.2008 09:42
von wodga
So, damit die Ferndiagnose ein Ende hat, die Datenbank als attachement.

case when
  • Die case when-Abfrage funktioniert nicht, da als Quelle eine Tabelle verlangt wird und keine Abfrage
Formulare
  • - Meine Formulare haben als Grundlage die Abfrage.
    - Das Formular "Bewertung" ist aus irgendeinem Grund schreibgeschützt,
    - "Abfrage_grunddaten-schueler" wurde mit dem Assistenten neu angelegt.
    - "Abfrage_grunddaten-schueler" hat das Problem, bei den Berechnungsfeldern eine Eingabe zu fordern.[

    Re: Wenn dann Bedingungen im Bericht/Formular

    Verfasst: Do, 10.07.2008 21:10
    von SchneiderH
    Das war mir nicht so klar, dass die CASE WHEN Anweisung nur mit Tabellen funktioniert. Das Problem bekommst Du in Griff, wenn Du aus der Abfrage eine Ansicht erstellst (Klick mit rechter Maustaste auf die Abfrage und die Funktion "Ansicht erstellen" auswählen). Eine Ansicht ist wie eine virtuelle Tabelle und wird in der Datenbank abgelegt. Damit geht es (siehe modifizierte Datei im Anhang). Das Problem mit dem Formular habe ich mir noch nicht angesehen.
    Bewertung.odb
    Datenbank mit Ansicht für die CASE WHEN Anweisung.
    (20.15 KiB) 193-mal heruntergeladen

    Re: Wenn dann Bedingungen im Bericht/Formular

    Verfasst: Mo, 14.07.2008 20:19
    von wodga
    Als Zwischenstand nun die Version mit vervollständigter casewhen-Abfrage von der Ansicht.

    Das Problem mit den Formularen ist leider ungelöst: wenn ich die case-when Abfrage mit ins Formular einbaue, verlangt das Formular nach Eingabe von Daten in ebendiese Abfrage!