Zuordung ReportDesigner -> Datenbankfelder

Alles, was Reporting und Drucken betrifft.
Fehlermeldungen, Fragen usw.
Themen zu einzelnen Formularen bitte im speziellen Forum ...

Moderatoren: Raffenberg, A. Schüller, Pfotenhauer

Antworten
kroerig
Beiträge: 280
Registriert: Samstag 5. Januar 2019, 20:18
Schulform: - keine Schule -
Kontaktdaten:

Zuordung ReportDesigner -> Datenbankfelder

Beitrag von kroerig »

Hallo zusammen,

ich sitze hier gerade vor der Schild-DB und frage mich wo ein bestimmter Wert herkommt.
Bei der Selektion alle SuS für einen Report setzt der Reportgenerator folgendes SQL-Statement ab:

Code: Alles auswählen

SELECT 
    Schueler.*,
    MONTH(Schueler.Geburtsdatum) AS Geburtsmonat,
    DAY(Schueler.Geburtsdatum) AS Geburtstag
FROM
    Schueler
WHERE
    Schueler.SchulnrEigner = 165256
        AND (Schueler.Status IN (2)
        AND Schueler.Jahrgang_ID IN (1 , 2, 3, 4, 5, 10, 11, 12)
        AND Schueler.Geloescht = '-')
ORDER BY Schueler.Klasse , Schueler.Name
Im Report ist als Quelle Jahrgang aus der Tabelle Schueler ausgewählt. Bei der Ausgabe des Reports werden aus den Jahrgangs IDs dann wieder die Jahrgänge 5-9 und EF, Q1, Q2. Aber woher stammen diese Werte?

Wenn ich direkt in die Datenbank schaue, dann gibt es keine Eindeutige Zuordnung:
DB1.JPG
DB1.JPG (29.13 KiB) 630 mal betrachtet
DB2.JPG
DB2.JPG (30.55 KiB) 630 mal betrachtet
DB3.JPG
DB3.JPG (29.67 KiB) 630 mal betrachtet
Danke & Gruß

Klaus Rörig
"Der Computer rechnet mit allem - nur nicht mit seinem Besitzer." Dieter Hildebrandt
011marTusch
Beiträge: 181
Registriert: Montag 3. Dezember 2018, 19:50
Schulform: - keine Schule -

Re: Zuordung ReportDesigner -> Datenbankfelder

Beitrag von 011marTusch »

kroerig hat geschrieben: Sonntag 16. Mai 2021, 16:58 ...ich sitze hier gerade vor der Schild-DB und frage mich wo ein bestimmter Wert herkommt...
Die Architektur einer peformanten Datenbank ist eine Kunst. Unsere Datenbank "schuld2000n.mdb" besteht aus weit über 100 Tabellen. Manche davon sind jeweils über ID´s miteinander verkettet. Dreh- und Angelpunkt ist dabei natürlich die von Ihnen betrachtete Tabelle Schueler. Viele Werte sind im Programm hintelegt wie z.B. der Status. Die SQL-Abfrage lässt nur die 2 zu. Diese ID steht für "aktive Schüler". Das Minus ist ein logischer Wert für "Nein" - gelöschte Schüler sollen nicht vorkommen. Andere Werte stammen aus Katalogen. Manche Werte sind vom Ministerium hinterlegt, Andere können Sie dynamisch ergänzen. In der Tabelle Schüler ist statt eines langen Klartextes oft nur die ID eines Wertes in einem Datensatz hinterlegt. Das Programm kann mit der ID erheblich leichter sortieren als z.B. mit Klassenbezeichnungen, welche mal aus Zahlen und mal aus Buchstaben bestehen. Die Programmlogik oder wie im Beispiel der Reportdesigner haben die Aufgabe, aus den ID´s für den geneigten Betrachter wieder Klartext zu bilden.

Möglicherweise stammen die ID´s aus der Tabelle "EigeneSchule_Jahrgaenge".
Viele Grüße aus Wuppertal
Ottmar Tusch
Pensionist :geek:
kroerig
Beiträge: 280
Registriert: Samstag 5. Januar 2019, 20:18
Schulform: - keine Schule -
Kontaktdaten:

Re: Zuordung ReportDesigner -> Datenbankfelder

Beitrag von kroerig »

Die Funktionsweise eines DBMS ist mir schon bewusst. Ich habe es auch geschafft, den ein oder anderen Fremdschlüssel aufzulösen.
Leider sind die SQL Anfragen, die SchILD bzw. der Reportgenerator absetzen größtenteils sehr weitfassend. Es wird sehr oft einfach * (= gibt mir alles) abgerufen, obwohl eigentlich nur zwei Felder benötigt werden. Das muss dann wieder die Software zerpflücken, was die Programmausführung langsamer macht.
Die Ausführung des Reports, der "einfach" nur für alle Schüler der SEK I (460) die Fächer/ Kurse auflistet braucht über 2,5 Minuten. Die von mir erstellte SQL Abfrage 0,063 Sekunden. Warum? Weil ich statt einer foreach-Schleife und tausenden SQL-Queris in der Software einfach JOINS auf die entsprechenden Tabellen anwende und mir nur die Felder zurückgeben lassen, die ich auch brauche.

Aber Fall des Jahrgangs liefert der Reportgenerator einen anderen Wert. Ich kann aber aus dessen SQL-Statements nicht erkennen welches Feld er hier abfragt. Im Reportgenerator ist es das Feld "Jahrgang" aus der Quelle "Schueler". In der BD gibt es ebenfalls eine Tabelle "Schueler" und dort ein Feld "Jahrgang". Diese Werte stimmen aber nicht überein.

Ich habe den Report mal angefügt. Und hier zum Vergleich mein SQL-Statement:

Code: Alles auswählen

SELECT 
    Schueler.Jahrgang,
    Schueler.ID,
    SchuelerLernabschnittsdaten.Klasse,
    EigeneSchule_Faecher.FachKrz,
    Kurse.KurzBez,
    SchuelerLeistungsdaten.Kursart
FROM
    Schueler
        JOIN
    SchuelerLernabschnittsdaten ON SchuelerLernabschnittsdaten.Schueler_ID = Schueler.ID
        LEFT JOIN
    SchuelerLeistungsdaten ON SchuelerLeistungsdaten.Abschnitt_ID = SchuelerLernabschnittsdaten.ID
        LEFT JOIN
    Kurse ON Kurse.ID = SchuelerLeistungsdaten.Kurs_ID
        LEFT JOIN
    EigeneSchule_Faecher ON EigeneSchule_Faecher.ID = SchuelerLeistungsdaten.Fach_ID
WHERE
    Schueler.Status IN (2)
        AND Schueler.Jahrgang_ID IN (1 , 2, 3, 4, 5)
        AND Schueler.Geloescht = '-'
        AND SchuelerLernabschnittsdaten.Jahr = 2020
        AND SchuelerLernabschnittsdaten.Abschnitt = 2
        AND SchuelerLernabschnittsdaten.SemesterWertung = '+'
ORDER BY Schueler.Klasse
Zum Vergleich, der Reportgeneratur führt für jeden Schüler folgende Queries aus und muss die dann noch filtern:

Code: Alles auswählen

select Schueler.*, MONTH(Schueler.Geburtsdatum) as Geburtsmonat, DAY(Schueler.Geburtsdatum) as Geburtstag FROM Schueler WHERE Schueler.ID=xxxx
SELECT * FROM Versetzung WHERE SchulnrEigner=yyyyyy AND Klasse='05A'
SELECT * FROM SchuelerErzAdr WHERE Schueler_ID=xxxx ORDER BY Sortierung
SELECT * FROM SchuelerLernabschnittsdaten WHERE SchulnrEigner=yyyyyy AND Schueler_ID = xxxx AND Jahr=2020 AND Abschnitt=2 AND SemesterWertung='+'
select count(ID) as Anzahl from SchuelerLeistungsdaten where NotenKrz in ('5+','5','5-','6') and Abschnitt_ID=33811
SELECT * FROM SchuelerLD_PSFachBem WHERE SchulnrEigner=yyyyyy AND Abschnitt_Id = 33811  
SELECT * FROM SchuelerLD_PSFachBem WHERE SchulnrEigner=yyyyyy AND Abschnitt_Id = 33811  
SELECT LD.*, EF.FachKrz FROM SchuelerLeistungsdaten LD, EigeneSchule_Faecher EF WHERE EF.ID=LD.Fach_ID AND LD.SchulnrEigner=yyyyyy AND LD.Abschnitt_Id=33811 order by LD.Sortierung
select ID,KurzBez, ZeugnisBez from Kurse where ID=20842
select * from Fach_Gliederungen where Gliederung='GY9' and SchulnrEigner=yyyyyy order by Fach_ID, Fachklasse_ID
select ID,KurzBez, ZeugnisBez from Kurse where ID=20842
select ID,KurzBez, ZeugnisBez from Kurse where ID=20842
SELECT * FROM SchuelerErzAdr WHERE Schueler_ID=xxxx ORDER BY Sortierung
SELECT * FROM SchuelerLernabschnittsdaten WHERE SchulnrEigner=yyyyyy AND Schueler_ID = x AND Jahr=2020 AND Abschnitt=2 AND SemesterWertung='+'
select count(ID) as Anzahl from SchuelerLeistungsdaten where NotenKrz in ('5+','5','5-','6') and Abschnitt_ID=33811
SELECT * FROM SchuelerLD_PSFachBem WHERE SchulnrEigner=yyyyyy AND Abschnitt_Id = 33811  
SELECT LD.*, EF.FachKrz FROM SchuelerLeistungsdaten LD, EigeneSchule_Faecher EF WHERE EF.ID=LD.Fach_ID AND LD.SchulnrEigner=yyyyyy AND LD.Abschnitt_Id=33811 order by LD.Sortierung
select ID,KurzBez, ZeugnisBez from Kurse where ID=20842
select ID,KurzBez, ZeugnisBez from Kurse where ID=20842
select ID,KurzBez, ZeugnisBez from Kurse where ID=20842
Aber ich kann hier leider nicht erkennen, aus welchem Feld der Wert für den Jahrgang kommt. Die von Ihnen vermutete Tabelle kommt in den Abfragen nicht vor. Aber gut möglich, dass der Reportgenerator diese Tabelle permanent im Speicher hat.
Dateianhänge
SIS-kursliste-SI.rtm
(9.93 KiB) 31-mal heruntergeladen
"Der Computer rechnet mit allem - nur nicht mit seinem Besitzer." Dieter Hildebrandt
Benutzeravatar
Raffenberg
Beiträge: 2169
Registriert: Dienstag 25. September 2018, 15:22
Schulform: Gymnasium
Kontaktdaten:

Re: Zuordung ReportDesigner -> Datenbankfelder

Beitrag von Raffenberg »

Hallo,
hinter Jahrgang verstecken sich die Schulbesuchsjahre (zumindest sieht es danach aus). Wenn Sie den richtigen Jahrgang benötigen, handelt es sich um das Feld ASDJahrgang.

Wenn sie in der SQL Eingabe in Schild "select * from schueler" eingeben, können Sie die komplette Tabelle erkunden.
Mit freundlichen Grüßen
Jens Raffenberg
kroerig
Beiträge: 280
Registriert: Samstag 5. Januar 2019, 20:18
Schulform: - keine Schule -
Kontaktdaten:

Re: Zuordung ReportDesigner -> Datenbankfelder

Beitrag von kroerig »

Hallo Herr Raffenberg,

die Tabelle bin ich schon mehrfach durchgegangen. Das Feld ASDJahrgang ist ein Textfeld und hier stehen die Jahrgänge zweistellig drin, also z.B. 05. Im Report aber steht nur einfach 5. Das lässt mich auf ein Integerfeld schließen. Und der Report bindet ja Schueler.Jahrgang ein.
"Der Computer rechnet mit allem - nur nicht mit seinem Besitzer." Dieter Hildebrandt
Benutzeravatar
Raffenberg
Beiträge: 2169
Registriert: Dienstag 25. September 2018, 15:22
Schulform: Gymnasium
Kontaktdaten:

Re: Zuordung ReportDesigner -> Datenbankfelder

Beitrag von Raffenberg »

Wenn Sie die Pipeline Schüler aus dem Reportdesigner meinen, so steckt hinter dem Jahrgang, wenn ich mich Recht erinnere, eine fest verdrahten Zuordnung, die aus keiner Tabelle kommt. Hier wird zugeordnet:
'05' = 5
...
'09' = 9
'10' = 10
'11' = 11
...
'EF' = 11
'Q1' = 12
'Q2' = 13
Zuletzt geändert von Raffenberg am Montag 17. Mai 2021, 10:02, insgesamt 1-mal geändert.
Mit freundlichen Grüßen
Jens Raffenberg
kroerig
Beiträge: 280
Registriert: Samstag 5. Januar 2019, 20:18
Schulform: - keine Schule -
Kontaktdaten:

Re: Zuordung ReportDesigner -> Datenbankfelder

Beitrag von kroerig »

Das würde erklären, warum ich diesen Wert nicht abgebildet bekomme. Wer denkt sich denn so etwas aus?
"Der Computer rechnet mit allem - nur nicht mit seinem Besitzer." Dieter Hildebrandt
Antworten

Zurück zu „Drucken / Reporting“