0

Vorhandene Datensätze einer Untertabelle mit Haupttabelle verknüpfen

Hallo zusammen,
ich habe mir eine DB über eine Modellbahnsammlung gebastelt.
Die Haupttabelle "Stammdaten" enthält die Daten zu allen Artikeln. Die Artikel werden über die Felder "Hersteller", "Artnr" und "Variante eindeutig identifiziert.

Die Untertabelle "Koll2001" enthält zu bestimmten Artikeln ein oder mehrere Zeilen mit dem Schätzpreis jeden Jahres. Auch hier werden die Zeilen über die Felder "Artikel", Herstelle und "Variante" eindeutig identifiziert.

Mein Problem besteht nun in der nachträglichen Verknüpfung der Felder aus der Untertabelle "Koll2001" zu dem entsprechenden Datensatz in der Haupttabelle "Stammdaten". Manuell geht das über in der Untertabelle über "Vorhandenen Datensatz hinzufügen" leider immer nur einzeln.

Kann man auch gleichzeitig alle Datensätze aus der Untertabelle, dem Datensatz mit denselben Schlüsselfeldern zuordnen?

4 Antworten

null
    • mirko3
    • gestern
    • Gemeldet - anzeigen

    Hallo  Das kann man. Zum Beispiel kann eine Schleife über die Untertabelle laufen und alle Schlüsselfelder vergleichen mit dem passenden Datensatz der Obertabelle. Du kannst das Script in einen Button legen. Ein Beispiel (eine andere Variante) einer solchen Iteration per select() lege ich hier mal bei. Wenn du das testen willst, dann mach vorher ein backup. 
     

    (select Koll2001).(
        let h := Hersteller;
        let a := Artnr;
        let v := Variante;
        Stammdaten := first(select Stammdaten where Hersteller = h and Artnr = a and Variante = v)
    )
    

    Das Verknüpfungsfeld heißt in meinem Fall "Stammdaten", wie die Obertabelle. Mirko

    • jochem_esch
    • vor 21 Stunden
    • Gemeldet - anzeigen

    Hallo Mirko,

    vielen Dank für Deinen Kommentar. Leider bin ich in Ninox-Skript nicht besonders eingelesen. Ich habe mir mal ein paar Tutorials bezüglich Schleifen angeschaut und mein Skript im Formular der Untertabelle "Koll bis 2001" wie folgt bei einem Button hinterlegt:

    for i in select 'Koll bis 2001' do
        let h := i.HerstellerKoll2001;
        let a := i.ArtnrKoll2001;
        let v := i.VarianteKoll2001;
        i.StammdatenID := first(select Stammdaten where Hersteller = h and Artnr = a and Variante = v).Nr
    end
    

    In der Tabelle "Koll bis 2001" habe ich ein Feld namens "StammdatenID" angelegt. Für mein Verständnis sollte hier durch das Skript für jeden Datensatz in "Koll bis 2001" die eindeutige "Nr" des in der Tabelle "Stammdaten" gefundenen Datensatzes eingefügt werden.

    So funktioniert die 1:n-Verknüpfungen ohne Untertabelle jedenfalls in anderen Verknüpfungen bei mir jedenfalls  einwandfrei.

    Das obige Skript scheint allerdings nicht wie gewünscht zu arbeiten. Es werden keine Daten in das Feld "StammdatenID" geschrieben.

    • mirko3
    • vor 19 Stunden
    • Gemeldet - anzeigen

    Mein Script kann natürlich nicht funktionieren, da die Feldbezeichnungen anders sind, als von dir oben beschrieben. Ausserdem dachte ich, dass StammdatenID ein Verknüpfungsfeld ist, also, dass Stammdaten und 'Koll bis 2001' 1:N verknüpft werden sollen. Also, jede Menge Vorannahmen, die nicht gestimmt haben. Jetzt gibt es zwei Möglichkeiten, die ich vorschlage. Entweder, du schreibst die relevanten Namen (korrekter Tabellenname, korrekte Feldbezeichnung und Feldtypen) mal auf und ich stelle es in einer Datenbank bei mir kurz nach, oder du leerst deine DB-Kopie von allen nicht benötigten Tabellen und Daten und stellst sie hier ein. Dann sollte das lösbar sein. Dein Script oben sieht gut aus, wahrscheinlich ergibt das first() keinen Wert. Gruß Mirko

    • jochem_esch
    • vor 15 Stunden
    • Gemeldet - anzeigen

    Hallo Mirko,

    die DB habe ich angehangen. Die Feldbezeichnungen hatte ich nach meinem ersten Post geändert. Sorry für die Verwirrung.

    Ich bin bisher davon ausgegangen, dass bei einer 1:N-Verknüpfung immer die Datensatznummer aus aus der N-Tabelle verwendet wird. So habe ich es jedenfalls realisiert, bei den Stammdaten mit "N:1"-Beziehung realisiert (siehe Stammdate/Hersteller).

    Die Beziehung zwischen "Stammdaten" und "Koll bis 2001" ist aber eine 1:N-Beziehung. Deshalb habe ich "Koll bis 2001" als Untertabelle eingefügt. Das würde auch alles einwandfrei funktionieren, solange man die leere Untertabelle einbindet und dann Manuel Daten eintippt. In ist aber so, dass ich die Daten bereits aus einem Access-Export vorliegen und ich diese in die Untertabelle importiert habe. Dabei entsteht aber eben keine Verknüpfung zu den Stammdaten, da man keine Schlüsselfelder definieren kann, oder ich nicht weiß, wie.

    Ich kenne leider keinen Lösungsweg, habe aber noch weitere Untertabellen, die in Stammdaten eingefügt werden müssen ("Koll ab 2002", "Einkäufe bis 2001" und "Einkäufe ab 2002". Auch dazu liegen Access-Exporte vor.

    Bin gespannt, ob Du eine Lösung findest.

Content aside

  • vor 15 StundenZuletzt aktiv
  • 4Antworten
  • 21Ansichten
  • 3 Folge bereits