Neuigkeiten:

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

Mobiles Hauptmenü

KundenID mit SystemID öffnen

Begonnen von Graydens, November 18, 2024, 10:16:03

⏪ vorheriges - nächstes ⏩

Graydens

Hallo

Ich habe eine Kundenliste (Name: Kundenliste) wo die ganzen Kundendaten stehen und auch welches System = Gerät der Kunde hat. Zuordnung über SystemID. Ein Kunde kann mehrere gleiche oder verschiedene Systeme haben.

In der Kundeliste habe ich einen open link (=Wenn(IstNull([KundeID]);"(New)";"Open")) der mir beim drauf klicken diesen Kunden mit dem Formular (frmKunde ) öffnet und das System anzeigen soll.
Der Kunde wird im frmKunde angezeigt, das System im Unterformular frmSystemKunde

Das Kunden öffnen funktioniert einwandfrei. Habe ich aber den Kunden öfters in der Liste mit mehrere Systemen,öffne ich immer das erst angelegte System von dem Kunden im frmSystemKunde.

Das Formular frmKunde beinhaltet die Kundendaten samt KundenID und SystemID, frmSystemeKunde habe ich auch zum Test KundenID und SystemID angelegt. Bei verknüpfung von/nach ist KundenID (HF zu UF)eingestellt.
Zusätzlich hat das UF noch 2 UF eingebettet. Mit den aktuellen Einstellungen funktioniert die Fütterung der Tabellen genau so wie ich will. Hatte Testweise versucht bei verknüpfung von/nach die SystemID einzutragen, danach funktionierte die Eingabe meiner Unterformulare nicht mehr.

Jetzt habe ich leider keine Ahnung wie ich es einstellen kann, dass ich beim klicken den richtigen Kunden mit dem richtigen System öffne.

Das wäre mein aktueller Stand (Hilfe durch chatgpt)

Private Sub txtOpen_Click()
    Dim strKundeID As Long
    Dim strSystemID As Long
   
    ' Werte für KundeID und SystemID aus dem aktuellen Datensatz holen
    strKundeID = Me.KundeID ' Ersetze "KundeID" durch den tatsächlichen Namen des Feldes
    strSystemID = Me.SystemID ' Ersetze "SystemID" durch den tatsächlichen Namen des Feldes
   
    ' Prüfen, ob der Link "Open" ist (also KundeID nicht Null ist)
    If Nz(strKundeID, 0) <> 0 And Nz(strSystemID, 0) <> 0 Then
        ' Formular "frmKunde" öffnen und sowohl KundeID als auch SystemID als Filter übergeben
        DoCmd.OpenForm "frmKunde", _
                       acNormal, _
                       , _
                       "KundeID = " & strKundeID & " AND SystemID = " & strSystemID
    Else
        ' Fehlermeldung, wenn entweder KundeID oder SystemID nicht vorhanden sind
        MsgBox "Es wurde kein Kunde ausgewählt oder es fehlen Daten.", vbExclamation
    End If
End Sub

Ich hoffe das war halbwegs verständlich geschrieben.

lg

MzKlMu

#1
Hallo,
ZitatIch habe eine Kundenliste (Name: Kundenliste) wo die ganzen Kundendaten stehen und auch welches System = Gerät der Kunde hat. Zuordnung über SystemID. Ein Kunde kann mehrere gleiche oder verschiedene Systeme haben.
Wenn Du das wirklich so hast, ist das doch falsch. Die SystemID hat in der Kundenliste nichts zu suchen. Hier ist doch eine n:m Beziehung notwendig weil der Kunde ja mehrere Geräte/Systeme haben kann.
Und dann kannst Du im Hafo den Kunden anzeigen und in einem verknüpften (über die KundenID !!) Ufo dessen Systeme.
Alles völlig problemlos und ohne einen Buchstaben Code.

In Deinem Thema

https://www.access-o-mania.de/forum/index.php?topic=27653

in Beitrag #31 hast Du das doch richtig dargestellt.

Zeige mal ein Bild des Beziehungsfensters so wie Du es jetzt hast.
Gruß Klaus

Graydens

Ich komme nicht ganz klar mit der Info.
Als Beispiel wie angefügt.Kunde A hat zb 3 verschiedene (2 gleiche 1 anderes) Systeme. Um diese zu unterscheiden muss doch die SystemID in der Kundeliste mit drinnen sein?

Sie dürfen in diesem Board keine Dateianhänge sehen.

Sie dürfen in diesem Board keine Dateianhänge sehen.

Danach klicke ich je nach das was ich sehen will auf den open link und möchte dann ja zu der KundenID und der SystemID gelangen.

Das Formular Kunde sieht dann so aus.

Sie dürfen in diesem Board keine Dateianhänge sehen.

Die Beziehungen sehen immer noch so aus.

Sie dürfen in diesem Board keine Dateianhänge sehen.


lg

MzKlMu

#3
Hallo,
ZitatUm diese zu unterscheiden muss doch die SystemID in der Kundeliste mit drinnen sein?
Nein, definitiv nicht.
Und Du hast ja auch die SystemID gar nicht in der Kundentabelle, sondern nur in der Zuordungstabelle (n:m) tblSystemKunde.
Und dann braucht es nur das Ufo im Kundenformular das über die KundeID verknüpft ist.

Du denkst zu kompliziert.
Ich würde auch das Formular etwas anders gestalten. Nimm die Tabelle tblSystemKunde als Hafo. Als Datenquelle für das Hafo dann eine Abfrage mit der tblSystemKunde und der Tabelle tblKunde. Aber von dieser Tabelle nur die relevanten Kundendaten nur zur Anzeige. Und diese Felder zur Bearbeitung sperren.
Dann in diesem Hafo nur die beiden Ufos. Du hast dann für die Ufos nur eine Ebene was die Referenzierung viel einfacher macht.
Das würde auch Dein Problem aus

https://www.access-o-mania.de/forum/index.php?topic=27678

viel einfacher machen.

Überhaupt, sollte man nicht zu viel in ein Formular packen. Für die Bearbeitung der Kundendaten legt man ein Formaular an, das nur auf der Tabelle tblKunde bassiert.
Gruß Klaus

Graydens

sorry ich bin immer noch raus  :o

wenn ich die SystemID aus er Kundeliste rauswerfe sieht mein Ergebnis so aus.

Sie dürfen in diesem Board keine Dateianhänge sehen.

Jetzt habe ich 3 mal den gleichen Kunden drinnen, kann ihn aber nicht unterscheiden welches System ich öffnen möchte.


MzKlMu

#5
Hallo,
Zitatwenn ich die SystemID aus er Kundeliste rauswerfe sieht mein Ergebnis so aus.
Das ist jetzt verwirrend.
Laut Deinem Beziehungsbild in #2 hast Du doch die SystemID gar nicht in der Kundenliste, wo kommt die her ?

Das Hafo darf nur die Kundenliste (tblKunde) als Datenquelle haben und dann wird auch kein Kunde mehrfach angezeigt.

Das Ufo 1 (tblSystemKunde) wird dann über die KundenID verknüpft.
Ufo 2 und 3 (eine Ebene tiefer) dann über die SystemKundeID.

Aber lies bitte meinen Beitrag in #3 noch mal, ich habe da noch einiges ergänzt.

Noch ein kleiner Rat.
Als Anfänger ist es überaus hilfreich die Fremdschlüssel als solche zu kennzeichnen.
Ich hänge an die Fremdschlüssel immer ein _F an.
KundeID > KundeID_F
Damit weis man immer zweifelsfrei um welchen Schlüssel (PS oder FS) es sich handelt. Und es gibt in der ganzen DB keine dppelten Feldnamen, was auch vorteilhaft ist.
Gruß Klaus

Graydens

Zitat von: MzKlMu am November 18, 2024, 11:49:15wo kommt die her ?
ja stimmt, da hatte ich einfach ein paar Tabellen mehr angehängt um die Infos auszulesen. Wenn ich mir das Endergebnis so anschaue gefällt mir eigentlich mehr, dass der Kunde nur einmal in der Kundeliste vorkommt.

Zu deiner Erweiterung in #3 damit ich das so umbauen kann.

-) Kundeliste bleibt so wie sie ist mit tblKundendaten als Quelle
-) Hauptformular -> hier erstelle ich eine Abfrage und beziehe tblSystemKunde und tbl Kundedaten mit ein zb qreKundeuSysteme

-) die qreKundeuSysteme verwende ich dann in meinem Hauptformular
-) in dem Hauptformular verwende ich die beiden Unterformulare für Verträge und QK

lg

MzKlMu

#7
Hallo,
Zitatdamit ich das so umbauen kann.
Ja, wenn ich das richtig verstanden habe, sollte das so klappen.
Wenn Du das aber umbaust, stimmen die Referenzierungen auf die Ufos aus Deinem Thema mit dem "Letzter Datensatz" nicht mehr, aber es wird einfacher, weil eine Ebene weniger.

Für die Bearbeitung (und Neuanlage) von Kunden erstellst Du ein ganz normales Formular mit der Tabelle tblKunde als Datenbasis.

Du machst das alles viel zu kompliziert. Für die ganze Darstellung, braucht man zunächst mal keinen Buchstaben VBA. Erst wenn ggf. Suchen oder Positionieren auf einen ebstimmten Datensatz wird etwas VBA benötigt.

Was ist eingentlich die maximale Anzahl an Systemen die ein Kunde haben kann ?
Gruß Klaus

Graydens

Theoretisch gibt es keine max Anzahl, aber ein Kunde hat nie mehr als 5 Systeme, sei es unterschiedlich oder gleich.

Ich habe das jetzt umgebaut und es öffnet sich jeweils dr angeklickte kunde und ich kann durch seine Systeme durch klicken. QK und Verträge anlgene.

Sämtliche Codes habe vorerst rasu gelöscht um nochmal von vorne zu beginnen.

Wie würde das jetzt funktionieren, dass die beiden Unterformulare jeweils den letzten Eintrag zeigen?

MzKlMu

Hallo,
sortiere die Abfragen der Ufos nach dem Datum (absteigend) dann wird automatisch immer der letzte Datensatz als erstes angezeigt.
Code braucht es dazu keinen.
Gruß Klaus

Graydens

Hi

Funktioniert alles super was ich bis jetzt habe. Vielen Dank für die tolle Unterstützung.

Jetzt würde ich noch etwas Starthilfe brauchen, falls ich einen neuen Post machen soll ist kein Problem.
Ich würde gerne eine Abfrage haben die folgenden Daten enthält. Ein paar Daten aus den Kundendaten, den aktuellen Eintrag von Vertrag und den aktuellen Eintrag aus der Qualitätskontrolle. Ich weiß nicht ganz wie ich einstellen kann, dass er mir nur den letzten bzw aktuellen Eintrag in meine Abfrage gibt. Bei meinen Versuchen habe ich dann immer alle Einträge drinnen. Mit diesen Daten würde ich dann gerne die Abfrage später mit Ausschluss Kriterien verfeinern.


lg