0

Datensätze zusammenführen

Moin zusammen.

Ich arbeite als Fotograf im Bereich Motorsport - Bahnsport -Speedway.

Bisher habe ich meine Fotos in einer Exceltabelle organisiert und gesichert.  Über die letzten Jahre sind so ca. 4.000 (Zeilen-) entstanden.

 

Eine Zeile ist zusätzlich in Spalten  ungefähr (Kurzform) so organisiert:

 

Nachname | Vorname |Veranstaltung | Jahr

Muster | Heinz | Tolles Rennen|2016

Muster | Heinz | Dummes Rennen|2018

Muster | Heinz | Regenrennen|2016

Muster | Heinz | Bergrennen|2017

Muster | Heinz | Speedway|2016

Pilot|Peter|Tolles Rennen|2016

Pilot | Peter | Dummes Rennen|2018

Pilot | Peter | Regenrennen|2016

Formel | Frank | Bergrennen|2017

Formel | Frank | Speedway|2016

 

Die csv habe ich nun in Ninox importiert. Nun versuche ich die Datensätze der Zeilen seit Tagen zusammenzuführen. Mein Ziel ist:

Ich möchte Muster (Name)  eingeben und alle Rennen vom Heinz Muster sollen dann bei ihm in der dann aufgehenden Anzeige erscheinen und nicht wie jetzt in der Tabelle x-mal der Name Muster untereinander stehend

 

Beispiel Bild:

 

Dann hätte ich zu dem Fahrer alle seien Rennen  im Überblick. Ich könnte dann noch einen Link zu den Bilder anbringen und wäre TOP für unterwegs bei den Rennveranstaltungen organisiert. Desweitern wäre es auch ein Ziele z.B. die Veranstaltung anzuklicken und die Datenbank würde mir sagen bei dem „Tolles Rennen“ waren Fahrer x,y,z am Start. In der Excel oder in der Grundtabelle könnte ich es ja, aber wie in der Ansicht?

 

Ich probiere seit Tagen mit Untertabelle, mit Verknüpfungen..aber eine richtige Lösung finde ich nicht. Ich könnte ja mehre Verknüpfungen legen, aber das ist „wie gewollt aber nicht gekonnt“.  

 

Hat einer von den Lesern hier einen Ratschlag/Tipp wie man es lösen könnte?

 

Herzlichen Dank

 

Holger

7 Antworten

null
    • Bahnsport_Info
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Sorry, ich sehe erst jetzt, das ich es in das falsche Forum gepostet habe. Bitte in das entsprechende Forum verschieben. Danke!

    • Ninox-Professional
    • planoxpro
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Ich dachte eigentlich, das sei relativ einfach. Pustekuchen. Meine Idee war folgende:

    Tabelle FAHRER:

    - Nachname (Textfeld)
    - Vorname (Textfeld)
    - Veranstaltungen (1:N-Verknüpfung mit TEILNEHMER)

     

    Tabelle VERANSTALTUNGEN:

    - Bezeichnung (Textfeld)
    - Jahr (Textfeld)
    - Teilnehmer (1:N-Verknüpfung mit TEILNEHMER)

     

    Tabelle TEILNEHMER (Untertabelle von VERANSTALTUNGEN)

    - Fahrer (N:1-Verknüpfung mit FAHRER)
    - Veranstaltungen (N:1-Verknüpfung mit VERANSTALTUNGEN)

    Tabelle XIMPORT (bereits vorhanden):

    - Nachname (Textfeld)
    - Vorname (Textfeld)
    - Veranstaltung (Textfeld)
    - Jahr (Textfeld)
    - [...]

     

    Nun dachte ich, die Tabelle mit den bereits importierten Daten (IMPORT) um eine Schaltfläche zu ergänzen, welche die Tabelle  einmal Satz für Satz durchgeht und die Inhalte auf die anderen Tabellen verteilt. Danach hätte man die IMPORT-Tabelle mitsamt der Schaltfläche löschen können.

     

    Soweit der Plan. Und hier der dazugehörige Schaltflächen-Code:

    for INr in select XImport do
        let FNr := first(select Fahrer where Nachname = INr.Nachname);
        if FNr = null then
            let FNr := (create Fahrer);
            FNr.(Nachname := INr.Nachname);
            FNr.(Vorname := INr.Vorname)
        end;
        let VNr := first(select Veranstaltungen where Bezeichnung = INr.Veranstaltung);
        if VNr = null then
            let VNr := (create Veranstaltungen);
            VNr.(Bezeichnung := INr.Veranstaltung);
            VNr.(Jahr := INr.Jahr)
        end;
        let TNr := (create Teilnehmer);
        TNr.(Fahrer := FNr);
        TNr.(Veranstaltungen := VNr)
    end

    Ergebnis:

    Speedway_Import1

    Zwar werden die Datensätze für Fahrer und Veranstaltungen angelegt, allerdings schon in seltsamer Reihenfolge. Und die Zuordnungen in der Untertabelle TEILNEHMER sind ein totales Mysterium (siehe Screenshot). Natürlich habe ich noch die eine oder andere Syntax- und Format-Variante probiert, aber geholfen hat es nichts.

    Kurzum: Ich bin offenbar mal wieder zu blöd und sehe einfach den Fehler nicht. Hat jemand eine Idee, was da schief läuft?

    • Ninox-Professional
    • planoxpro
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Der Vollständigkeit halber auch noch die Ausgangstabelle mit dem importierten Daten (hatte ich nach den ersten Fehlversuchen genauso angelegt wie oben vom Fragesteller angegeben):

     

    Speedway_Import2

    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Holger,

    Es ist ein bisschen kompliziert. Nehmen wir an, die Rennen haben festen Namen und wiederholren sich periodisch (z.B. Regenrennen gibt es nicht nur 2016 sondern auch 2017 und 2018). Dann macht es Sinn eine Tabelle Rennen mit Rennennamen und noch eine Tabelle  Veranstaltungen zu erstellen, wo das Rennen als Verknüpfung existiert und das Jahr als Zahlenfeld. Jetzt brauchen wir noch die Tabele mit den Fahrer. Nennen wir diese Personen und fügen dort Felder Vorname und Nachname . Was uns noch fehlt, ist die Bezieung zu deiner Hapttabelle mit Fotos. Ich nenne diese Tabelle mal Fotos. Im einfachsten Fall gehöhrt zu jedem Datensatz (Zeile) nur eine Veranstaltung und nur eine Person. Dann Fügen wir zu der Tabelle Fotos die Verknüpfungen zu den Tabellen Personen und Veranstaltungen. Am Ende sollte das Datenmodell etwa so aussehen:

    Bildschirmfoto 2018-11-24 um 15.49.20

    Jetzt haben wir unser Datenmodell und müssen alle Datensätze zuordnen. Dafür kann man einen Button in der Tabelle Fotos einbauen. Die Formel ist ein bisschen kompliziert:

    ---

    "
    /mit unique() werden eindeutige Kontakte identifieziert, neue Datensätze in der Tabelle Personen angelegt und die Datensätze mit der Tabelle Fotos verknüpft/
    ";
    let myUN := unique((select Fotos).(Vorname + "," + Nachname));
    for ii in myUN do
    let myAR := split(ii, ",");
    let newP := (create Personen);
    newP.(Vorname := item(myAR, 0));
    newP.(Nachname := item(myAR, 1));
    (select Fotos)[Vorname = newP.Vorname and Nachname = newP.Nachname].(Personen := newP)
    end;
    "
    /jetzt werden die eindeutige Rennennamen identifieziert und die Tabelle Rennen befüllt/
    ";
    let myUN := unique((select Fotos).Veranstaltung);
    for ii in myUN do
    let newP := (create Rennen);
    newP.(Rennenname := ii)
    end;
    "
    /jetzt werden die Veranstaltungen nach Jahren analysiert, neue Datensätze erstellt und verknüpt/
    ";
    let myUN := unique((select Fotos).(Jahr + "," + Veranstaltung));
    for ii in myUN do
    let myAR := split(ii, ",");
    let newP := (create Veranstaltungen);
    newP.(Jahr := item(myAR, 0));
    newP.(Rennen := first((select Rennen)[Rennenname = item(myAR, 1)]));
    (select Fotos)[Jahr = newP.Jahr and Veranstaltung = newP.Rennen.Rennenname].(Veranstaltungen := newP)
    end

    ---

    Damit es leichter wird zu verstehen, wie das ganze funktioniert, habe ich ein Beispiel hier:

    https://www.dropbox.com/s/vu7cy3xzlhihbp2/Zuordnungen.ninox?dl=0

    Hier kann man bei der Tabelle Fotos die Daten zuordnen und wieder löschen.

     

    Leo

    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Oh, jetzt war ich zu spät ;-(

    • Ninox-Professional
    • planoxpro
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Nee, du kommst genau richtig. ;) Mein Lösungsansatz funktioniert ja nicht.

    • Bahnsport_Info
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo zusammen.

    Herzlichen Dank für die umfangreiche Hilfe und die vielen Anregungen. Das eröffnet mir gerade eh neue Gedankengänge. 
    Die chaotische Zusammenstellung der Exceldatei rührte daher, da ich vor 6 Jahren mit dem Wissen damals etwa schaffen wollte, um die Fotos schnell zu den Fahrernzu zuordnen. Dann habe ich lange nach einer Möglichkeit einer Datenbank gesucht und ich denke ich bin nun fündig geworden. Ich habe mir jetzt schon einige kleine DB auf dem Mac Book für unterwegs gebaut, das mit den Fotos habe ich etwas aufgehoben, weil ich mich irgendwie nicht daran getraut habe.  Nun denke ich aber, habe ich die Lösung und die Fleißarbeit kann beginnen.

    Also noch einmal einen Herzlichen Dank!

    VG
    Holger