Access 2000 - Unterformular

hallo
es ist schon 2 jahre her, dass ich das letzte mal access 2000 verwendet habe. wahrscheinlich ist es ein typischer anfängerfehler, aber ich komme nicht drauf.
habe eine tabelle flugzeuge mit dem feld flugart,
eine tabelle flugart mit der abkürzung und einer langen Bezeichnung und
eine tabelle fluggebühr, in welcher der primärschlüssel aus flugzeug und flugart besteht und in einem dritten feld steht der tarif/minute.
nun habe ich im formular flugzeug ein unterformular eingebaut, in welchem ich die tarife für das jeweilige flugzeug eingeben kann und da bekomme ich die fehlermeldung: es können keine ds eingefügt werden, der verknüpfungsschlüssel der tabelle fluggebühr ist nicht in der ds-gruppe enthalten.
wo liegt nun der fehler???

danke im voraus für eure hilfe
lisa

Hallo Lisa,

es ist schon 2 jahre her, dass ich das letzte mal access 2000
verwendet habe.

??? Anfang '99 - arbeitest Du bei MS? :wink:)

In dem Unterformular mit den Tarifen wird die ID des Flugzeuges automatisch eingetragen - WENN die Felder „Verknüpfen von“ und „Verknüpfen nach“ richtig gesetzt sind!

Um einen neuen Datensatz zu Speichern, muß ZWINGEND die Flugart angegeben werden (Primärschlüssel erlauben keine Leerfelder) - wenn die Flugart als Text gespeichert ist (was ich NIE machen würde!), geht da schnell mal was schief mit Leerzeichen, Groß-/Kleinschreibung usw.! Warum Speicherst Du nicht 'ne - ruhig unsichtbare - ID für die Flugart?

Kurt
http://www.fortwaengler.de

Du hast 'ne klassische 1:n Beziehung, die allem Anschein nach aber nicht zu Ende gedacht ist.

Also (wenn ich’s richtig sehe…):

Es gibt Flugzeuge (Tabelle1)
Jedes Flugzeug hat Flugarten (Tabelle2)
Jede Flugart hat Fluggebühren (Tabelle3)

Das müßte voraussetzen, daß Tabelle1 einen PrimaryKey besitzt, z.B. FlugzeugID vom Typ autowert
Tabelle2 einen PrimaryKey besitzt, z.B. FlugartID vom Typ autowert,wobei hier (wichtig!) ein Zahlfeld „FlugzeugID“ vom gleichen Format (meist Long Integer) wie in Tabelle1 der autowert „FlugzeugID“ ebenfalls existieren MUSS. Erst dann kommt Kurzname, Langname und blabla.

In Tabelle3 geht das Spielchen wieder von vorne los. Hier muß ein autowert als PrimaryKey, z.B. GebührenID, existieren. Und zusätzlich ein Zahlfeld FlugartID vom gleichen Format wie FlugartID in Tabelle2, ebenfalls meist Long Integer.

In den Beziehungen stellst Du folg. „Datenfluß“ her:

Tabelle1
FlugzeugID nach
Tabelle2
FlugzeugID;

Tabelle2
FlugartID nach
Tabelle3
FlugartID;

Zu den dabei erforderlichen Verknüpfungstypen und referentiellen
Integritäten halt ich jetzt mal meinen Mund, denn da kann man Bücher drüber schreiben!

Wenn Du obiges erledigt hast, kann man von einer halbwegs sauberen Struktur sprechen.
Dann machst Du 3 Formulare:
Eines auf Grundlage der Flugzeuge (Form1),
eines auf Grundlage der Flugarten (Form2),
eines auf Grundlage der Gebühren -dieses als Endlosformular einstellen - (Form3)

Form3 wird zum Unterformular von Form2.

Und wenn Du jetzt versuchst, in Form2 Daten einzugeben, krachts mit Recht.

Deshalb vielleicht (eine von tausend Lösungen):

Im Form1 gibt’s ein Knopf, der das Form2 öffnet, den autowert von Form1 (FlugzeugID) ausliest und im korrespondierenden Feld von Form2 (FlugzeugID) einträgt und den Fokus auch noch ins erste Eingabefeld von Form3 bewegt (Gebühren). Na ja, und noch etliche (wenn’s sein muß) Makrofunktionen dazu - aber nur so kriegst Du die bereits erwähnte referentielle Integrität hin.

Anderes bildhaftes Beispiel:
Du hast versucht, eine Rechnung zu einem Kunden zu erfassen, den es gar nicht gibt - und da meckert Access.

Gruß + viel Spaß
Stephan

hallo stephan

Es gibt Flugzeuge (Tabelle1)
Jedes Flugzeug hat Flugarten (Tabelle2)
Jede Flugart hat Fluggebühren (Tabelle3)

Das müßte voraussetzen, daß Tabelle1 einen PrimaryKey besitzt,
z.B. FlugzeugID vom Typ autowert
Tabelle2 einen PrimaryKey besitzt, z.B. FlugartID vom Typ
autowert,wobei hier (wichtig!) ein Zahlfeld „FlugzeugID“ vom
gleichen Format (meist Long Integer) wie in Tabelle1 der
autowert „FlugzeugID“ ebenfalls existieren MUSS. Erst dann
kommt Kurzname, Langname und blabla.

In Tabelle3 geht das Spielchen wieder von vorne los. Hier muß
ein autowert als PrimaryKey, z.B. GebührenID, existieren. Und
zusätzlich ein Zahlfeld FlugartID vom gleichen Format wie
FlugartID in Tabelle2, ebenfalls meist Long Integer.

In den Beziehungen stellst Du folg. „Datenfluß“ her:

Tabelle1
FlugzeugID nach
Tabelle2
FlugzeugID;

Tabelle2
FlugartID nach
Tabelle3
FlugartID;

warum von tabelle1 zu tabelle2 und nicht von tabelle1 zu tabelle3???
ich habe die tabelle1 mit tabelle3 und tabelle3 mit tabelle2 verbunden. in tabelle3 habe ich den primary key auf fluggebührID + flugartID gesetzt. wenn ich das anhand der tabellen durchspiele funktioniert das.

nun habe ich im formular flugzeuge ein unterformular eingebaut auf basis von fluggebühr bestehend aus den feldern flugartID und dem flugtarif und es funktioniert!!! sobald ich jedoch statt flugartID ein kombifeld aus der tabelle flugart erstelle (mit flugartID + flugartBezeichnung), zeigt er bei jedem flugzeug die gleiche flugart an. das ist jetzt mein problem. oder muss ich statt des kombifeldes etwas anderes einsetzen???

lisa

hallo kurt

es ist schon 2 jahre her, dass ich das letzte mal access 2000
verwendet habe.

??? Anfang '99 - arbeitest Du bei MS? :wink:)

wenn es so wäre, dann hätte ich ja gleich die leute von ms fragen können, aber ok ich gebs ja zu :-I, ich habe mich verrechnet, es war ende 99, zufrieden??

In dem Unterformular mit den Tarifen wird die ID des
Flugzeuges automatisch eingetragen - WENN die Felder
„Verknüpfen von“ und „Verknüpfen nach“ richtig gesetzt sind!

die verknüpfungen stimmen, da ich sonst die daten in der tabelle direkt nicht eintragen könnte. momentan schleudert es mich beim formular. wie kann ich im unterformular mit hilfe eines kombifeldes auf eine andere tabelle zugreifen??? oder geht es einfacher??

im klartext: im formular flugzeug gibt es das unterformular gebühr. in diesem unterformular steht nun die flugartID, was mir aber zu wenig ist. ich möchte gerne die lange bezeichnung von flugart.

weisst du, wo der fehler liegt???

?:expressionless:
lisa

Hallo Lisa,

es ist schon 2 jahre her, dass ich das letzte mal access 2000
verwendet habe.

??? Anfang '99 - arbeitest Du bei MS? :wink:)

wenn es so wäre, dann hätte ich ja gleich die leute von ms
fragen können, aber ok ich gebs ja zu :-I, ich habe mich
verrechnet, es war ende 99, zufrieden??

Ja… war ja nur 'n Spaß! :wink:)

In dem Unterformular mit den Tarifen wird die ID des
Flugzeuges automatisch eingetragen - WENN die Felder
„Verknüpfen von“ und „Verknüpfen nach“ richtig gesetzt sind!

die verknüpfungen stimmen, da ich sonst die daten in der
tabelle direkt nicht eintragen könnte. momentan schleudert es
mich beim formular. wie kann ich im unterformular mit hilfe
eines kombifeldes auf eine andere tabelle zugreifen??? oder
geht es einfacher??

Ich meinte mit „Verknüpfen von“ und „Verknüpfen nach“ die Einstellungen im Unterformular-Objekt des Hauptformulares!

Aber nach der Fehlermeldung ist ja wohl eher die Flugart schuld am Problem…

Mit den Comboboxen geht es am einfachsten, wenn man DIREKT in der Tabelle festlegt, dass die Daten in einer Combobox angezeigt werden! (Siehe Tab „Nachschlagen“ in den Eigenschaften des Feldes)
Wenn man dann dieses Feld in ein Formular oder einen Bericht zieht, hat man AUTOMATISCH eine Combobox!

Die Datenquelle der Combobox ist die Detailtabelle, die erste Spalte sollte den Schlüssel enthalten. Wenn man die Breite der ersten Spalte auf 0 setzt, werden die Daten NICHT angezeigt, sondern der Inhalt der ersten Spalte mit Breite >0!!!

Deshalb kannst Du in der Tabelle ruhig eine Zahl Speichern und per Combobox den dazugehörigen Text anzeigen!

Kurt
http://www.fortwaengler.de