Hallo Lain,
Lain hat geschrieben:
Ich habe eine Tabelle (Angebot) die soll über ein Formular, über ein Listenfeld mit daten einer anderen Tabelle, gefüllt werden.
D.h. wenn ich im Angebots-Formular aus dem Listenfeld Firma (verbunden mit Tabelle Kunde) einen Firmennamen aussuche, sollen die Felder Kundennr. (Primärschlüssel), Ansprechpartner, Telefonnr. und Email automatisch aus der Tabelle Kunden gefüllt werden. Es ist wichtig das die Werte Firma und Ansprechpartner in der Tabelle Angebot hinterlegt werden.
Genau das würde ein Datenbänkler nie machen: Redundanz der Daten erzeugen und damit die Datenbank aufblähen. Hier wird nur mit den Schlüsselfeldern gearbeitet. Der Inhalt wird über Abfragen sichtbar. Musst Du für bestimmte Angebote den tatsächlichen Inhalt irgendwo unveränderlich deponieren, so kannst Du dies immer noch über das auszudruckende Dokument (z.B. als *.pdf-Datei).
Lain hat geschrieben:
Ich habe bis jetzt hinbekommen, das wenigstens die kundennummer angezeigt wird, aber nicht der ansprechspartner oder die kontaktdaten. Kann man mit listen- und kombinationsfeldern überhaubt mehr als nur ein Textfeld befüllen?
Dazu kommt das der im Listenfeld (Tabelle Kunde) ausgewählte Wert nicht in der Tabelle Angebot hinterlegt wird. geht das irgendwie?
Du kannst mit einem Listenfeld nur einen Wert an die Tabelle weitergeben, die in dem Formular liegt. Der Wert, der in der Regel mit einem Listenfeld weitergegeben wird, ist der Fremdschlüssel einer anderen Tabelle.
Du kannst aber sehr wohl in einem Listenfeld sehr viele Inhalte darstellen, die eben mit diesem Fremdschlüssel verbunden sind. Ich versuche das einmal an einem einfachen Beispiel deutlich zu machen:
2 Tabellen,
Tabelle 1 "Kunde" mit den Feldern "ID"(Primärschlüssel), "Nachname" und "Vorname"
Tabelle 2 "Rechnung" mit den Feldern "ID", "kunID" und "Datum" (mehr braucht die Rechnungstabelle nicht, da die Rechnungsposten separat verwaltet werden ...)
Das Formular basiert jetzt auf der Tabelle Rechnung. Die "ID" ist die Rechnungsnummer, das Datum wird direkt eingegeben und die "kunID" enthält den Fremdschlüsseleintrag der Tabelle "Kunde". Diesen Eintrag hast Du natürlich nicht so im Kopf. Du brauchst stattdessen ein Listenfeld. Das Listenfeld hat die Eingabemöglichkeit für SQL-Code, die auch mit Hilfe von Assistenten gelöst werden kann. Hier jetzt einfach einmal ein Standardcode:
SELECT "Nachname", "ID" FROM "Kunde"
Du bekommst den Nachnamen angezeigt. An der zweiten Position steht "ID" - diese zweite Position wird an das darunterliegende Feld übertragen. Beachte: Datenbanken beginnen bei der Zählung mit 0. Das kann zu Verwirrung führen. Die Standardeinstellungen des Office-Paketes sind aber auf so eine Abfrage ausgelegt.
Nachteil 1: Die Nachnamen sind nicht sortiert.
SELECT "Nachname", "ID" FROM "Kunde" ORDER BY "Nachname" ASC
Wobei ASC für ascending, ansteigend steht.
Nachteil 2: Du hast Kunden mit gleichem Nachnamen und weist so nicht, welchen Du gerade ausgewählt hast.
SELECT "Nachname"||"Vorname", "ID" FROM "Kunde" ORDER BY "Nachname"||"Vorname" ASC
Jetzt werden Nachname und direkt folgend der Vorname angegeben. Du kannst unterscheiden, hättest aber lieber die beiden voneinander etwas getrennter dargestellt. "ID" ist nach dem Komma immer noch an zweiter Position.
SELECT "Nachname"||', '||"Vorname", "ID" FROM "Kunde" ORDER BY "Nachname"||"Vorname" ASC
Jetzt sind Nachname und Vorname durch ein Komma voneinander getrennt. Du liest also in dem Listenfeld z.B. "Müller, Egon" und gibst aber an die Tabelle die Nummer "1" weiter, weil Egon Müller den Primärschlüssel 1 in der Tabelle "Kunde" hat.
Wenn jetzt alle Stricke reißen und Du tatsächlich Leute mit gleichem Nachnamen und gleichem Vornamen hast, dann bleibt Dir nur noch so etwas wie die folgende Lösung:
SELECT "Nachname"||', '||"Vorname"||' - Kdnr:'||"ID", "ID" FROM "Kunde" ORDER BY "Nachname"||"Vorname" ASC
Jetzt wird Dir angezeigt: "Müller, Egon - Kdnr:1" Damit hast Du eine Unterscheidung in der Anzeige sicher und bekommst auch gleich angezeigt, welche Nummer an die Tabelle weitergegeben wird.
So ein Listenfeld kannst Du natürlich ausbauen. Wenn Du die Adresse des Kunden auch in der Tabelle "Kunde" gespeichert hast, so kannst Du einfach weiter mit "||" alle möglichen Felder hinzufügen. Das Listenfeld muss dann natürlich entsprechend breit gezogen werden, damit wirklich auch alles angezeigt wird.
Gruß
Robert