Discussion:
Access 2003: Wie eine Wertliste in einem Formular unterbringen?
(zu alt für eine Antwort)
Ben Rennigen
2006-09-11 14:01:04 UTC
Permalink
Hallo,

folgende Situation: Ich habe eine Tabelle (namens "Angebote") mit einem Feld
vom Typ "Text". In der Entwurfsansicht der Tabelle habe ich für dieses Feld
folgende Einstellungen:

Steuerelement anzeigen: Listenfeld
Herkunftstyp: Wertliste
Datensatzherkunst: noch offen, fertig, zu bearbeiten

das Feld heißt "Status" und ich möchte, dass man in der Tabelle eben durch
solch eine Dropdown-Liste nur die Werte "noch offen", "fertig" und "zu
bearbeiten" auswählen kann, mit den obigen Einstellunge klappt das auch.

Nun möchte ich dazu ein Formular erstellen. Ich möchte auf dem Formular eine
Liste mit eben den Werten haben ("noch offen", "fertig" und "zu bearbeiten")
sodass ich, anstatt es einzugeben, einen der 3 auswählen kann.

Kann mir jemand sagen, wie die Einstellungen zu dem Steuerelement auf dem
Formular aussehen müssen? Speziell im Tab "Daten" die Werte für
"Steuerelementinhalt", "Herkunftstyp" und "Datensatzherkunft", damit ich
einfach einen der 3 Werte auswählen kann, der dann in die Tabelle
eingetragen wird.

(Vielleicht habe ich auch schon bei der Tabelle etwas falsch gemacht, bin
ich bei den Feld-Eigenschaften denn richtig vorgegangen, eine "Wertliste" zu
benutzen?)


Vielen Dank!
Michael Zimmermann
2006-09-11 14:19:20 UTC
Permalink
Hallo!
Post by Ben Rennigen
folgende Situation: Ich habe eine Tabelle (namens
"Angebote") mit einem Feld vom Typ "Text". In der
Entwurfsansicht der Tabelle habe ich für dieses Feld
Steuerelement anzeigen: Listenfeld
Herkunftstyp: Wertliste
Datensatzherkunst: noch offen, fertig, zu bearbeiten
das Feld heißt "Status" und ich möchte, dass man in der
Tabelle eben durch solch eine Dropdown-Liste nur die
Werte "noch offen", "fertig" und "zu bearbeiten"
auswählen kann, mit den obigen Einstellunge klappt das
auch.
Nun möchte ich dazu ein Formular erstellen. Ich möchte
auf dem Formular eine Liste mit eben den Werten haben
("noch offen", "fertig" und "zu bearbeiten") sodass ich,
anstatt es einzugeben, einen der 3 auswählen kann.
Kann mir jemand sagen, wie die Einstellungen zu dem
Steuerelement auf dem Formular aussehen müssen? Speziell
im Tab "Daten" die Werte für "Steuerelementinhalt",
"Herkunftstyp" und "Datensatzherkunft", damit ich einfach
einen der 3 Werte auswählen kann, der dann in die Tabelle
eingetragen wird.
Genau wie in der Tabelle:

Herkunftstyp: Wertliste
Datensatzherkunft: noch offen;fertig;zu bearbeiten
Post by Ben Rennigen
(Vielleicht habe ich auch schon bei der Tabelle etwas
falsch gemacht, bin ich bei den Feld-Eigenschaften denn
richtig vorgegangen, eine "Wertliste" zu benutzen?)
Da Du niemals Deine Benutzer direkt mit der Tabelle arbeiten
läßt - das tust Du doch nicht, oder? - braucht es da keine
Dropdown-Liste.

Sinnvoll wäre aber eine Gültigkeitsregel, die absichert,
daß wirklich nur diese Werte eingegeben werden können.

Darüber hinaus:

Wenn sich mal die Bezeichnungen ändern, z. B.
'noch offen' -> 'offen' oder 'fertig' -> 'völlig fertig',
darst Du alle bis dahin angefallenen 3 Mio. Aufträge
korrigieren.

Schöner wäre eine Statusnummer (1, 2, 3) und eine
Katalogtabelle, die die Beschreibungen enthält.

1 noch offen
2 fertig
3 zu bearbeiten

Abfragen filtern dann auf 1 und die Beschreibung dazu
kann einer einer zentralen Stelle bearbeitet werden und
stimmt dann automatisch überall.

Gruß aus Mainz
Michael
Ben Rennigen
2006-09-12 19:41:17 UTC
Permalink
Post by Michael Zimmermann
...
Schöner wäre eine Statusnummer (1, 2, 3) und eine
Katalogtabelle, die die Beschreibungen enthält.
1 noch offen
2 fertig
3 zu bearbeiten
Abfragen filtern dann auf 1 und die Beschreibung dazu
kann einer einer zentralen Stelle bearbeitet werden und
stimmt dann automatisch überall.
ja, ich sehe ein, dass das eine bessere Lösung ist. Ich habe also nun
folgendes gemacht:

1. Eine neue Tabelle angelegt, Spalte 1 ist die "id" (AutoWert) und Spalte 2
Text, in dieser Tabelle gibt es nun die Einträge die den Status entsprechen
(4 Status an der Zahl).

2. Meine Tabelle geändert, sodass das Feld "Status" nun einen Zahlenwert
aufnehmen kann (muss).

3. Mein Formular abgeändert, eine Listbox erstellt mit den folgenden
Eigenschaften:
Steuerelementinhalt: Status
Herkunftstyp: Tabelle/Abfrage
Datensatzherkunft: Status

Nun werden aber die "id" (1 bis 4) in der ListBox angezeigt, nicht die
entsprechenden Bezeichnungen. Es gibt die Eigenschaft "Gebundene Spalte",
mit der man angeben kann, welches Feld als Daten für die Tabelle gilt - ich
brauche es aber genau umgekehrt, Spalte 1 sind ja die Daten (die id's der
Status) und ich will Spalte 2 (die Bezeichnungen der Status) in der ListBox
auf dem Formular angezeigt bekommen.

Wie kann ich dies umsetzen?


Vielen Dank nochmal für die Hilfe
Michael Zimmermann
2006-09-12 21:02:24 UTC
Permalink
Hallo!
Post by Ben Rennigen
Post by Michael Zimmermann
Schöner wäre eine Statusnummer (1, 2, 3) und eine
Katalogtabelle, die die Beschreibungen enthält.
1 noch offen
2 fertig
3 zu bearbeiten
Abfragen filtern dann auf 1 und die Beschreibung dazu
kann einer einer zentralen Stelle bearbeitet werden und
stimmt dann automatisch überall.
ja, ich sehe ein, dass das eine bessere Lösung ist. Ich
1. Eine neue Tabelle angelegt, Spalte 1 ist die "id"
(AutoWert) und Spalte 2 Text, in dieser Tabelle gibt es
nun die Einträge die den Status entsprechen (4 Status an
der Zahl).
2. Meine Tabelle geändert, sodass das Feld "Status" nun
einen Zahlenwert aufnehmen kann (muss).
3. Mein Formular abgeändert, eine Listbox erstellt mit
Steuerelementinhalt: Status
Herkunftstyp: Tabelle/Abfrage
Datensatzherkunft: Status
Nun werden aber die "id" (1 bis 4) in der ListBox
angezeigt, nicht die entsprechenden Bezeichnungen. Es
gibt die Eigenschaft "Gebundene Spalte", mit der man
angeben kann, welches Feld als Daten für die Tabelle gilt
- ich brauche es aber genau umgekehrt, Spalte 1 sind ja
die Daten (die id's der Status) und ich will Spalte 2
(die Bezeichnungen der Status) in der ListBox auf dem
Formular angezeigt bekommen.
Wie kann ich dies umsetzen?
Kurz zusammengefaßt: Auf gute Ratschläge gehört und jetzt
klappt nichts mehr. ;-) Dann ändern wir das mal. Meine
liebste Methode für solche Kombifelder sieht so aus:

Zunächst nimmst Du als Datensatzherkunft nicht die
Statuskatalogtabelle selbst, sondern trägst an dieser
Stelle ein SQL-Statement ein oder erstellst Dir eine
entsprechende gespeicherte Abfrage, die Du als Herkunft
angibst.

Das SQL lautet:

SELECT Text, ID FROM Status

evtl. ergänzt um ORDER BY Text.
(Beachte, daß die ID, der zu übergebende Wert, hinten steht)

Für Dein Kombifeld gibst Du dann an
Gebundene Spalte: 2
Steuerelementinhalt: ID
und auf Seite Format
Spaltenanzahl: 1

Im Kombifeld siehst Du dann die Texteinträge und kannst dort
auch Auto-Vervollständigen nutzen, übergeben wird aber die
unsichtbare ID. D. h., daß der Benutzer von den Zahlen im
Hintergrund gar nichts mitbekommt, sondern nur die
vertrauten Textbeschreibungen sieht.

Reden wir zu Abschluß noch über Namen.

Du solltest ein Feld nicht Text nennen, das kann Ärger
bereiten, da das ein reserviertes Wort ist. Daß eine
Tabelle und ein Feld beide denselben Namen haben (Status),
kann immerhin für Verwirrung sorgen.

Am besten benennst Du alle Objekte unter Verwendung von
Präfixen, also z. B.

tblAuftrag: idAuftrag, dtDatum, dtBeschreibung, fiStatus
tblStatus: idStatus, dtText

Man kann jetzt nach Herzenslust reservierte Bezeichnungen
verwenden, da durch die Präfizierung keine Konflikte
entstehen und als Bonus siehst Du sofort: id ist Schlüssel,
dt sind Nutzdaten, fi ist Fremdschlüssel.

Gruß aus Mainz
Michael
Ben Rennigen
2006-09-13 20:58:26 UTC
Permalink
Hallo Michael,
Post by Michael Zimmermann
Zunächst nimmst Du als Datensatzherkunft nicht die
Statuskatalogtabelle selbst, sondern trägst an dieser
Stelle ein SQL-Statement ein oder erstellst Dir eine
entsprechende gespeicherte Abfrage, die Du als Herkunft
angibst.
SELECT Text, ID FROM Status
evtl. ergänzt um ORDER BY Text.
(Beachte, daß die ID, der zu übergebende Wert, hinten steht)
Für Dein Kombifeld gibst Du dann an
Gebundene Spalte: 2
Steuerelementinhalt: ID
und auf Seite Format
Spaltenanzahl: 1
bist Du sicher, dass es so funktioniert? Ich habe die Anweisungen genau
befolgt, wenn ich auf der Form meine ListBox anklicken will, kommt die
Meldung "Das Steuerelement kann nicht bearbeitet werden, es ist an das
AutoWert-Feld 'id' gebunden".

Ist ja auch klar, denn die Datensatzherkunft ist ja "SELECT Text, ID FROM
Status", und die gebundene Spalte 2 - also würde die ListBox auf dem
Formular doch an das Feld "id" gebunden, und zwar in der Tabelle "Status",
wo meine Status drin stehen. Ich will aber, dass quasi die Daten aus der
Tabelle "Status" in der ListBox angezeigt werden, aber das entsprechende
Feld meiner eigentlichen Tabelle geändert wird.

Denn wenn der Steuerelementinhalt "id" ist, und die Datensatzherkunft
"SELECT Text, ID FROM Status", wo ist dann noch die Verbindung zu meiner
eigentlichen Tabelle (nicht Status)?

Ich hoffe ich konnte mich verständlich ausdrücken...
Post by Michael Zimmermann
Reden wir zu Abschluß noch über Namen.
...
danke für die Vorschläge, werde ich so umsetzen.
Dietmar Thesing
2006-09-14 05:06:16 UTC
Permalink
Hallo Ben,
Post by Ben Rennigen
Hallo Michael,
Post by Michael Zimmermann
Zunächst nimmst Du als Datensatzherkunft nicht die
Statuskatalogtabelle selbst, sondern trägst an dieser
Stelle ein SQL-Statement ein oder erstellst Dir eine
entsprechende gespeicherte Abfrage, die Du als Herkunft
angibst.
SELECT Text, ID FROM Status
evtl. ergänzt um ORDER BY Text.
(Beachte, daß die ID, der zu übergebende Wert, hinten steht)
Für Dein Kombifeld gibst Du dann an
Gebundene Spalte: 2
Steuerelementinhalt: ID
und auf Seite Format
Spaltenanzahl: 1
bist Du sicher, dass es so funktioniert? Ich habe die Anweisungen genau
befolgt, wenn ich auf der Form meine ListBox anklicken will, kommt die
Meldung "Das Steuerelement kann nicht bearbeitet werden, es ist an das
AutoWert-Feld 'id' gebunden".
Ist ja auch klar, denn die Datensatzherkunft ist ja "SELECT Text, ID FROM
Status", und die gebundene Spalte 2 - also würde die ListBox auf dem
Formular doch an das Feld "id" gebunden, und zwar in der Tabelle "Status"
Nein - eigentlich nicht. Steuerelementinhalt des Listenfeldes muss die tblAngebote.ID sein. Nicht tblStatus.ID!
Post by Ben Rennigen
wo meine Status drin stehen. Ich will aber, dass quasi die Daten aus der
Tabelle "Status" in der ListBox angezeigt werden, aber das entsprechende
Feld meiner eigentlichen Tabelle geändert wird.
Das müsste dann genau so auch klappen, wenn du in der Datenherkunft deines Formulars die "eigentliche" Tabelle angegeben hast, also tblAngebote, nehme ich an. Wenn in der Abfrage für das Formular die Status-Tabelle mit angegeben ist, sollten als Auswahl für Steuerelementinhalt deines Listenfeldes beide IDs auftauchen, etwa so: Status.ID und Angebote.ID bzw. tblStatus.ID und tblAngebote.ID, wenn du schon die Namen der Tabellen geändert hast.

Melde dich, wenn noch etwas unklar ist.

Freundlicher Gruß

Dietmar Thesing
Office XP Dev, Win XP Home
FAQ: www.donkarl.com
Michael Zimmermann
2006-09-14 07:53:39 UTC
Permalink
Hallo!
Post by Dietmar Thesing
Post by Ben Rennigen
Ist ja auch klar, denn die Datensatzherkunft ist ja
"SELECT Text, ID FROM Status", und die gebundene Spalte
2 - also würde die ListBox auf dem Formular doch an das
Feld "id" gebunden, und zwar in der Tabelle "Status"
Nein - eigentlich nicht. Steuerelementinhalt des
Listenfeldes muss die tblAngebote.ID sein. Nicht
tblStatus.ID!
Sic. Noch als ergänzender Hinweis: Da die eigentliche Statusinformation in
der Zahl (/kein/ Autowert) der
Auftragstabelle steckt und die Statusbeschreibung
vom SQL der Kombibox (wo ID ein Autowert sein kann)
geliefert wird, ist es nicht nötig, in die Datenherkunft
des Formulars die Statuskatalogtabelle überhaupt
hereinzuehmen. Wenn man die wegläßt, stellt sich das
Problem der Unterscheidung von tblAngebote.ID und
tblStatus.ID gar nicht.

Gruß aus Mainz
Michael
Ben Rennigen
2006-09-14 19:55:24 UTC
Permalink
Post by Dietmar Thesing
Nein - eigentlich nicht. Steuerelementinhalt des Listenfeldes
muss die tblAngebote.ID sein. Nicht tblStatus.ID!
also bedeutet "Steuerelementinhalt", was die ListBox an "echten" Daten, die
quasi nicht zu sehen sind un im Hintergrund laufen, benutzt, nicht, was das
Steuerelement "oberflächlich" anzeigt? Falls dem so ist, habe ich das bisher
immer verwechselt.
Post by Dietmar Thesing
Wenn in der Abfrage für das Formular die Status-Tabelle mit angegeben
ist, ...
ist es nicht, das Formular beokmmt seine Daten einfach aus der Tabelle,
nicht aus einer Abfrage.
Post by Dietmar Thesing
Sic. Noch als ergänzender Hinweis: Da die eigentliche Statusinformation in
der Zahl (/kein/ Autowert) der
Auftragstabelle steckt und die Statusbeschreibung
vom SQL der Kombibox (wo ID ein Autowert sein kann)
geliefert wird, ist es nicht nötig, in die Datenherkunft
des Formulars die Statuskatalogtabelle überhaupt
hereinzuehmen. Wenn man die wegläßt, stellt sich das
Problem der Unterscheidung von tblAngebote.ID und
tblStatus.ID gar nicht.
eigentlich habe ich damit alles genau so, wie nun schon fast zu oft erklärt
wurde :-) Ich fasse noch einmal zusammen:

/schnipp/

ok, nun klappt es, kurz bevor ich alles nochmal zusammenfassen wollte. Der
Fehler war bei mir, dass ich bei der Eigenschaft Steuerelementinhalt nicht
die id, wie ihr gesagt habt, sondern "Status" (der Feldname der Angebote
Tabelle) angeben muss, so funktioniert es.

Thomas Möller
2006-09-11 15:40:33 UTC
Permalink
Hallo Ben,
Post by Ben Rennigen
folgende Situation: Ich habe eine Tabelle (namens "Angebote") mit
einem Feld vom Typ "Text". In der Entwurfsansicht der Tabelle habe
Steuerelement anzeigen: Listenfeld
Herkunftstyp: Wertliste
Datensatzherkunst: noch offen, fertig, zu bearbeiten
das Feld heißt "Status" und ich möchte, dass man in der Tabelle eben
durch solch eine Dropdown-Liste nur die Werte "noch offen", "fertig"
und "zu bearbeiten" auswählen kann, mit den obigen Einstellunge
klappt das auch.
Nun möchte ich dazu ein Formular erstellen. Ich möchte auf dem
Formular eine Liste mit eben den Werten haben ("noch offen", "fertig"
und "zu bearbeiten") sodass ich, anstatt es einzugeben, einen der 3
auswählen kann.
wenn Du das Formular mit dem Formular-Assistenten erstellen lässt, dann
legt Access von selber ein entsprechendes Steuerelement an. Da brauchst
Du Dich normalerweise um nichts kümmern.

Warum ein solches Vorgehen grundsätzlich nicht gut ist, hat Michael Dir
schon erklärt. Hier findest Du noch ein paar Argumente:
http://www.mvps.org/access/lookupfields.htm


CU
--
Thomas

Homepage: www.Team-Moeller.de

Anmeldung zur AEK: http://www.donkarl.com/AEK
Loading...