Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: swsef am Oktober 30, 2012, 14:57:03

Titel: Kundennamen automatisch anzeigen
Beitrag von: swsef am Oktober 30, 2012, 14:57:03
Hallo,

es handelt sich um folgendes:

Ich habe eine Wartungsdatenbank erstellt, in der ich durchgeführte Wartungen für Kunden erfassen möchte. In einer Tabelle "Kunden" sind alle Kundendaten hinterlegt (Name,Kundennummer, Adresse...). Eine zweite Tabelle "Wartungsvertrag" ist mit der ersten verknüpft. Die Eingabe für beide Tabellen soll über Formulare realisiert werden.

Sämtliche Daten der Kundentabelle werden über das entsprechende Formular von Hand eingetragen. Für das Formular "Wartungsvertrag" soll eine bestehende Kundennummer ausgewählt werden, was ich auch mit Hilfe eines Kombifelds erreicht habe. Zusätzlich soll der Kundenname automatisch angezeigt werden, wenn die entsprechende Kundennummer ausgewählt wurde. Ich habe ein Textfeld erzeugt, in der Formularansicht steht dort dann allerdings #Name? beim Eigenschaftdatenblatt Register Daten kann ich keine andere Tabelle auswählen, da dieses Formular ja mit der Tabelle "Wartungsvertrag" verknüpft ist. Ich will quasi nur den Kundennamen aus der anderen Tabelle übernehmen. Aber so recht fällt mir keine Lösung ein.

Ich verwende Access 2010.
Titel: Re: Kundennamen automatisch anzeigen
Beitrag von: MzKlMu am Oktober 30, 2012, 15:09:34
Hallo,
über welche Felder hast Du verknüpft?
Du solltest zum Verknüpfen extra Felder haben, in der Kundentabelle ein Autowert und in der Wartungstabelle eine Zahl (Long).
Die Darstellung erfolgt mit einem Hauptformular (Kundendaten) und darin einem Unterformular für den Wartungsvertrag. Hafo und Ufo müssen über die Schlüsselfelder verknüpft sein.

Du kannst dann im Ufo weitere Wartungsverträge erfassen, das Schlüsselfeld zum Kunden wird dann automatisch gefüllt. Du brauchst kein Kombi.
Titel: Re: Kundennamen automatisch anzeigen
Beitrag von: Beaker s.a. am Oktober 30, 2012, 23:25:07
Hallo,
@Klaus
In diesem Fall halte ich eine HFo - UFo Konstruktion nicht
für das Richtige. Ich erfasse z.B. Aufträge zu einem Kunden
auch nicht in einem UFo.

@swsef
Um ein Textfeld, das nicht in der Datenherkunft des Forms
enthalten ist, anzuzeigen hast Du zwei Möglichkeiten.
1. Du nimmst den Namen mit in das Kombi auf, und liest
die entsprechende Spalte (Column) aus
Me!DeinTextfeld = Me!DeinKombi.Column(n)
n = Spalte mit Namen (gezählt ab 0)
2. Per DLookup
Me!DeinTextfeld = DLookup("FeldMitNamenInKundentabelle","Kundentabelle","KundeNr = " & Me!DeinKombi
Voraussetzung: im Kombi ist die Spalte mit der Kunde-Nr. ist die gebundene.
hth
gruss ekkehard
Titel: Re: Kundennamen automatisch anzeigen
Beitrag von: MzKlMu am Oktober 30, 2012, 23:39:10
Hallo,
er will ja mehrere Wartungen zu einem Kunden erfassen, das heist 1:n. Daraus ergibt sich der zweckmäßige und einfache Einsatz eines Ufos.
ZitatUm ein Textfeld, das nicht in der Datenherkunft des Forms
enthalten ist, anzuzeigen hast Du zwei Möglichkeiten.
Ich sehe da noch eine 3.Möglichkeit, die ich für die einfachste und schnellste halte.
Nämlich die Kundentabelle mit in die Datenherkunft (über eine Abfrage) aufzunehmen, dann stehen alle Felder zur Anzeige zur Verfügung.
Das hat auch den Vorteil, dass man nichts programmieren muss.
Titel: Re: Kundennamen automatisch anzeigen
Beitrag von: Beaker s.a. am Oktober 30, 2012, 23:54:39
Hallo Klaus,
Im Prinzip gebe ich Dir ja Recht, aber ich erfasse
auch mehrere Aufträge für einen Kunden,
und verwende dafür ein eigenes HFo.
Ich denke aber, dass der TS das für seinen Fall selbst
entscheiden muss, welche Möglichkeit für ihn die
richtige ist.
gruss ekkehard
Titel: Re: Kundennamen automatisch anzeigen
Beitrag von: swsef am November 01, 2012, 11:26:30
Hallo,
ersteinmal danke für die schnellen Antworten!

@MzKlMu
Wie sähe denn so eine Abfrage aus? Verknüpft habe ich jeweils das Feld Kundennummer beider Tabellen (Kunden und Warungsvertrag). ID ist bei beiden Tabellen der Primärschlüssel, Beziehungstyp undefiniert.

Ich habe mal die Beziehungen als Foto angehängt.

@Beaker s.a.
Wofür steht das Me!? Und wo genau gebe ich diesen Code überhaupt ein?

Sorry für meine Noobfragen, aber mein Anfängerkurs Access 2007 ist nun auch schon ein paar Jährchen her.

[Anhang gelöscht durch Administrator]
Titel: Re: Kundennamen automatisch anzeigen
Beitrag von: MzKlMu am November 01, 2012, 11:43:42
Hallo,
Oh je,  ;D im Datenmodell sind ganz grobe Fehler drin. Die Beziehungen sind alle falsch. Beziehungen laufen immer über Primärschlsüssel und Fremdschlüssel. Fremdschlüssel hast Du gar keine drin. Du kannst auch davon ausgehen, dass Du bei undefinierten Beziehungen erheblich Probleme bekommst. Es sollte immer referentielle Integrität eingestellt werden.

Anbei eine Bild, nur mal für Kunde mit Wartungsvertrag.

Wie hängt denn die Tabelle Technik zusammen?


PS:
Du solltest ID Felder nicht einfach ID nennen, Du weist ja gar nicht welche ID zu welcher Tabelle gehört.
Und die IF Felder sind wichtig, diese sind der Dreh und Angelpunkt einer DB.
Hast Du Nachschlagefelder in den Tabellen direkt angelegt? Wenn ja entfernen, diese verhindern den sauberen Aufbau einer DB.

Du kannst auch die ganze DB mal hier anhängen.

[Anhang gelöscht durch Administrator]
Titel: Re: Kundennamen automatisch anzeigen
Beitrag von: Beaker s.a. am November 01, 2012, 12:42:59
Hallo swsef,
ZitatWofür steht das Me!? Und wo genau gebe ich diesen Code überhaupt ein?
Me ist eine Referenz auf das Formular in dem Du dich befindest.
Der Code kommt in den Ereignishandler des Ereignisses AfterUpdate
des Kombifeldes.
Private Sub DeinKombi_AfterUpdate()
    Me!DeinTextfeld = DLookup("FeldMitNamenInKundentabelle","Kundentabelle","KundeNr = " & Me!DeinKombi
End Sub

Arbeite aber erstmal Klaus' Hinweise bezügl. Datenmodell ab, bevor
Du dich mit Formularen und Code beschäftigst.
hth
gruss ekkehard
Titel: Re: Kundennamen automatisch anzeigen
Beitrag von: swsef am November 05, 2012, 09:12:07
Hallo,

ich habe die Tabellen wie vorgeschlagen verknüpft, leider ohne Erfolg. Das Konzept ist wie folgt: in der Tabelle Wartungsvertrag sollen bestehende Verträge erfasst werden, mit der Kundentechnik zum Zeitpunkt des Vertrages. In der Tabelle Technik soll der aktuelle Stand der Technik erfasst werden, z.B. wenn ein neuer Rechner dazu gekommen ist. Ich habe mal die ganze Datenbank angehängt.

Sollten noch weitere Unklarheiten auftreten, einfach fragen und danke für die Hilfe.

[Anhang gelöscht durch Administrator]
Titel: Re: Kundennamen automatisch anzeigen
Beitrag von: DF6GL am November 12, 2012, 10:46:35
Hallo,


kann nur MzKlMu wiederholen:  Die Tabellen tabWartungsvertrag und tabTechnik sind nicht  normalisiert ...


Die doppelten Felder in beiden Tabellen sind zu entfernen. Die tabTechnik sollte etwa solchen Aufbau haben (wenn damit eine Liste der für einen Wartungsvertrag eingeschlossenen Geräte gemeint ist):


tabTechnik:
TID
T_WVertagID    (Verknüpfung zu tabWartungsvertrag)
T_GID         (Verknüpfung zu tabGeräte)
T_Seriennr  
T_Bemerkungen
T_Datum
.
.



weiterhin:

tabGeräte:

GID
G_Bezeichnung
G_Modell
G_GTID  (Verknüpfung zu tabGerätetypen)
.
.
.

tabGeräteTypen:

GTID
GT_Bezeichnung
GT_Bemerkung
.
.
.
Titel: Re: Kundennamen automatisch anzeigen
Beitrag von: swsef am November 13, 2012, 14:41:35
Hallo,

danke für den Tipp. Wenn ich es richtig verstanden habe, muss ich also sämtliche Datenfelder zu einer "Kategorie" in einer eigenen Tabelle anlegen. Dabei dürfen keine DF mehrfach vorkommen. Wie realisiere ich dann aber den Vergleich von alter Technik zum Zeitpunkt der Vertragserstellung mit einer Aktualisierung?
Titel: Re: Kundennamen automatisch anzeigen
Beitrag von: DF6GL am November 13, 2012, 15:58:35
Hallo,

eine zeitliche Aktualisierung (Änderung) bedingt dann einen neuen Datensatz (mit neuer "Technik" (-->Gerät)  und dessen "Beginndatum")