Oktober 23, 2021, 17:09:33

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


Automatisches Ausfüllen von Feldern im Formular

Begonnen von Cyberhunter, Oktober 23, 2016, 23:05:56

⏪ vorheriges - nächstes ⏩

Cyberhunter

Hallo zusammen,

ich brauche mal wieder eure Unterstützung. Ich möchte das sich nach der Auswahl des Wertes im ersten Kombi Feld, die folgenden automatisch mit den Werten aus der Tabelle füllen. Wenn die nachfolgenden Felder Textfelder sind, da bekomme ich es schon hin, mit den DomWert. Leider werden da die Werte aus der Datensatzherkunft nicht in die Zieltabelle übernommen und ich kann die Werte auch nicht ändern.
Nun möchte ich aber das die Werte aus der Datensatzherkunft Tabelle auch in die Zieltabelle übernommen werden und das ich sie , wenn nötig auch direkt im Formular ändern kann und es dann in der Zieltabelle speichert wird. Es geht dabei um Lieferanteninformationen, wo einige Parameter variabel sind.
Jetzt war mein erster Gedanke, die Textfelder in Kombi Felder umzuwandeln, was ich hinbekommen habe, um dann neben der Datensatzherkunft auch noch das Steuerelementinhalt für die Zielinformation zu haben.
Aber leider bekomme ich es einfach nicht zu laufen und finde auch irgendwie nicht die entscheidende Antwort.

Was muss ich da machen?

Danke für eure Hilfe
Gruß
Olaf
Ich arbeite aktuell mit MS Access 2013

MzKlMu

Hallo,
Du musst die Werte per Anfügeabfrage übertragen. Mit der Kundennummer als Kriterium.

Wobei das Vorhaben an sich fragwürdig ist. Wenn Kunden mehrere Anschriften haben, so sollten diese in eine extra Tabelle gespeichert werden. Eventuell mit einem Kennzeichen für die Art der Anschrift.
Gruß
Klaus

Beaker s.a.

Oktober 24, 2016, 11:59:13 #2 Letzte Bearbeitung: Oktober 24, 2016, 12:07:04 von Beaker s.a.
Hallo Olaf,
Normalerweise bindet man ein Formular an die Datenherkunft, da stehen dann alle
benötigten Felder drin, die man dann auch direkt ändern kann. Da entfallen die
ganzen DomWert-Ausdrücke. Speichern erfolgt, mehr oder weniger, automatisch.
Ist das bei deinem Formular nicht möglich?
gruss ekkehard

Edit:
Wenn es sich, wie Klaus vermutet, um das Speichern mehrere Adressen zu einem
Kunden/Lieferanten handelt, musst du, siehe auch Klaus' Post, eine zusätzliche Tabelle
dafür einrichten. Diese wird dann die Datenherkunft eines Unterformulars.
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

Cyberhunter

Vielleicht habe ich mich auch sehr unverständlich ausgedrückt.

Aktuell wird wegen den DomWert nur das Feld Kundennummer in tblBestellungen gespeichert.

Das Feld Unterlieferant kommt z.B. bei Lieferanten wie Amazon ins Spiel.
Man kann Artikel bei Amazon direkt kaufen, oder aber bei einem Drittanbieter (Unterlieferant). In dem Moment wo ich bei Amazon über einen Drittanbieter bestelle, ist Amazon eigentlich nur noch eine Art von Vermittler. Da würde ich oben bei Kundennummer die von Amazon auswählen, dann erscheint bei Lieferant Amazon und bei Unterlieferant würde ich den Drittanbieter eintragen. Soweit auch alles kein Problem, aber jetzt geht es los.

In diesem Moment will ich bei den Feldern darunter (Land, PLZ, Ort, Strasse, Nr.) die Werte des Drittanbieters eintragen. Das geht wegen den DomWert aber nicht.

Wie bekomme ich es hin, das zum einen die Werte automatisch gefüllt werden und dann auch in der tblBestellungen gespeichert werden (alle Felder nicht nur die Kundenummer).
Weiterhin soll bei Bedarf bei den Feldern (Land, PLZ, Ort, Strasse,Nr.) der Inhalt auch überschreibbar sein und auch in der tblBestellungen gespeichert werden.

Gruß
Olaf

PS: Die geänderten Werte sollen nicht in der tblLieferant gespeichert werden, sondern nur in tblBestellungen.
Ich arbeite aktuell mit MS Access 2013

Beaker s.a.

Hallo Olaf,
Hast du beide Personengruppen in einer Tabelle?
Falls nicht, würde ich das zuerst ändern; - alle in eine Tabelle. Zur Unterscheidung
erstellst du noch ein Feld "Kennzeichen" in der Tabelle; - Inhalt z.B. "L" für
Lieferant und "UL" für Unterlieferant).
Zur Zuordnung der UL zu den L würde ich eine n:m-Tabelle anlegen
ULzuL
ULzuLID   PK
ULFK        FK aus Unterlieferanten
LFK          FK aus Lieferanten

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

Beaker s.a.

Hallo,
Sorry war nur die halbe Antwort; - bin auf irgendeine Taste gekommen, und da war's
schon drin.
Adressen würde ich in der Lieferanten-Tabelle nicht speichern, sondern auch dazu eine
eigene Tabelle verwenden. Da brauchst du die Adressen nicht redundant in den
Bestellungen zu speichern, da reicht dann der Fremdschlüssel zur Adresse.
Musst du nur bei Adressänderungen jeweils eine neue anlegen; - die alte wird
nicht gelöscht, sondern inaktiv gestellt (Flag in der Tabelle). Die Adressverwaltung
gehört eh in ein eigenes Formular, und hat IMO auf dem Bestellform nichts zu suchen.
Falls dir historische Adressen allerdings schnuppe sind kannst du darauf natürlich
verzichten.
Mit oder ohne, das Bestellformular erhält als Datenherkunft eine Abfrage in der alle Felder
die zum Unterlieferanten gehören enthalten sind. Die Adressfelder auf dem Formular
werden dabei einfach an die Abfragefelder gebunden.
Dom-Werte entfallen ersatzlos.

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

Cyberhunter

Hallo Ekkehard,

alle Informationen zu den Lieferanten werden in einer separaten Datenbank gespeichert, aus dieser habe ich die benötigte Tabelle in die Bestelldatenbank verlinkt. Dies Lieferanteninformationen werden auch nur dort verwaltet. Unterlieferanten werden nur in der Bestell-DB erfasst, aber nicht in der Lieferanten-DB. In der Bestell-DB habe ich eine Tabelle, welche alle Rahmeninformationen zu einer Bestellung speichert, wie Vorgangsnummer, Datum, Art der Bestellung, Lieferanteninformationen. Aber keine Informationen zu Artikeln, die werden in einer Artikelliste gespeichert.

In der Bestell-DB habe ich ein Formular in dem Informationen wie Vorgangs-Nr., Art der Bestellung, etc. und die Informationen zu den Lieferanten, wie Kunden-Nr., Name des Lieferanten, PLZ, Ort, Straße, Nr.
Das Feld Kundennummer ist ein Drop-Down Feld, welches seine Informationen aus der Lieferanten-DB bezieht und in die Bestelltabelle schreibt. Wird auch alles sauber angezeigt und ich kann die benötigten Werte auch auswählen und sie werden auch in das Bestellformular und Bestelltabelle übernommen.
Da die Lieferanten-DB und die Bestell-DB unterschiedliche Datenbanken sind, möchte ich in der Bestell-DB nicht nur die Kundennummer stehen haben, was theoretisch reichen würde wenn alles in einer DB vereint wäre, sondern die kompletten Lieferanteninformationen wie Kundennummer, Name und Anschrift.
Ich könnte alle als Drop-Down Feld anlegen und es in jedem einzelnen Feld auswählen, was gehen würde, ABER dann habe ich Fehlerquellen eingebaut, die man eigentlich vermeiden kann (Falschkombinationen).

Was ich jetzt für die Folgefelder Name, PLZ, Ort etc. benötige ist folgendes:
ich wähle die Kundennummer per Drop-Down-Feld aus und in den Folgefeldern werden die dazugehörigen Werte aus der Lieferanten-DB geholt, angezeigt und dann auch in der Bestelltabelle gespeichert. Erschwerend kommt dazu, das die gesamten Adressfelder editierbar sein müssen und dann auch in der Bestelltabelle gespeichert werden. Hintergrund sind die Unterlieferanten.
Ein Beispiel - es wird eine Bestellung bei Amazon ausgelöst, die aber nicht direkt von Amazon ausgeführt wird, sondern von einem Unterlieferant (Drittanbieter). Dann wähle ich bei Kundennummer Amazon aus, trage bei Unterlieferant den Drittanbieter ein und auch dessen Kontaktinformationen. Da es sich in diesem Fall meist um eine einzelne Bestellung bei diesen Drittanbieter handelt soll er nicht in die Lieferantendatenbank aufgenommen werden. Für die einzelne Bestellung sollen diese Informationen aber schon vorgehalten werden.

Mit Textfelder und DomWert wird mir zwar alles angezeigt, aber nicht gespeichert und auch nicht editierbar.
Mit Drop-Down-Felder kann ich alles einzeln auswählen und auch speichern, habe aber die Gefahr der Falschkombination von Adressinformationen.

Die Artikelliste ist das UFO zur Bestelllungen.

Gruß
Olaf
Ich arbeite aktuell mit MS Access 2013

Beaker s.a.

Hallo,
ZitatUnterlieferanten werden nur in der Bestell-DB erfasst,

D.h. bei jeder Bestellung wird der U-Lieferant neu erfasst? Also keine Auswahl per Kombi?

Zeige doch mal ein Bild des Beziehungsfensters (alle Tabellen mit ALLEN Feldern müssen
zu sehen sein).

Wozu ist es nötig mit verknüpften und lokalen Tabelle zu arbeiten? Warum sind die lokalen
Tabellen nicht auch mit im Backend?
So kannst du doch keine Beziehungen erstellen (die gehören ja ins BE).

Ich vermute mit der richtigen Datenherkunft des Forms braucht's keine DomWerte,
und damit wäre auch die Editierbarkeit gegeben.

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

MzKlMu

Hallo,
ich würde auf jeden Fall für die Unterlieferanten in der Bestelldb in einer extra Tabelle verwalten. Diese Tabelle der U-Li erhält einen Fremdschlüssel zum Hauptlieferanten.
Ich gehe davon aus, dass sich diese U-Li in verschiedenen Bestellungen wiederholen. Daher ist auch aus diesem Gesichtspunkt die Tabelle sinnvoll. Man wählt dann einfach per Kombi aus. Das Kombi kann auf die entsprechenden Hauptlieferanten filtern.

Wenn Du bei Deiner Version bleiben willst, geht das nur per VBA.
Prinzip:
Me.ULieferant = DLookup("Feldname","Tabellename","Kriterium")
Das muss so für jedes Feld gemacht werden.
Zeige mal eine Domwertformel.
Gruß
Klaus

Cyberhunter

Hallo Ekkehard,

ich habe mal ein Screenshot von den Beziehungen angefügt. Die Tabellen die du im linken Bereich siehst und auf "_index" enden dienen nur als Datensatzherkunft und stehen nicht in Beziehungen.

Drei Tabellen sind aus einer anderen Datenbank verknüpft und die verlinkte Exceltabelle enthält Kostenstelleninformationen die sich monatlich ändern. Die Tabelle wird so wie sie erstellt wird an diese Stelle kopiert, ohne das etwas an der Formatierung etc. geändert werden muss. Damit sind die Kollegen in der Lage die Tabelle/Daten zu aktualisieren, ohne das es Datensalat gibt, weil beim Import etwas falsch gemacht wurde. Die Daten aus der Tabelle habe ich über eine Abfrage auch schon in den entsprechenden Formularen drin. Das funktioniert schon super.

Die Unterlieferanten sind häufig Lieferanten bei denen wir nur sehr selten oder gar nur einmal Bestellen (z.B. Drittlieferant bei Amazon), alle anderen Lieferanten werden in einer separaten Lieferantendatenbank gespeichert und die über die Tabelle "tblLieferant" mit dieser Datenbank verknüpft. Wenn ich die Unterlieferanten auch als DropDown Feld anlege, dann würden für die Felder "Land", "PLZ", "Ort", "Strasse" und "Nr" mehrere Datenherkunftsfelder in Frage kommen, was die Sache nicht einfacher macht. Schreiben in die Lieferantendatenbank ist von der Stelle nicht möglich und auch nicht gewollt.

In dem Textfeld Lieferant habe ich folgenden DomWert mit Bezug auf die Kundennummer stehen:
=DomWert("Lieferant";"tblLieferant";"Kundennummer = '" & [Kundennummer] & "'")


Gruß
Olaf
Ich arbeite aktuell mit MS Access 2013

MzKlMu

Hallo,
die angelegten Beziehungen sind eine Katastrophe. Selbst wenn das jetzt funktioniert, halte ich das auf Dauer für unbrauchbar.
Versuche mal 1:n Beziehungen mit referentieller Integrität (RI) einzustellen.
Und RI halte ich für unerlässlich.

ZitatDie Unterlieferanten sind häufig Lieferanten bei denen wir nur sehr selten oder gar nur einmal Bestellen (z.B. Drittlieferant bei Amazon),
Du kannst es drehen und wenden wie Du willst, die Unterlieferanten gehören in eine eigene Tabelle mit einem Fremdschlüssel zum Hauptlieferanten. Es wird einfacher dadurch. So wie Du es jetzt machst ist es komplizierter.
Gruß
Klaus

Cyberhunter

Hallo Klaus,

Zitatdie angelegten Beziehungen sind eine Katastrophe. Selbst wenn das jetzt funktioniert, halte ich das auf Dauer für unbrauchbar.
Versuche mal 1:n Beziehungen mit referentieller Integrität (RI) einzustellen

Die Beziehungen sind alle 1:n, ich hatte nur bei allen keine RI aktiviert, was ich soweit es möglich war jetzt nachgeholt habe. Zu der externen DB kann ich es nicht aktivieren. An welcher Stelle sind die Beziehungen eine Katastrophe, ich als Anfänger habe dafür noch zu wenig Erfahrung als das ich so etwas sehe.

Ich versuche es mal mit der Unterlieferanten Tabelle, mal sehen ob ich es hinbekomme.

Gruß
Olaf
Ich arbeite aktuell mit MS Access 2013