PDA

Vollständige Version anzeigen : Dynamische Abfragen


heinz.iseli
01.06.2012, 11:42
Hallo Forianer :)
Ich habe folgendes Problem zu lösen und komme nicht weiter...:(

Es geht um bewertungen von Dozenten in Kursen. Diese sollten ab aktuellem Jahr AJ: Teil$(Datum();7;4) plus noch 7 Jahre zurück in einem Formular angezeigt und eingegeben werden. Es besteht eine Tabelle mit den Jahreswerten seit 2004.
Nun möchte ich eine Abfrage bilden, welche dynamisch auf den entsprechenden Jahreswert zugreifft und wo es auch möglich ist, das aktuelle Jahr einzugeben. Im Formular sollten dann jetzt die Jahre 2012 2011 2010 2009 2008 2007 2006 2005 angezeigt werden.

Ich hoffe es ist verständlich genug...

Danke für eure Hilfe
Heinz

Thomas Möller
01.06.2012, 12:11
Hallo Heinz,

Ich hoffe es ist verständlich genug...

so ganz genau noch nicht. ;)

Wie heisst die Tabelle, in der die Daten gespeichert sind?
Wie heißt das Feld, in dem das Datum gespeichert ist?
Ist in dem Feld ein vollständiges Datum gespeichert?

Wie soll die Auswahl des Jahres erfolgen?
Über ein Steuerelement in einem Formular?
Oder soll der User das Jahr als Parameter beim Öffnen der Abfrage eingeben?

Ich denke, mit den Antworten auf diese Fragen kann Dir konkret geholfen werden.

CU

maikek
01.06.2012, 12:15
Moin,
setze doch einen Filter auf das Formular:
Me.Filter = Year(DeinDatumsfeld) = Between year(date() and year(date())-7
maike

heinz.iseli
01.06.2012, 12:19
Hallo Thomas

Vielen Dank für deine Antwort :)

Wie heisst die Tabelle, in der die Daten gespeichert sind? = t_evaluation
Wie heißt das Feld, in dem das Datum gespeichert ist? = In der Tabelle ist es z.b. 2010. In diesem Feld ist die Note des Dozenten gespeichert.
Ist in dem Feld ein vollständiges Datum gespeichert? = Das Datum ist ein TeilString welcher nur das Jahr ausgibt. Dieses sollte dann mit dem Entsprechenden Feld in der Tabelle korrespondieren..

Wie soll die Auswahl des Jahres erfolgen? = Aktuelles Jahr -> minus 7 Jahre
Über ein Steuerelement in einem Formular? = Nein, das sollte dynamisch auf Grund des aktuellen Jahres passieren...
Oder soll der User das Jahr als Parameter beim Öffnen der Abfrage eingeben?


Danke für deine Hilfe :)

Grüsse
Heinz

heinz.iseli
01.06.2012, 12:22
Hallo maikek

Vielen Dank für deinen Beitrag!!! Das Formular sollte komplett neu gemacht werden. Dieses ist im Moment mit jensten Unterformularen gespickt...

Grüsse
Heinz

Atrus2711
01.06.2012, 12:24
Wie heißt das Feld, in dem das Datum gespeichert ist? = In der Tabelle ist es z.b. 2010. In diesem Feld ist die Note des Dozenten gespeichert.
Und dann willst du jedes Jahr eine weitere Spalte fürs Jahr anfügen?! :upps: Da sehe ich Normalisierungsbedarf!

Außerdem kannst du - von einem jahrehaltigen Feldnamen ausgehend - nur mühsam vor- oder zurückrechnen. Mit einem Datumsfeld wäre das über DateAdd ganz einfach.

Zeig doch mal das ganze Beziehungsmodell als Bild.

heinz.iseli
01.06.2012, 12:49
Hier die Beziehungen. Wobei ich jeweils in der Tabelle ein Neues Jahr eröffne, wenn es soweit ist. 2013 und 2014 sind noch leer und nur zum Testen.

CU

Thomas Möller
01.06.2012, 12:53
Hallo Heinz!

Wie heißt das Feld, in dem das Datum gespeichert ist? = In der Tabelle ist es z.b. 2010. In diesem Feld ist die Note des Dozenten gespeichert.
Und dann willst du jedes Jahr eine weitere Spalte fürs Jahr anfügen?! Da sehe ich Normalisierungsbedarf!

Den Normalisierungsbedarf sehe ich auch. Bitte mach Dich, bevor Du viel Kraft in die weitere Lösung Deines Problems invetierst, mit den Grundlagen der Datenbanktheorie, genauer gesagt den sogenannten Normalformen vertraut. Eine einfache Einführung in das Thema findest Du hier:
http://www.access-tutorial.de/tabellen/normalformen.htm

Glaub mir bitte, dass es sich lohnt, sich mit diesen Sachen zu beschäftigen. Das Datenmodell ist vergleichbar mit einem Fundament. Auf einem soliden Fundament kann man gut aufbauen.

Wie ganu jetzt Dein Datenmodell aussehen sollte, ist abhängig von Deinen konkreten Anforderungen. Vielleicht liest Du Dich mal ein und erstellst dann mal nur das Da5tenmodell, also die Tabellen und die verknüpfungen, zwischen den einzelnen Feldern. Wenn Du das hier postest, findet sich sicher jemand, der Dir dazu eine Rückmeldung gebit.

CU

Atrus2711
01.06.2012, 12:55
Wie befürchtet. Normalisierungsalarm!
Ändere die t_evaluation wie folgt ab:
ID
person_id
veranstaltungen_id
kriterium_id
evaluation_titel_id
Stichtag (Datum)
Note (Text oder Zahl, je nachdem was das ist)
Stichtag könnte dann z.B. immer der 01.01.des Jahres sein. Der Reiz daran ist, dass Access mit Datumswerten rechnen kann. Mit Feldnamen allerdings eher nicht. Und du ersparst dir die Anlage neuer Jahresfelder.

Hat ein Dozent also bisher in einer Zeile Werte für 5 Jahre in 5 Spalten drinstehen, "dreht" sich das im neuen Modell in 5 Zeilen, die sich nur in Jahr und Note unterscheiden (und natürlich im Primärschlüssel).

Merke: "mehr desselben" darf nie zu neuen Spalten führen, nur zu neuen Zeilen. Und 2012 ist auch nur ein weiteres Jahr, genau wie 2011 und 2013. Mehr desselben -> neue Zeile!

heinz.iseli
01.06.2012, 13:03
Super! Vielen Dank an euch alle!!

CU

Beaker s.a.
01.06.2012, 21:18
Hallo,
Und wenn es nur darum geht, dynamisch die letzten n Jahre
zu ermitteln, braucht er ja auch bei richtigem Datenmodell,
vielleicht sowas:
Private Sub LetzeNJahre(iAnzahl As Integer)

Dim j As Integer

For j = 0 To iAnzahl
Debug.Print Year(Date) - j
Next j
End Sub

Lässt sich natürlich auch auf ein beliebiges Startjahr
erweitern.
gruss ekkehard