PDA

Vollständige Version anzeigen : Unterformulare


embosa
17.02.2003, 23:16
Ich bins schon wieder ;)

Sachlage ist wie folgt: Ich habe ein Formular mit einem Unterformular.
Habe auf dem Mainformular einen button - new record -. Der hat aber nur Auswirkungen auf das Mainformular undnicht auf das Subformular.

Habe von Forumsmitglied schonmal den Tipp bekommen auf http://www.mvps.org/access/forms/frm0031.htm zu schauen. Doch da verstehe ich nicht arg viel. Was versteht man denn da unter

To refer to a form property, like RecordSource ?
To refer to a control ?
To refer to a control property, like Enabled ?
To refer to a subform control property, like SourceObject ?

Ich mochte ja nur einen neuen Datensatz haben. Fuer das Mainformular und das Subformular. :(

Gruss
Embosa

jmc
17.02.2003, 23:34
Hi Embosa

ist doch normal. Der/die DS im Unterformular sind ja abhängig vom Hauptformular, dh. du musst zuerst einen DS im Hauptformular erfassen. Dann solltest du ohne einen Button klicken zu müssen, auch im UF einen oder mehrere DS zu diesem Haupt-DS erfassen können.

embosa
17.02.2003, 23:40
Hi Jean

Ganz konkret, ich habe Kunde als Unterformular fuer Bestellung. Wenn man was bestellt, kommt Bestelldatum usw. auf das Mainformular.
Dann kommen die Kundendaten, doch da steht der letzte Dummy-Kunde von mir drin. Wennich nun den button New druecke, verschwinden die Eintraege im Mainformulare um meine Daten einzugeben, doch es bleibt immernoch der Dummy-Kunde drin.
Aber alle Kundenfelder sollten nach dem Knopfdruck leer sein....

Gruss
Embosa

Bernd Koch
18.02.2003, 00:58
Ich vermute, dass dein Unterformular nicht oder nicht richtig mit dem Hauptformular verbunden ist.

Vorweg aber noch die rhetorische Frage, wie ist denn die Struktur der DB? Für das, was du hier machst, benötigst du 3 Tabellen (ich schreibe das mal dazu, weil du ja noch lernst und übst, wie du in einem anderen Beitrag geschrieben hast):

- tbl_Bestellungen (BestellID, Primärschlüssel, Autowert)
- tbl_Kunden (KundenID, Primärschlüssel, Autowert)
- tbl_B_K (BestellID, KundenID, gemeinsamer Primärschlüssel beider IDs, beide IDs als Zahl, LongInteger)

Da du Bestellungen als Hauptformular und Kunden als Unterformular hast, muss das Unterformular über die BestellID mit dem Hauptformular verbunden sein. Da die BestellID aber nicht im in der Tabelle tbl_Kunden existiert, benötigst du eine Abfrage mit den beiden Tabellen tbl_Kunden und tbl_B_K. Aus dieser Abfrage ziehst du die beiden IDs aus der tbl_B_K nach unten und den Kundennamen etc. aus der Tabelle tbl_Kunden (ziehe die KundenID n i c h t aus der tbl_Kunden nach unten!!).

Wenn diese Abfrage die Datengrundlage für dein Unterformular Kunden ist, hast du damit auch die BestellID und kannst das Formular darüber mit dem Hauptformular verbinden (Verknüpfen von, Verknüpfen nach).

Dann sollte es auch mit deinem Button klappen.

Bernd

jmc
18.02.2003, 07:32
Hi embosa

dem was Bernd sagt, kann ich weitgehend zustimmen, wobei man sich fragen kann, ob die Verbindungstabelle tbl_B_K wirklich nötig ist.
Dies ist für eine m:n Beziehung ok, jedoch hat m.E. eine Bestellung nur eine Kunden_ID, sodass diese auch direkt in der tbl_Bestellungen sein kann ... (aber darüber könnte man vermutlich endlos diskutieren :streit: )

Zudem: eine etwas eigenartige Darstellung, zuerst die Bestellung und dann der Kunde ...
Bis jetzt habe ich eigentlich immer die umgekehrte Variante gesehen:
Man wählt irgendwo den Kunden aus und sagt 'Bestellung'
Das Hauptformular hat dann: Kundendaten/Bestellungskopf
Unterformular mit den Bestellpositionen (Artikel)

Wo und wie wählst du denn nun den Kunden aus ? Auf dem Haupt oder dem Unterformular ? :rolleyes:
Bei wenigen Kunden ist ein Listenfeld oder Kombifeld noch akzeptabel, aber ab 50 und mehr ist es eher eine Zumutung an den Benutzer ..

aber jeder nach seinem Geschmack ... :p

embosa
18.02.2003, 23:16
Hallo

Huch, das sind viele Informationen. ...
Ich haette, wie auch Jean, nur zei Formulare gemacht. Das Formular "Bestellung" als Mainformular und "Kunde" als Unterformular.
Wenn nun jemand bestellt, mochte ich auf einen Knopf namens "NEU" druecken, dann werden beide Formulare (Bestellung und Kunde) quasi bereit gemacht.

Meine Formulare sind wie folgt verknuepft:

Kunde (KDNR als PK, aber nicht autowert. Ich mochte spaeter die Kundennummer generieren/inkrementieren lassen z.B.CUS0001)

Bestellung (Bestellnr, als PK, Kundennummer_Fremdschluessel, als number long integer)

So sind sie unter RELATIONEN und im Formular miteinander verknuepft (Link Master Fields)

Da faellt mir ein, diese verknuepfung im Formular habe ich nur im Eigenschaftsfenster des Subformulars angegeben. Muss man das auch irgendwie im Masterformular eingeben ?

Gruss
Embosa

Bernd Koch
19.02.2003, 00:43
Na, mal der Reihe nach.

Du sprichst durchgängig von Formularen, doch ich denke, die Verknüpfungen beziehen sich ja wohl auf Tabellen und die sind wiederum Basis der Formulare.

Wenn du nun KdNr als PK aber nicht als Autowert definiert hast, so darf der Dateityp nur noch Text lauten, denn nur die Dateitypen Autowert(PK)/Zahl,LongInteger(Fremdschlüssel) oder Text(auf beiden Seiten) dürfen als PK/Fremdschlüssel definiert werden.
Dateityp Text macht auch Sinn, wenn hinterher eine Nummer wie CUS0001 generiert werden soll (das Für und Wider, ob man ein oder zwei Felder für sowas verwendet, hast du ja schon mit Nouba diskutiert).

Daher muss nun aber auch der KDNR-Fremdschlüssel als Dateityp Text und nicht als Zahl,LongInteger definiert werden!!!). Im Beziehungsfenster solltest du auf jeden Fall noch die referentielle Integrität bei der Verknüpfung der beiden KDNR-Felder einstellen.

Die restlichen Sachen scheinen mir richtig zu sein, wobei ich davon ausgehe, dass sich dein Unterformular "Kunde" im Hauptformular "Bestellungen" befindet. Dann muss das VerknüpfenVon, VerknüpfenNach in der Tat nur in den Eigenschaften des Formulars Kunde eingestellt werden.

Bernd

jmc
19.02.2003, 06:35
Hallo Embosa

Bernd hat dich ja bereits auf die Unstimmigkeite Text/Long für den PK/FK aufmerksam gemacht. Zum Thema "Numern" inkrementieren habe ich im Beitrag http://www.ms-office-forum.net/forum/showthread.php?s=&postid=344120 meinen Senf dazugegeben.

Aber nochmals zu deinem Haupt/Unterformular: weshalb willst du denn unbedingt den Kunden in ein Unterformular bringen? Dort gehören doch wirklich nur die Bestellpositionen hin.
Wenn du schon unbedingt den Kunden erst dann auswählen willst, wenn die Bestellung angefangen wird, dann kannst du das doch auf dem Hauptformular machen, z.b. mit einer Listbox.
Ein Beispiel findest du im Beitrag http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=86523. von Nouba (17.2./11:32) als Anhang.
Dort ist zwar der Artikel, den man auswählt, aber analog kann natürlich auch der Kunde so gewählt werden ...