Relationale Daten importieren

In diesem Kapitel wird dargestellt, wie Daten in verknüpfte Tabellen importiert werden können.

Vorbemerkung

Ninox baut Tabellenverknüpfungen ausschließlich basierend auf den Ninox-eigenen Schlüsseln auf. Als Schlüssel verwendet Ninox dabei die Spalte Nr. Die Werte dieser Spalte werden automatisch vergeben und können nicht geändert werden. Es ist somit auch nicht möglich, diese Spalte beim Import zu verändern.

Angenommen, Sie verknüpfen eine Tabelle Rechnung mit einer anderen Tabelle Kunde. Dann erstellt Ninox im Hintergrund in der Tabelle Rechnung ein Feld für die Nr des Kunden.

Bemerkung, falls Sie Vorerfahrung mit anderen Datenbanken haben: In SQL entspräche dies in etwa ALTER TABLE Rechnung ADD COLUMN Kunde FOREIGN KEY REFERENCES Kunde(Nr).

Um beim Import dieses Feld Rechnung.Kunde richtig zu befüllen, müssen Sie dem Importassistenten Informationen mitgeben, anhand derer Ninox den richtigen Kunden identifizieren und die Relation aufbauen kann.

Vorgehensweise

Die Vorgehensweise zum Import relationaler Daten wird an dem Beispiel Rechnung => Kunde verdeutlicht. Dabei ist Kunde die Haupttabelle und Rechnung die Detailtabelle. (Ein Kunde kann mehrere Rechnungen haben.)

Übersicht:

  1. Vorbereitung der zu importierenden Daten
  2. Anlegen der Tabellen in Ninox
  3. Import in die Haupttabelle
  4. Import in die Detailtabelle

1. Vorbereitung der zu importierenden Daten

Die Daten müssen in zwei CSV-Dateien vorliegen mit folgender exemplarischer Struktur:

Kunde.csv — Kundennummer;Vorname;Nachname

Rechnung.csv — Kundennummer;Rechnungsnummer;Datum;Betrag

Wichtig ist dabei nur, dass es ein gemeinsames Schlüsselfeld gibt – in diesem Fall die Kundennumer. Die anderen Felder dienen lediglich der Illustration.

2. Anlegen der Tabellen in Ninox

Erstellen Sie analog zu den CSV-Dateien zwei Tabellen in Ninox:

Kunde
- Kundennummer (Text)
- Vorname (Text)
- Nachname (Text)

Rechnung
- Kunde (Verknüpfung zur Tabelle Kunde)
- Rechnungsnummer (Text)
- Datum (Datum)
- Betrag (Zahl)

Beachten Sie, dass die Tabelle Rechnung kein Feld für die Kundennummer trägt, statt dessen eine Verknüpfung zur Kundentabelle.

3. Import in die Haupttabelle

Importieren Sie die Kunden.csv ohne besondere Einstellungen in die Tabelle Kunde.

4. Import in die Detailtabelle

Importieren Sie die Rechnung.csv, bei der Feldzuweisung legen Sie folgendes fest:

[ Kundennummer ] — [ Kunde (Kundennummer) ] (alle aktualiseren)

Durch diese Zuweisung teilen Sie dem Importassistenen mit, dass die Kundennummer aus der Rechnung.csv in der Tabelle Kunde nachgeschlagen werden soll, um den richtigen Kunden zuzuordnen.

15 Gedanken zu „Relationale Daten importieren

  1. Es geht nochmal um die nachträgliche Verknüpfung von Tabellen.
    Ich habe die entsprechenden Beiträge und auch die Anleitung “Relationale Daten importieren” gelesen. Leider bekomme ich trotzdem nicht hin.

    Ich habe eine Tabelle “Jahrbuecher” und eine Tabelle “Jahrbuecherinhalte”. In beiden gibt es eine Spalte Jahrgang über die die Jahrbuecherinhalte den Jahrbuechern zugeordnet werden können.
    In welcher Tabelle muss ich über die Massendatenänderung welche Formel eintragen, um die Tabellen nachträglich zu verknüpfen?

    Trotz “stundenlanger” Versuche habe ich es nicht hinbekommen.
    Würde mich sehr über Hilfe freuen.

    1. Hallo Holzi,
      Erstens, sollten die Spalten “Jahrgang” in beiden Tabellen als Textspalten angelegt werden und die Inhalte absolut identisch sein.
      Dann öffnest du die Tabelle “Jahrbuecherinhalte” und fügst dort eine Verknüpfung zu der Tabelle “Jahrbuecher”
      In der Tabelle “Jahrbuecherinhalte” gehst du auf Massendatenänderung und bei der Spalte “Jahrbuecher” fügst du folgende Formel an:

      let myYear := Jahrgang;
      first(select Jahrbuecher [Jahrgang = myYear])

      grüße
      Leo

  2. Hallo zusammen,

    kann ich eigentlich 2 Tabellen auch nachträglich verknüpfen? Z.B. über eine Massendatenänderung?

    Ich habe eine größere Datenbank mit Schulen (ca. 6000 Datensätze) verknüpft mit Schulträgern (ca. 700 Datensätze). Nun habe ich eine Tabelle “Kreise”, die möchte ich nachträglich mit den Schulträgern verknüpfen. Sowohl die Tabelle Schulträger, als auch die Tabelle Kreise enthält eine numerische ID, anhand derer sich die Zusammengehörigkeit ergibt.

    Nun kann ich diverse Änderungen via Massendatenänderung machen, aber eine Verknüpfung setzen ist mir bisher nicht gelungen. Mache ich was falsch oder geht das tatsächlich nicht?

    Gruß Peter

    1. Hallo Peter,

      ja es geht. Das Verknüpfungsfeld kannst du über Massendatenänderungen ansprechen.

      let c:= num_Id;
      select 'Schulträger'[num_Id = c].Id

      Hiermit durchsuchst die Tabelle mit der du verknüpfen willst und gibst die ID in das Verknüpfungsfeld.

      Bei Fragen auch gerne an support@ninoxdb.de schreiben.

      VG, Alex

  3. Hallo zusammen,
    Ich möchte das Thema nochmals aufgreifen. Ich habe drei Tabellen:
    Produkte (Produktname)
    Eigenschaften(Eigenschaftname)
    Produkteigenschaften
    Die Tabelle Produkteigenschaften enthält Felder:
    Produkt (Verknüpfung auf Tabelle Produkte)
    Eigenschaft (Verknüpfung auf Tabelle Eigenschaften)
    Wert (Text)
    Die Daten importiere ich über Access vom SQL Server, es sind ca. 6000 Datensätze.

    In SQL ist es gewährleistet dass die Kombination aus Produkt und Eigenschaft eindeutig ist. Wenn ich jetzt die .csv Tabelle nach Ninox importiere, gebe ich als Option “nur neue Zeilen hinzufügen” und wähle die Felder Produkt und Eigenschaft als Schlüssel.
    Theoretisch sollte Ninox jetzt die vorhandenen Kombinationen aus Produkt und Eigenschaft ausschließen und die neuen Zeilen hinzufügen. Stattdessen schlägt Ninox bei Vorschau vor die vorhandenen Datensätze als leere Datensätze nochmals hinzufügen und die neuen Datensätze mit Daten gefüllt. Also hätte ich hier theoretisch 12000 Datensätze. Ich habe jetzt probeweise die verknüpfte Felder durch die Textfelder ersetzt, so funktioniert der Import mit zwei Schlüssel problemlos. Bis jetzt habe ich mir damit geholfen, dass ich in der Tabelle Produkteigenschaften einen Textfeld eingefügt habe und per Massendatenänderung mit Formel

    Produkte.Produktname+Eigenschaften.Eigenschaftname

    gefüllt. Das selbe für die Access-Tabelle. So brauche ich nur einen Schlüsselfeld bei Import. Ich denke aber – es ist nicht im Sinne der Erfindung.

    Gruß
    Leo

    1. Hallo Leo,
      danke für die Hinweise! Dieses Thema, mehrere Fremdschlüssel beim Import gleichzeitig auch als Primärschlüssel zur Erkennung von Duplikaten zu verwenden, nehmen wir auf unsere Anofrderungsliste.
      Viele Grüße, Frank

  4. Hallo Alex,
    das klingt erstmal komisch für mich, weil ich seit 1 Jahr meine Tabellen über txt importiere. (Excel speichern unter -> txt (Tabstopp getrennt) -> import in ninox)

    Aber um diesen Fehler auszuschließen, habe ich auch ein CSV versucht. auch hier stürzt die App ab.
    Grüße, Johannes

    1. Hallo Johannes,
      Danke für das Feedback. Der Import von txt Dateien klappt, wusste ich noch nicht.
      Wir haben gerade versucht den Fehler nachzustellen.
      Können Sie uns weitere Information zu Verfügung stellen?
      Werden in Tab A Zeilen aktualisiert oder neue Zeilen hinzugefügt?
      Sollen Verknüpfungen zu Tabelle B und C erstellt werden – sind dort bereits die Datensätze angelegt?
      Gerne können Sie sich auch direkt an support@ninoxdb.de wenden.
      VG, Alex

    2. Hallo Johannes,

      Ich hatte sowas auch schon mal gehabt. Ich sage nicht, dass meine Lösung richtig ist, aber hat bei mir funktioniert. Zuerst erstellst du in Ninox eine Ansicht von der Tab A mit Spalten Nr, Nr von B, Nr von C. Diese Tabelle exportierst du als CSV. In der exportierten Tabelle änderst du deine Spalten von B und C und importierst wieder nach Ninox. Du machst aber nur die erste Spalte Nr als Schlüssel. Die beiden anderen bleiben als “alle aktualisieren”.

      Gruß
      Leo

      1. Hallo Leo,
        danke für deinen Tip! Leider kann ich die Funktion (Schlüssel/alle aktualiseren/…) der Tab A beim Import nicht einstellen.

        Alex hat mir den Tip gegeben, eine andere Spalte als die ID für den Bezug beim Import zu verwenden. Jetzt hats geklappt.
        Demnächst kann man aber die ID nutzen.

        Grüße, Johannes

        1. Hallo Johannes,
          Habe jetzt bei mir ausprobiert. Es stimmt, bei ID gibt es keine Einstellmöglichkeiten, wenn man aber die zwei anderen Spalten auf “alle aktualisieren” setzt, werden die Änderungen trotzdem sauber durchgeführt.
          Grüße
          Leo

  5. Hallo Zusammen,

    vor einiger Zeit habe ich mir eine Datenbank erstellt und bin sehr zufrieden mit der App.
    Jetzt möchte einige neue Daten in eine Verbindungstabelle (Tab A) importieren. In Tab A stehen beliebige Kombinationen aus Tab B und Tab C. Um Tab A zu aktualisieren, importiere ich ein txt-File, das in jeder Zeile die gewünschte neue Kombination der Schlüssel von Tab B und Tab C enthält. Für den Import setze ich die beiden Werte auf “Schlüssel”. Beim drücken auf “Weiter” stürtzt die App ab.
    Was mache ich verkehrt?

    Schöne Grüße
    Johannes

Hinterlasse eine Antwort