0

Dringend: CSV-Import fehlerhaft

Ich bitte dringend um Hilfe.

Ich muss Daten von einer Datenbank in eine Andere (neue Version) übernehmen. Dazu bin ich wie folgt vorgegangen:

1. In der Quelldatenbank eine Ansicht mit allen Datenfeldern erzeugt inkl. der Datensatz-ID. Diese Ansicht nach der ID aufsteigend sortiert.

2. Verknüpfte Datensätze aus anderen Tabellen wurden ebenfalls mit deren ID mit exportiert

3. Diese Ansicht nun in CSV exportiert

4. In der Ziel-Datenbank nun die CSV-Datei importiert

Das Problem sind nun die verknüpften Tabellen! Denn diese werden ja über ihre eindeutige ID miteinander verknüpft. Die ID wird aber beim importieren in der Reihenfolge der eingelesenen Datensätze neu vergeben. Wenn nun in der Quell-Datenbank z.B. zwischendrin Datensätze gelöscht werden, gibt es diese ID in der CSV-Datei ja nicht. Beim Import sage ich zwar, dass ich das ID-Feld in der CSV-Datei ebenfalls einlese, aber es wird offensichtlich nicht eingelesen (das würde ja bei bereits vorhandenen Datensätzen) evtl. zu Komplikationen führen. Stattdessen wird die ID einfach hochgezählt.

Jetzt sind die Verknüpfungen (exportierten ID's) nicht mehr gültig bzw. vorhanden. Das ganze Datenkonstrukt funktioniert nun nicht mehr.

Mache ich hier wieder einen Denkfehler oder gibt es eine andere Möglichkeit wie ich Daten von einer Datenbank in eine neue bekomme, in der neue Felder angelegt wurden ?

So sieht die Ursprungs-Tabelle aus:

Fehlende ID

So sieht der Import aus:

Import

Und so sieht dann das Ergebnis aus:

Ergebnis

11 Antworten

null
    • Uwe_Keller
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Dirk, ich habe das vor einigen Wochen mit einer Filemaker Datenbank gemacht. Das funktioniert bestens. Nur kann ich mich jetzt spontan nicht mehr an Details erinnern. Ich habe auch ein wenig hin und her probiert. Bei mir waren das 4 Tabellen. Das Feld Ninox [Nr] ist automatisch da, brauchst du aber nicht mehr bzw.stimmt das ja in der Regel mit dem Primärschlüssel der Quelle nicht überein.  Du musst deinen Schlüssel aus der Quelle auch in Ninox als Feld anlegen. Beim Import dann nicht"Alle aktualisieren" sondern dafür "Schlüssel" wählen. Das jetzt zwar keine wirkliche Hilfe für Dich, aber ein Denkansatz. 

    • jmbrenn_webde
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Dirk,

     

    gehe bei solchen Prozessen immer über Excel (oder numbers), in dem ich in der Detailtabelle ein neues Datenfeld mit dem 'neuen' Schlüssel der Haupttabelle über die Autoeinfügenfunktion generiere. In der zu  importierenden Detailtabelle muss natürlich bereits die Verknüpfung zur Haupttabelle hinterlegt sein, damit man den 'neuen' Schlüssel zur Haupttabelle mit importieren kann.

    In der Hoffnung, dass dies in der Kürze verständlich ist,

    viele Grüße

     

    Jörg

    • Dirk_Pulver_2020
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Jörg, 
    wenn ich Dich richtig verstehe muss man vor dem importieren praktisch ein neu hochgezähltes Index-Feld einfügen. Aber wie verhält sich es dann in Zukunft mit neu anzulegenden Verknüpfungen ? Da muss ich ja dann per Funktion irgendwie das 'neue' Index-Feld mit hochzählen lassen. Richtig ?

    • Tacho
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Dirk,

     

    hat es eine besondere Bewandnis, dass die Artikelnummer "A003" doppelt vergeben wurde?

    Gruß
    Tacho

    • Dirk_Pulver_2020
    • vor 6 Jahren
    • Gemeldet - anzeigen

    @Tacho: Nein, das war mir erst mal egal. Das sind Kundendaten - im Moment nur zum Testen..... spielt also keine Rolle

    • jmbrenn_webde
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Dirk,

    Du hast es perfekt verstanden, wenn Du die neuen Datensätze weiter per Import an die DB addieren möchtest, wäre der von Dir vorgeschlagene Weg der richtige.

    Schönes Wochenende 

    Jörg

    • Dirk_Pulver_2020
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Theoretisch ist das ja klar, aber wie ist der praktische Ansatz. Ich habe z.B. eine Unter-Tabelle, die neue Indexe bekommt. Die Index-Nummern werden aber in einem Feld in der Haupttabelle angegeben. Das ist doch bei größeren Datenmengen eine richtige Fummelei wie man die neuen Index-Nummern in die Felder der Haupttabelle hineinbekommt. Kann mir da mal jemand eine Idee geben - vielleicht stehe ich da ja auf dem Schlauch. Irgendwie muss man dann doch beide CSV-Listen in Excel irgendwie miteinander verquicken, bevor man sie importiert.

    • jmbrenn_webde
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Dirk,

     

    praktisch würde ich es so machen:

    1. neue Datensätze der Haupttabelle in NINOX aus csv-Datei importieren

    2. diese csv-Datei mit den neuen Datensätzen der Haupttabelle in Excel öffnen

    3. neue Spalte mit entsprechenden Ninox-DS-IDs einfügen (nach Eingabe der ID für den ersten DS mit Autoausfüllen bis zum letzten DS)

    4. Öffnen der csv-Datei mit den Detaildatensätzen in Excel (mit ursprgl. Verknüpfungs-IDs zur Haupttabelle )

    5. Einfügen der neuen IDs für die Hauptabelle in die Detailtabelle über sverweis (vlookup) über Referenz auf die ursprünglichen IDs der Hauptabelle

    6. Abspeichern der Detailttabelle als csv und Import mit den neuen IDs der Haupttabelle 

    Viele Grüße aus Thüringen 

    Jörg

    • jmbrenn_webde
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Dirk,

     

    praktisch würde ich es so machen:

    1. neue Datensätze der Haupttabelle in NINOX aus csv-Datei importieren

    2. diese csv-Datei mit den neuen Datensätzen der Haupttabelle in Excel öffnen

    3. neue Spalte mit entsprechenden Ninox-DS-IDs einfügen (nach Eingabe der ID für den ersten DS mit Autoausfüllen bis zum letzten DS)

    4. Öffnen der csv-Datei mit den Detaildatensätzen in Excel (mit ursprgl. Verknüpfungs-IDs zur Haupttabelle )

    5. Einfügen der neuen IDs für die Hauptabelle in die Detailtabelle über sverweis (vlookup) über Referenz auf die ursprünglichen IDs der Hauptabelle

    6. Abspeichern der Detailttabelle als csv und Import mit den neuen IDs der Haupttabelle 

    Viele Grüße aus Thüringen 

    Jörg

    • jmbrenn_webde
    • vor 6 Jahren
    • Gemeldet - anzeigen

    ...alternativ in zwei Temporärtabellen in NINOX mit den neuen Datensätzen für Haupt- und Detailtabelle importieren und dann über Script importieren vG j

    • Dirk_Pulver_2020
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo, so ich hab's endlich gelöst, wie man Datenbanken über CSV exportieren und in andere importieren kann, ohne dass die Datensatzverknüpfungen verlorengehen. Damit lässt es sich realisieren, dass man eine produktive Datenbank in einer zweiten Datenbank weiterentwickelt und dann die Produktivdaten übernimmt.

    1. Jede Tabelle erhält ein Zahlenfeld 'ID'. Dieses Feld muss beim Anlegen eines neuen Datensatzes mittels der Funktion 'ID' := max((select Tabellenname).'ID') + 1 automatisch hochgezählt werden. Möglichst das Feld im Produktivbetrieb schreibschützen oder gar ausblenden! Bei erstmaligem Export der DB, muss das Feld 'ID' vor dem Export mittels Massendatenänderung mit dem berechneten Wert number(nr) gefüllt werden. Bei späteren Ex- und Imports der jetzt neu erzeugten DB, ist die Massendatenänderung nicht mehr nötig, da sich das Feld ja dann bereits hochgezählt hat.
    2. Jede Untertabelle und jede Tabelle mit einer N:1 Beziehung erhält ein f(x) Feld 'ID Übertabelle', dass den Wert des ID-Feldes der übergordneten Tabelle enthält. Bei mehreren N:1 Beziehungen benötigt man mehrere solcher Berechnungsfelder. Die Felder können im Produktivbetrieb ausgeblendet werden.
    3. Die Ziel-Datenbank muss den gleichen Aufbau aus Punkt 1+2 enthalten!
    4. Eine Tabellenansicht mit allen (!) Feldern erzeugen und diese dann exportieren.
    5. Beim Import zuerst die übergeordneten Tabellen importieren
    6. Beim Import wird in die Felder der Datensatz-Beziehungen zur übergeordneten Tabelle der exportierte Wert 'ID [Übertabelle]' importiert (Achtung - Importtyp normal - kein Schlüsselfeld!)

    Auf diese weise erzeugt man nun eine DB, die in Zukunft einfach so exportiert und importiert werden kann, sofern die o.g. ID-Felder mit ihren Funktionen vorhanden sind.

    Achtung: Die Funktion zum Hochzählen der ID birgt folgendes Risiko: Wenn der zuletzt angelegte Datensatz später wieder gelöscht wird, wir diese ID-Nummer bei Neuanlage wiederverwendet, da sie ja die höchste Zahl war. Das könnte evtl. zu Verknüpfungsproblemen kommen.

    Elegante Variante:

    Wenn es in den Tabellen jeweils bereits Felder mit eindeutigen (!) Werten gibt (Art.Nr., Kd.Nr. etc.), dann könnte man nach dem gleichen Schema bereits diese als ID-Felder verwenden. Nach Erzeugen der 'virtuellen' ID-Beziehungsfelder lassen sich so Datenbanken über einen erstmaligen Export (ohne vorige Massendatenänderung) zur Weiterentwicklung über CSV übertragen ohne die Satz-Beziehungen zu verlieren. Es wäre sogar denkbar nur bestimmte Datensätze über export- und Import zu übertragen, da die Beziehungen ja nicht mehr über das, sich selbst hochzählende, NR-Feld geknüpft werden.

    Ich hoffe ich konnte so einen sinnvollen Beitrag leisten und freue mich über Feedbacks.

Content aside

  • vor 6 JahrenZuletzt aktiv
  • 11Antworten
  • 4756Ansichten