Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Marvin am September 21, 2011, 12:29:39

Titel: dynamische Abfrage
Beitrag von: Marvin am September 21, 2011, 12:29:39
Moin moin,
zu Beginn, es geht hier um ein Berichtsheft, welches in Access erstellt werden soll. Sinn und Zweck dieses Projekts ist, ein Gefühl für Datenbanken zu bekommen.
Da ich am Beginn meiner Ausbildung stehe, sind meine Access-Kenntnisse leider sehr begrenzt.
In einem Formular soll die Kategorie ausgewählt werden, unter welche das für den jeweiligen Tag gelernte fällt. Vorgegeben ist, dass dies mit einem Auswählreiter geschieht. Das habe ich/wir auch soweit hinbekommen.

Das Problem: Das ist unschön. Man öffnet den Reiter und wird von einer ellenlangen Liste erschlagen.
Diese Kategorien gliedern sich in Unterkategorien nach folgendem Beispiel:
-01
--01.1
---01.1a
---01.1b
--01.2  und so weiter
Die Überlegung: Drei Auswahlfelder mit drei Abfragen. So tauchen im Feld 1 nur Kategorien 01,02,03,... auf. Auch das haben wir schon hinbekommen.
Das Problem: Wurde im Feld 1 die Oberkategorie 02 ausgewählt, soll die Abfrage für Feld eins nur noch Kategorien wie 02.1,02.2,02.3 raussuchen. Dasselbe gilt für Feld 3. Wurde jetzt in Feld 1 die Oberkategorie 02 und daraufhin im Feld 2 die Kategorie 02.4 ausgewählt, sollen im Feld 3 nur Punkte wie 02.4a,02.4b, 02.4c, ... auswählbar sein. Zusammenfassend: Wir haben also eine Tabelle mit Kategorien, eine statische Abfrage für Feld 1 und zwei flexible Abfragen für Feld 2 und 3. Dazu noch eine weitere Tabelle mit unseren Eintragungen.
Lösungsansatz (Für Feld2): Wir weisen jedem Datensatz in der Tabelle ,,Kategorie" eine Nummer zu, die mit der ID der darüberlegenden Kategorie übereinstimmt. Diese nennen wir mal Auswnr. So geben wir in der Abfrage aus Kriterium ein: "[Daten]![KatE1]=[Auswnr]"
,,Daten" ist unsere Tabelle, in welcher die Einträge gespeichert werden, ,,KatE1" ist die Spalte, in welcher die ID für die Oberkategorie liegt.
Und siehe da, auch dies funktioniert. Nur nicht so wie es soll. Erstelle ich nun meinen Datensatz in der Tabelle ,,Daten", egal ob mit oder ohne Formular, und will nun in Feld 2 die Kategorie auswählen, ploppt die Meldung auf: ,,Parameterwert für [Daten]![KatE1]"eingeben, obwohl ich in diesem Feld bereits die Oberkategorie ausgewählt habe. Natürlich kann ich nun die ID abschreiben. So funktioniert das Ganze dann auch, aber das will ich nicht.
Also, bitte helft mir, nach tagelangen rumprobieren wende ich mich nun an die Profis. ; )

Vielen Dank für eure Zeit, mit freundlichen Grüßen,
Marvin
Titel: Re: dynamische Abfrage
Beitrag von: Marvin am September 21, 2011, 13:22:01
Zitat von: Marvin am September 21, 2011, 12:29:39
, soll die Abfrage für Feld eins nur noch Kategorien wie 02.1,02.2,02.3 raussuchen.

Entschuldigung, gemeint ist natürlich Feld 2
Titel: Re: dynamische Abfrage
Beitrag von: Jonny am September 21, 2011, 15:29:56
Hallo,
du/ihr könntest ein Formular mit 3 Kombifelder machen.
Das zweite bekommt die Datenquelle nach aktuallisieren vom ersten.
Das dritte bekommt die Datenquelle nach aktuallisieren vom zweiten.

ein Beispiel:
Dim SqlKombi as String
' String mit Where quasi Filter
Sqlkombi = "SELECT Fachbereiche.FachbereichNr, Fachbereiche.Fachbereich, [FachbereichNr] & fachbereiche.blank & [fachbereich] AS Ausdr1 FROM Fachbereiche WHERE Fachbereiche.FachbereichNr = " & Forms!MenueFRM!Fachbereich & ";"
' Datenquelle für AuswFB zuordnen
Me.AuswFB.RowSource = Sqlkombi

natürlich müsst ihr das anpassen

Gruß

Johann
Titel: Re: dynamische Abfrage
Beitrag von: Marvin am September 23, 2011, 11:45:05
Danke schonmal für die schnelle Antwort.
Wie gesagt, unsere Access-Fähigkeiten sind begrenzt.
Wir nutzen zur Zeit noch Access 2007. Ich wüsste jetzt nicht, wo ich den Angepassten Text eingeben soll.
Hast du einen Tipp für mich?

Mit Freundlichen Grüßen, Marvin
Titel: Re: dynamische Abfrage
Beitrag von: Jonny am September 23, 2011, 12:33:04
Hallo,
der Code muss jeweil beim Ereignis "nach aktuallsieren" eingefügt und angepasst werden.
der Begriff Fachbereiche muss durch den Tabellennamen ersetzt werden. Hinter den Punkt steht jeweils der Feldname.
Me!AuswFB muss durch den Namen des Kombifeldes ersetzt werden.

Gruß

Johann
Titel: Re: dynamische Abfrage
Beitrag von: Marvin am September 23, 2011, 15:14:44
So, das ganze sieht jetzt so aus:

Dim SqlKombi as String
' String mit Where quasi Filter
Sqlkombi = "SELECT Kategorie.KatID,Kategorie.KatBesch, [KatID] & kategorie.blank & [KatBesch] AS Ausdr1 FROM Kategorie WHERE Kategorie.DatID = " & Forms!MenueFRM!KatBesch & ";"
' Datenquelle für AuswFB zuordnen
Me.AuswFB.RowSource = Sqlkombi

KatID ist die Nummer,
KatBesch ist der Name der Kategorie,
Kategorie ist der Tabellenname.
Aber was meinst du mit "Datenquelle für AuswFB zuordnen"? Und was ist AuswFB?
Wie mache ich das ?

Vielen Dank, mit freundlichen Grüßen, Marvin
Titel: Re: dynamische Abfrage
Beitrag von: Jonny am September 23, 2011, 15:24:19
Hallo
bei mir heist das zweite Kombifeld AuswFB. Das me gehört eigentlich immer vor Felder die sich auf dem Formular befinden.
Also muss hier der Name von dem zweiten Kombifeld stehen.

Wenn ich mir den SQL-String anschau frage ich mich was das ab [katid] bis zum From soll?
Der Selekt beim Where scheint auch nicht richtig zu sein. Hier würden nur alle erscheine wo
die ID aus Kategorie = ist mit dem Feldinhalt vom Feld KatBesch aus dem MenueFRM.

Gruß

Johann