Probleme mit Listenfelder in einem Formular

Hallo zusammen,

ich mache sowas ja nicht oft, aber bislang immer erfolgreich. Nur jetzt hänge ich irgendwo fest und vermute einen Designfehler in meiner Datenbank.
LO 4.2.5.2 unter Win 7.
Folgendes Datenbank-Design
Tabelle Kategorie, Felder ID_KAT, Kategorie
Tabelle Packstück, Felder ID, Kategorie, Packstück
Tabelle Stückzahl, Felder ID, ID_PACK, Anzahl

Formular Stückzahl
Haupformular Stückzahl, Verknüpfung ID_PACK <-> ID(Tabelle Packstück)
Unterformular Packstück, Verknüpfung Kategorie <-> ID(Tabelle Kategorie)

Ich gebe die Anzahl ein, das Packstück und möchte aus einer Listbox die Kategorie auswählen. Die Kategorie hat folgende SQL-Abfrage SELECT "Kategorie", "ID_KAT" FROM "Kategorie".
Ich bekomme es nicht hin, will ich einen neuen Datensatz Stck. anlegen geht das nicht.
Irgendwie stimmt da was in meinem Design nicht bzw. ich mach einen gravierenden Denkfehler.
Kann mir jemand auf die Sprünge helfen?
TIA

Hallo Fritz,

ich mache sowas ja nicht oft, aber bislang immer erfolgreich. Nur
jetzt hänge ich irgendwo fest und vermute einen Designfehler in
meiner Datenbank.
LO 4.2.5.2 unter Win 7.
Folgendes Datenbank-Design
Tabelle Kategorie, Felder ID_KAT, Kategorie
Tabelle Packstück, Felder ID, Kategorie, Packstück
Tabelle Stückzahl, Felder ID, ID_PACK, Anzahl

Tabelle Packstück hat wirklich "Kategorie" darin stehen, also einen
ausgeschriebenen Namen, keinen Fremdschlüssel?
Tabelle Kategorie hat wirklich das erste Feld ID_Kat?

Ich hätte da schon anders benannt.

Formular Stückzahl
Haupformular Stückzahl, Verknüpfung ID_PACK <-> ID(Tabelle Packstück)
Unterformular Packstück, Verknüpfung Kategorie <-> ID(Tabelle Kategorie)

?? ID gibt es nicht in der Tabelle Kategorie

Nach Umbenennung: Verknüpfung ID_KAT <-> ID(Tabelle Kategorie)

Ich gebe die Anzahl ein, das Packstück und möchte aus einer Listbox
die Kategorie auswählen. Die Kategorie hat folgende SQL-Abfrage
SELECT "Kategorie", "ID_KAT" FROM "Kategorie".
Ich bekomme es nicht hin, will ich einen neuen Datensatz Stck.
anlegen geht das nicht.

Hast Du alle Felder angezeigt? Was ist mit dem Primärschlüssel? AutoWert?

Da jedenfalls sitzt der häufigste Fehler: Das Feld ID fehlt und ist
nicht als Autowert benannt - Abspeichern nicht möglich.

Gruß

Robert

Hallo Robert,

sorry, ich hab Müll geschrieben und hab die Felder jetzt auch nochmal neu benannt.

Folgendes Datenbank-Design
Tabelle Kategorie, Felder ID_KAT(Integer, Autowert), Kategorie(Text)
Tabelle Packstück, Felder ID_PACK(Integer, Autowert), FS_KAT(Integer), Beschreibung(Text)
Tabelle Stückzahl, Felder ID_STCK(Integer, Autowert), FS_PACK(Integer), Anzahl(TinyInt)

Formular
Mainform Tabelle Stückzahl
SubForm Tabelle Packstück FS_PACK <-> ID_PACK
SubForm Tabelle Kategorie FS_KAT <-> ID_KAT

Ich hätte da schon anders benannt.

Jetzt gemacht!

So nun steht im Feld Kategorie (die Listbox) Datenfeld ID_KAT, SQL SELECT "Kategorie", "ID_KAT" FROM "Kategorie"

Wenn ich die angelegten Datensätze durchklicke, wird alles richtig angezeigt.
Will ich einen neuen Datensatz hinzufügen, bleibt die Listbox Kategorie ausgegraut (kein Zugriff) und wenn ich in die anderen Felder was eingebe, zeigt mit die Navigtionsseite nicht den nächst höheren Datensatz, sondern den Datensatz 1 von 1 (derzeit sind 49 Sätze in der Tabelle).

Nachsatz:

Hab gerade festgestellt:
Ich habe 61 Datesätze (egal), wenn ich einen neuen Datensatz anlege und die Anzahl eingebe, zeigt das Formular den Datensatz 62 (korrekt) an. Gehe ich dann weiter in das Feld Packstück, springt der Zähler im Navigator auf 1!
Also hab ich doch hier mein Problem (Listbox bleibt inaktiv).

Hallo Fritz,

Hab gerade festgestellt:
Ich habe 61 Datesätze (egal), wenn ich einen neuen Datensatz anlege
und die Anzahl eingebe, zeigt das Formular den Datensatz 62
(korrekt) an. Gehe ich dann weiter in das Feld Packstück, springt
der Zähler im Navigator auf 1!
Also hab ich doch hier mein Problem (Listbox bleibt inaktiv).

Ist die Listbox überhaupt in das Formular eingebunden? ist damit ein
Datenfeld verbunden?

Was wird Dir angezeigt, wenn Du auf Eigenschaften → Listenfeld → Daten
gehst und dort einmal das Aufklappfeld für "Datenfeld" betätigst?

Welche Struktur wird Dir im Formularnavigator angezeigt (befindet sich
beim Editieren des Formulars am unteren Bildschirmbereich, ca. 5. Symbol
von links)?

Wenn die Datensatzzahl plötzlich nicht mehr stimmt, dann hat das
Formularfeld keine Verbindung zum aktuellen Formular.

Gruß

Robert

Hallo Robert,

Hallo Fritz,

Hab gerade festgestellt:
Ich habe 61 Datesätze (egal), wenn ich einen neuen Datensatz anlege
und die Anzahl eingebe, zeigt das Formular den Datensatz 62
(korrekt) an. Gehe ich dann weiter in das Feld Packstück, springt
der Zähler im Navigator auf 1!
Also hab ich doch hier mein Problem (Listbox bleibt inaktiv).

Ist die Listbox überhaupt in das Formular eingebunden? ist damit ein
Datenfeld verbunden?

schon! Datenfeld: ID_KAT, SQL-Befehl: SELECT "Kategorie", "ID_KAT" FROM "Kategorie"

Welche Struktur wird Dir im Formularnavigator angezeigt (befindet sich
beim Editieren des Formulars am unteren Bildschirmbereich, ca. 5. Symbol
von links)?

Vielleicht hab ich ja da den Fehler. Hab es im vorigen Mail zwar schon mal beschrieben, aber hier nochmal:
Mainform Tabelle Stückzahl
+ SubForm Tabelle Packstück FS_PACK <-> ID_PACK
- + SubForm Tabelle Kategorie FS_KAT <-> ID_KAT

Also Kategorie (mit dem Listenfeld als Sub zu Packstück), Packstück als Sub zu Stückzahl

Wenn die Datensatzzahl plötzlich nicht mehr stimmt, dann hat das
Formularfeld keine Verbindung zum aktuellen Formular.

Das geschieht aber bereits, wenn ich von der Stückzahl, als Mainform zu Packstück als Subform wechsle. Aber ich benötige ja die Staffelung um die Verknüpfungen Fremdschlüssel - Schlüssel überhaupt herstellen zu können.

Hallo Fritz,

Du versuchst mit dem Auswahlfeld für die Kategorie in die Tabelle
Kategorie einen Wert zu schreiben. Das ist doch nicht das Ziel. Die
Auswahlliste für die Kategorie gehört in das Unterformular, das mit der
Tabelle Packstück verbunden ist. Dann füllst Du mit der Auswahl die
entsprechenden Kategorien zu dem jeweiligen Packstück.

Das Formular wird eigentlich umgekehrt aufgebaut:
Du wählst aus den Packstücken aus und gibst anschließend die Anzahl der
dazugehörigen Stückzahlen an.
Z.B. erstellst Du im Hauptformular das Packstück "Hose", wählst als
Kategorie aus der Liste "Kleidung" und gibst dann die Anzahl
(gegebenenfalls in einem Unterformular mit weiteren Informationen) an.

Der Formularverlauf von Hauptformular zu Unterformular und allen
weiteren UnterUnterformularen ist ein Verhältnis von 1:n. Im
Hauptformular stehen weniger Datensätze als im Unterformular. Wenn ich
z.B. Adressen habe und ganz genau differenzierte Tabellen habe, dann
steht im Hauptformular Postleitzahl und Ort, im Unterformular die
Starße, im UnterUnterFormular die Hausnummer und schließlich im
UnterUnterFormular die Bewohner, die ich in diesem Haus meine.

Gruß

Robert

Hallo Robert,

vielen für deine Bemühung.

Hallo Fritz,

Der Formularverlauf von Hauptformular zu Unterformular und allen
weiteren UnterUnterformularen ist ein Verhältnis von 1:n. Im
Hauptformular stehen weniger Datensätze als im Unterformular. Wenn ich
z.B. Adressen habe und ganz genau differenzierte Tabellen habe, dann
steht im Hauptformular Postleitzahl und Ort, im Unterformular die
Starße, im UnterUnterFormular die Hausnummer und schließlich im
UnterUnterFormular die Bewohner, die ich in diesem Haus meine.

D.h. die Tabelle Packstück muss ins Mainform und die anderen darunter?
Ich muss das Morgen mal checken.

Hallo Robert,

ich hab das jetzt nochmal neu aufgesetzt: die Tabelle Packstück als Hauptformular genommen.
Unterformular angelegt Kategorie.
Nun wollte ich das Listenfeld für die Kategorie über den Assistent einfügen:

*Wählen Sie die Tabelle, deren Daten die Grundlage für den Listeninhalt bilden sollen: "Kategorie"
*Anzeigefeld "Kategorie" Der Inhalt des ausgewählten Feldes wird in dem Listenfeld angezeigt, wenn die verknüpften Felder übereinstimmen.
*Wählen Sie hier die Felder aus, deren Inhalt übereinstimmen muss, damit der Wert aus dem Anzeigefeld angezeigt wird: Feld der Wertetabelle | Feld der Listentabelle. Hier kann ich nur auswählen die beide Felder der Tabelle Kategorie auswählen, nämlich den Index ID_KAT und das Datenfeld Kategorie

Das passt doch nicht?
Eigentlich müsste das Listenfeld den Wert anzeigen, auf den der Fremdschlüssen FS_KAT zeigt.
Also Feld der Wertetabelle FS_KAT aus "Packstück" sollte auf ID_KAT zeigen welches ja durch die Beziehung gegeben ist. Also FS_KAT = ID_KAT = Wert
Aber diese Beziehung kann ich nirgends auswählen. Stattdessen steht ein SQL-Befehl da, den der Assistent einträgt: SELECT "Kategorie", "Kategorie" FROM "Kategorie" das ist doch unsinnig, zumal ich was anderes ausgewählt habe: Wertetabelle ID_KAT = Listentabelle Kategorie.

Da bekomme ich einen Vogel, das war doch früher anders und transparenter im Assistent. Ich komme nicht weiter.

Hallo Fritz,

ich hab das jetzt nochmal neu aufgesetzt: die Tabelle Packstück als
Hauptformular genommen.
Unterformular angelegt Kategorie.

falsch. Kategorie ist nicht das Unterformular sondern liegt als
Listenfeld im Hauptformular.

Nun wollte ich das Listenfeld für die Kategorie über den Assistent
einfügen:

*Wählen Sie die Tabelle, deren Daten die Grundlage für den
Listeninhalt bilden sollen: "Kategorie"
*Anzeigefeld "Kategorie" Der Inhalt des ausgewählten Feldes wird in
dem Listenfeld angezeigt, wenn die verknüpften Felder übereinstimmen.
*Wählen Sie hier die Felder aus, deren Inhalt übereinstimmen muss,
damit der Wert aus dem Anzeigefeld angezeigt wird: Feld der
Wertetabelle | Feld der Listentabelle. Hier kann ich nur auswählen
die beide Felder der Tabelle Kategorie auswählen, nämlich den Index
ID_KAT und das Datenfeld Kategorie

Das passt doch nicht?

Du hast wieder als Grundlage des Formulars die Tabelle "Kategorie"
genommen. Die Tabelle sollte nicht Grundlage des Formulars sein. Das
Listenfeld muss in dem Formular erstellt werden, das als Grundlage
"Packstück" hat.

Gruß

Robert

Hallo Robert,

Du hast wieder als Grundlage des Formulars die Tabelle "Kategorie"
genommen. Die Tabelle sollte nicht Grundlage des Formulars sein. Das
Listenfeld muss in dem Formular erstellt werden, das als Grundlage
"Packstück" hat.

Okay, das hab ich nun gecheckt und es funktioniert wie es soll.
Nun wollte ich die weitere Tabelle einbinden um das Feld Anzahl zu füllen.
Dazu fügte ich ein Unterformular ein um über den Index FS_PACK (Fremdschlüssel) mit ID_STCK die Tabelle zu verknüpfen.
Das eingefügte Feld Anzahl zeigt auch vorhandene Datensätze an, nur füge ich einen neuen hinzu, kann ich die Kategorie + Packstück einfügen, setzt ich den Cursor in Anzahl will er wieder Datensatz 1 von 1 anlegen, fügt also in der verknüpften Tabelle keinen hinzu.

Wo ist nun wieder mein Denkfehler?

Hallo Fritz,

Okay, das hab ich nun gecheckt und es funktioniert wie es soll.
Nun wollte ich die weitere Tabelle einbinden um das Feld Anzahl zu
füllen.
Dazu fügte ich ein Unterformular ein um über den Index FS_PACK
(Fremdschlüssel) mit ID_STCK die Tabelle zu verknüpfen.

Das Schlüsselfeld aus "Packstück" muss mit dem Fremdschlüsselfeld in der
Anzahl-Tabelle verbunden werden.

Mit ist aber immer noch nicht klar, warum die Anzahl nicht direkt bei
dem Packstück steht. Wenn Du die Stückzahlen ändern willst, dann kannst
Du das doch dort auch machen.

Das eingefügte Feld Anzahl zeigt auch vorhandene Datensätze an, nur
füge ich einen neuen hinzu, kann ich die Kategorie + Packstück
einfügen, setzt ich den Cursor in Anzahl will er wieder Datensatz 1
von 1 anlegen, fügt also in der verknüpften Tabelle keinen hinzu.

Wo ist nun wieder mein Denkfehler?

Wenn ich die Packliste sehe, dann hast Du in den vorhergehenden Angaben
auch nur eine Stückzahl pro Packstück gehabt.

Gruß

Robert

Hallo Robert,

Das Schlüsselfeld aus "Packstück" muss mit dem Fremdschlüsselfeld in der
Anzahl-Tabelle verbunden werden.

Hab ich im Unterformular auch gemacht.

Mit ist aber immer noch nicht klar, warum die Anzahl nicht direkt bei
dem Packstück steht. Wenn Du die Stückzahlen ändern willst, dann kannst
Du das doch dort auch machen.

Weil es für andere Anwendungen eine weitere Stückzahl-Tabelle geben wird.

Wenn ich die Packliste sehe, dann hast Du in den vorhergehenden Angaben
auch nur eine Stückzahl pro Packstück gehabt.

Korrekt, war ja noch nie anders. Hab ich mich unklar ausgedrückt?
Was kann ich noch zur Klärung beitragen? Ich lade es nochmal in die Dropbox.

Hallo Fritz,

ich verstehe das wohl nicht ganz richtig. Du kannst doch in dem Formular
jetzt die Stückzahl eingeben. Natürlich wird dort erst einmal nur ein
Datensatz angezeigt, da ja in der Tabelle zu dem Packstück auch nur
einer existiert. Du kannst also auch einen weiteren Datensatz eingeben -
nur macht das bei Deinem Vorhaben keinen Sinn.

Du brauchtest statt verschiedener Tabellen mit Stückzahlen eine Tabelle,
in der die Stückzahlen in Abhängigkeit von der Urlaubsart aufgelistet
werden. Deine Tage-Tabelle bräuchte z.B. einfach die Erweiterung "Tage".
Dann könntest Du in dieser Tabelle die Packliste für 7 Tage, 10 Tage
usw. erstellen. Dann hättest Du auch sinnvoll in dem Unterformular mehr
Felder. Nur dann wäre es auch sinnvoll, überhaupt die Stückzahl aus der
Tabelle "Packstück" heraus zu nehmen.

Gruß

Robert

Hallo Robert,

Hallo Fritz,

ich verstehe das wohl nicht ganz richtig. Du kannst doch in dem Formular
jetzt die Stückzahl eingeben. Natürlich wird dort erst einmal nur ein
Datensatz angezeigt, da ja in der Tabelle zu dem Packstück auch nur
einer existiert. Du kannst also auch einen weiteren Datensatz eingeben -
nur macht das bei Deinem Vorhaben keinen Sinn.

sorry, sorry, sorry!
Ich hab in der Bearbeitungsansicht die Entwurfsansicht umgeschaltet und getestet. Dabei hat bei der Eingabe der Anzahl der Datensatz-Navigator 1 von 1 angezeigt. Wenn ich die Eingabe jedoch abschließe, wird alles korrekt gespeichert. Tut mir leid dir noch mehr Zeit geraubt zu haben.

Du brauchtest statt verschiedener Tabellen mit Stückzahlen eine Tabelle,
in der die Stückzahlen in Abhängigkeit von der Urlaubsart aufgelistet
werden. Deine Tage-Tabelle bräuchte z.B. einfach die Erweiterung "Tage".
Dann könntest Du in dieser Tabelle die Packliste für 7 Tage, 10 Tage
usw. erstellen. Dann hättest Du auch sinnvoll in dem Unterformular mehr
Felder. Nur dann wäre es auch sinnvoll, überhaupt die Stückzahl aus der
Tabelle "Packstück" heraus zu nehmen.

Also ich habe bislang für die Firma einige einfache Datenbanken erstellt und nie Probleme gehabt. Jedoch waren das zumeist nur aus Wertelisten auszuwählen und der Rest in einer Datenbank. Wusste nicht, dass ich mich so blöd anstelle bei 3 Tabellen in einem Formular. Natürlich hätte ich das Ganze viel einfacher für die Pillepalle-Anwendung machen können, aber es war mehr eine Übung für ein - für mich - etwas besonderes Design.
Vielen Dank für deine Mühe, auch für die Arbeit die du hier unermüdlich für die Mailliste leistest. Ich hab dein Handbuch mal auf mein Tablet geladen und hoffe die nächste 2 Wochen im Urlaub zum Lesen zu kommen.