Formular: Änderung von Anzeigen, UF!Wert in WHERE-Klausel (lang)

11/09/2007 - 18:34 von Hannes Wagner | Report spam
Hallo Newsgroup,

ich hoffe ich bin hier richtig und mir kann geholfen werden. Bringt
bitte Zeit zum lesen meines Problems mit ;) Ich habe zur Zeit ein
kleines Problemchen. Ich muss für eine Access-DB ein Formular entwickeln
und komme gerade nicht weiter. Ich bin nicht sehr firm in der
Formular-Erstellung, so dass mir da wohl kleine Tricks fehlen ohne die
ich wohl nicht weiter komme.

Kommen wir nun zur Problembeschreibung:
1) Vorab Infos:
Die Datenbank habe ich selbst nicht erstellt und weiß nicht in wiefern
ich dort Änderungen machen darf, wenn nötig. Fehler in der DB-Konzeption
bitte nicht mir ankreiden. Die Spalten- und Tabellennamen habe ich
relativ willkürlich gewàhlt. Also nicht wundern, wen es nicht logisch
ist. Ich kann jedoch versichern, dass das Problem mit den original
Bezeichnungen praxisrelevant ist.

2) Aufbau der DB:
Es gibt eine Tabelle (nennen wir sie) "Kunden". Dort gibt es die
(relevanten) Spalten (Name, Gruppe, ZusatzInfos, P1, ..., Pn). Die Pis
sind bestimmte Parameter.

Die Anzahl der unterschliedlichen Gruppen ist fest, ebenso die Namen der
Gruppen. Jeder Kunde gehört zu ein oder mehreren Gruppen. Je nach
Kunde/Gruppenkombination sind die Pis unterschiedlich belegt. Es ist
kein Primàrschlüssel definiert. Jeder Name ist als so oft vorhanden wie
er Gruppen zugeordnet ist. Die Werte der Spalte ZusatzInfos sind für
einen "Namen" jeweils gleich, wobei unterschiedliche Namen aber den
gleichen Wert bei ZusatzInfos haben können. Die Werte der Spalte sind
Namen von Tabellen aus der DB.

Diese Tabellen haben jeweils alle den selben Aufbau. Sie besitzen auch
eine Spalte "Namen" für den Kundennamen. Zusàtzlich gibt es noch eine
Spalte, sagen wir mal, "Besonderheit" und weitere Spalten die jedcoh
nicht von belang sind. Jedem Namen ist mindestens eine, jedoch meistens
2-3 Besonderheiten zugeordnet. Pro Besonderheit natürlich eine Zeile für
den Namen. Wieder gibt es keinen PK.

Dann gibt es noch eine dritte Tabelle "Besonderheiten". Diese erhàlt die
Spalten (Bezeichnung, P1, ..., Pn). Also die gleichen Pis wie oben und
den Bezeichungen aus den "ZusatzInfo"-Tabellen.

Kann man mir noch folgen? Ja? Gut, dann geht's weiter:

3) Wie soll das Formular aussehen.

Links alle unterschiedlichen Kundennamen, rechts daneben eine List aller
unterschiedlichen Gruppen, rechts daneben für jeden Parameter ein
Textfeld, ganz rechts eine Tabelle mit den Spalten (Kunden!Name,
Besonderheiten!Bezeichnung, Besonderheiten!P1, ..., Besonderheiten!Pn)
für den links ausgewàhlten Kundennamen.

Wàhl man nun einen Kunden aus, so werden die Gruppen "markiert" in denen
er aktuell ist. Hier soll man Gruppen zusàtzlich markieren oder abwàhlen
können. Ist die Auswahl eindeutig (ergo nur eine Gruppe angeklickt), so
sollen die Textfelder die Werte der Pis für Name/Gruppe aus der Tabelle
Kunden anzeigen. Andernfalls Platzhalter. Ändert man die Werte in den
Textfeldern (z.B. den Platzhalter von P5 durch 2,7) so wir die Änderung
für alle markierten Gruppen geàndert und gegenfalls neue Eintràge
erstellt. Um das Beispiel fortzusetzen: Sind Kunde K1 und Gruppen G1, G6
und G7 makiert, K1 vorher aber vorher nur in G1 und G7, so wird in der
P5-Spalte von K1, G1 und K1, G7 jeweils der alte Wert auf einheitlich
2,7 geàndert. Die Datensatz Name=K1,Gruppe=G6,P5=2,7 wird hinzugefügt.

Ein typischer Use-Case wàre: links Kundenname anklicken, ein paar
Gruppen markieren, die Parameter für alle Gruppen àndern, einzelne
Gruppen anwàhlen und nachjustieren. Die Gruppen sind nàmlich alle recht
àhnlich. So wird es in der Praxis hàufig sein, dass für Kunden Kx, bei
den Gruppen G1-G4 jeweils P1 den Wert 4 hat und P2 den Wert 5, ausser
ffür G4 wo er 6 ist. Dann ist es ja praktisch Kx anzuwàhlen, G1 bis G4
markieren, P1 bei allen 4 setzen, P2 bei allen 5. Dann nur G4 anwàhlen
und P2 auf 6 setzen.

Warum die rechte Tabelle da steht ist nicht so sonderlich relevant, nur
weiß ich nicht wie ich die erzeugen soll.

Wie löst man sowas effizient? Mein erster Ansatz war ja, dass die Linke
Tabelle ein UF war, jedoch alle Eintràge der Kundentabelle enthielt
(damals wußte ich das mit den Gruppen noch nicht :( ). Ich verwies also
auf die Abfrage "SELECT Name, Gruppe, P1, ..., Pn FROM Kunden". Dann war
der Klick immer eindeutig und ich konnte mit =[UF]![P1],..., =[UF]![Pn]
die Textfelder füllen. Zum Ändern habe ich dann per VBA die
Controlsource entfernt, nach Änderung in die Db geschrieben und wieder
die Controlsource wieder auf =[UF]![Px]. Das hat wunderbar geklappt. Nur
jetzt geht nix mehr.

Ich habe die Abfrage für das UF auf "SELECT DISTINCT Name FROM Kunden"
geàndert.
Das erste Problem sind die Gruppen. Die habe ich in ein (wie hieß das
noch gleich?) Listenfeld(?) mit Mehrfachauswahl gepackt. A la "SELECT
DISTINCT Gruppe". Jetzt muss ich die Markierung bei Änderung der Auswahl
im UFs àndern. Wie mache ich das? Es gibt ja leider keine OnClick oder
OnChanged-Eigenschaft für das UF...

Das nàchste Problem sind die die Textfelder. Anders als zuvor brauche
ich nun SELECT-Abfragen mit Where-Klauseln, wobei das WHERE von meinem
UF!Name abhàngt. Wie geht so etwas? Eine SELECT-Anweisung kann ich dem
Feld sehr wohl zuweisen, jedoch meist steht dort nur #NAME?. Mein Plan
ist ja sobald das GruppenListenfeld geàndert wird und die Anzahl der
selektierten Gruppen = 1 ist (Mit welcher Listenfeld-Eigenschaft frage
ich das eigentlich ab?) setze ich die Controlsourcen auf den Wert von
Name und Gruppe. Dass müsste dann ja so ungefàhr aussehen: "SELECT P1
FROM Kunden WHERE Name = UF!Name AND Gruppe= Listenfeld.Value". Aber da
weiß ich nicht wie das gehen soll :(

Und als drittes müsste noch die Tabelle rechts aufgebaut werden in
Abhàngigkeit des ausgewàhlten Kundennamens. Da denke ich aber, dass das
Problem àhnlich zu den Textfeldern ist...

Gratulation an alle die bis hier hin durchgehalten haben! Ich bedanke
mich im vorraus bei allen Helfenden.

Mit freundlichen Grüßen,
H.W.
 

Lesen sie die antworten

#1 Thomas Möller
11/09/2007 - 21:23 | Warnen spam
Hallo Hannes,

Hannes Wagner schrieb:
Kommen wir nun zur Problembeschreibung:
1) Vorab Infos:
Die Datenbank habe ich selbst nicht erstellt und weiß nicht in wiefern
ich dort Änderungen machen darf, wenn nötig. Fehler in der
DB-Konzeption bitte nicht mir ankreiden. Die Spalten- und
Tabellennamen habe ich relativ willkürlich gewàhlt. Also nicht
wundern, wen es nicht logisch ist. Ich kann jedoch versichern, dass
das Problem mit den original Bezeichnungen praxisrelevant ist.



wenn ich Deine Beschreibungen lese, dann komme ich zu dem Schluss, dass
Deine Tabellen absolut nicht normalisiert sind. Ein sauberes Datenmodell
ist als Grundlage für die weitere Entwicklung der Anwendung unbedingt
notwendig. Sonst löst Du am Ende Probleme, die gar nicht notwendig
wàren. ;-)

Einen Einstieg in das Thema findest Du hier:
http://www.me-asal.de/access/17-normalformen.htm

Wenn Du Dein Wissen zum Thema Normalisierung etwas erweitern willst,
dann schaust Du bei www.donkarl.com auf die Downloadseiten zur 7. und 8.
AEK. Dort hat Michael Zimmermann einen Vortrag zum Thema Normalisierung
gehalten.

CU
Thomas

Homepage: www.Team-Moeller.de

Ähnliche fragen