Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Datenbank von extern befüllen

    roland.k

    • Fördermitglied
    • Beiträge: 96
    Datenbank von extern befüllen
    am: 22. September 2023, 15:50:30
    Hallo zusammen.

    ich habe ein größeres Projekt mit vielen Artikeln, welche sich auch ständig ändern. Die Idee ist nun das alles nicht mühselig von Hand in der Administration zu pflegen, sondern die Produkte/Artikel direkt von extern vis ODBC in die MySQL-Datenbank zu schreiben. Ich habe nun angefangen mit der Products-Tabelle, was soweit auch funktioniert. Nun wollte ich zu jedem Artikel in der Tabelle Pruducts_description für jede Sprache einen Datensatz erstellen und da komme ich irgendwie nicht weiter. Der Primary-Key ist zusammengesetzt aus den feldern "products-id und language_id". Schreibe ich nun via SQL einen Datensatz in die Tabelle meckert die Datenbank, dass der primary-key fehlt.: duplicate entry "0-0" for key primary.

    Vor der Fehlermeldung wird ein Datensatz in Products mit products_id = 2 angelegt und dann diese beiden SQL ausgeführt:
             INSERT INTO eshop_products_description (products_id, language_id, products_name, products_heading_title, products_description, products_short_description, products_meta_description, products_meta_keywords, products_url, products_order_description) VALUES (2, 1,"Test1","Heading1","","","Meta 1","MetaKey 1","","")

             INSERT INTO eshop_products_description (products_id, language_id, products_name, products_heading_title, products_description, products_short_description, products_meta_description, products_meta_keywords, products_url, products_order_description) VALUES (2, 2,"Test2","Heading2","","","Meta 2","MetaKey 2","","")

    Ich stehe gerade seit Stunden auf dem Schlauch. Obwohl ich da  eigentlich 0-0 übergeben wird, sondern 2-1 und 2-2. Muss ich den Primary-Key extra befüllen. Das macht doch normalerweise die Datenbank?

    Hat da wer eine Idee?

    Grüße
    Roland

    Linkback: https://www.modified-shop.org/forum/index.php?topic=43101.0

    Q

    • Fördermitglied
    • Beiträge: 1.502
    Re: Datenbank von extern befüllen
    Antwort #1 am: 22. September 2023, 16:44:52
    Nett wäre es gewesen die SQL Zeilen mit Code-Tags zu versehen..... tue mich da echt schwer das so zu lesen.

    *EDIT*
    Obwohl ich da  eigentlich 0-0 übergeben wird, sondern 2-1 und 2-2. Muss ich den Primary-Key extra befüllen. Das macht doch normalerweise die Datenbank?
    Ist nicht mein Tag. Den ersten Satz verstehe ich auch nicht.
    Der zweite Satz ist "quasi" richtig. Die Felder müssen befüllt werden, aber nicht extra, sondern zusammen mit dem Rest. Die Antwort auf die Frage ist grundsätzlich "NEIN". Woher soll denn die DB wissen welchen Wert der Key haben soll? Wenn du also in die Tabelle pruducts_description etwas einfügst ohne Werte für die products_id und/oder language_id, dann wird dort jeweils 0 eingetragen und spätestens bei dem zweiten Eintrag in dieser Form ist der Key nicht mehr unique und das DBMS meckert rum. Deswegen gibts den Key.

    roland.k

    • Fördermitglied
    • Beiträge: 96
    Re: Datenbank von extern befüllen
    Antwort #2 am: 24. September 2023, 10:01:52
    Hallo,

    hier nochmals der SQL:
    Code: SQL  [Auswählen]
    INSERT INTO eshop_products_description (products_id, language_id, products_name, products_heading_title, products_description, products_short_description, products_meta_description, products_meta_keywords, products_url, products_order_description) VALUES (2, 1,"Test1","Heading1","","","Meta 1","MetaKey 1","","")

    Die Datenbank meckert, dass der primary Key 0-0 enthält. Der Promary-Key ist zusammengesetzt aus products_id und language_id. Das sind die ersten beiden Werte nach VALUES. Hier wird 2 und 1 übergeben. Wenn ich den SQL ausführe, kommt beim nächsten Insert die Fehlermeldung.

    Grüße
    Roland

    Karl1

    • Experte
    • Beiträge: 1.806
    Re: Datenbank von extern befüllen
    Antwort #3 am: 24. September 2023, 12:34:57
    Hallo Roland!
    ...
    Muss ich den Primary-Key extra befüllen. Das macht doch normalerweise die Datenbank?
    ...
    Der Wert AUTO_INCREMENT wird automatisch befüllt, da hast du was verwechselt .

    Den Primary Key musst du sehr genau befüllen - für jedes Produkt darf z.B. nur eine deutsche Beschreibung existieren.
    Die Fehlermeldung "duplicate entry '0-0' for key primary" wird ausgegeben, wenn der eindeutige Schlüssel einer Tabelle doppelt vergeben wird.
    Du hast also versucht eine Beschreibung für ein Produkt mit der ID = 0 und der Sprache ID = 0 doppelt anzulegen.
    Es gibt kein Produkt mit product_id = 0 und keine Sprache mit language_id = 0.

    Gruß Karl

    roland.k

    • Fördermitglied
    • Beiträge: 96
    Re: Datenbank von extern befüllen
    Antwort #4 am: 24. September 2023, 12:59:26
    Hallo Karl,

    das Problem ist, dass in der Datenbank kein Datensatz mit 0-0 existiert und beim zweiten Insert-Befehl die Meldung erscheint. Setze ich z.B. den ersten Insert von oben ab, dann wird ein Datensatz erzeugt mit 0-0, obwohl im SQL 2-1 steht. Die restlichen Felder sind befüllt. Hat schon mal wer versucht via ODBC32 in der Tabelle einen Datensatz anzulegen? Ich vermute, dass das mit zusammensetzen Keys nicht funktioniert. Bei Tabellen mit eindeutigen Keys über ein Feld ist das kein Problem.

    Grüße Roland

    Karl1

    • Experte
    • Beiträge: 1.806
    Re: Datenbank von extern befüllen
    Antwort #5 am: 24. September 2023, 13:52:53
    Hallo Roland,
    ich verstehe nicht warum du immer die zusammengesetzten Keys erwähnst, da findet doch nur in der Zieldatenbank eine Prüfung statt.

    Du hast eine Datenbanktabelle "eshop_products_description" die du mit Werten befüllt hast.
    Diese Werte werden exportiert und in die Shopdatenbank (per Insert-Befehl) importiert - Tabelle im Shop heißt übrigens "products_description".
    Dein Shopdatenbankserver achtet beim Import darauf, dass die Kombination aus "products_id und language_id" nur einmalig existiert.
    Ist das der Fall wird der Datensatz angelegt, ansonsten die Fehlermeldung erzeugt.

    Gruß Karl

    Q

    • Fördermitglied
    • Beiträge: 1.502
    Re: Datenbank von extern befüllen
    Antwort #6 am: 24. September 2023, 15:22:12
    @Roland:
    Ich habe sowohl die Tabelle bei mir jetzt angelegt als auch Deine INSERTS ausgeführt. Keine Fehlermeldung.

    Die Tabelle eshop_products_description  ist eine von dir selbst erstellte Tabelle?
    Was bekommst Du für eine Ausgabe, wenn du folgenden Befehl eingibst?
    *EDIT*
    Code: SQL  [Auswählen]
    SHOW CREATE TABLE eshop_products_description;
    */ENDEDIT*
    Welches Programm benutzt Du um in der DB zu arbeiten?

    Er kann bei dir anscheinend die Werte in den beiden Spalten nicht eintragen. Wieso auch immer. Ist da noch eine andere Fehlermeldung davor?

    *NACHTRAG*:  Vielleicht hilft es schon die Tabelle einfach neu anzulegen, davor aber bitte noch die Ausgabe des o.g. Befehls posten!
    Code: SQL  [Auswählen]
    CREATE OR REPLACE  TABLE eshop_products_description
    (
        products_id                INT                     NOT NULL,
        language_id                INT                     NOT NULL,
        products_name              VARCHAR(255) DEFAULT '' NOT NULL,
        products_heading_title     VARCHAR(255) DEFAULT '' NOT NULL,
        products_description       TEXT                    NULL,
        products_short_description TEXT                    NULL,
        products_keywords          VARCHAR(255)            NULL,
        products_meta_title        TEXT                    NOT NULL,
        products_meta_description  TEXT                    NOT NULL,
        products_meta_keywords     TEXT                    NOT NULL,
        products_url               VARCHAR(255)            NULL,
        products_viewed            INT(5)       DEFAULT 0  NULL,
        products_order_description TEXT                    NULL,
        PRIMARY KEY (products_id, language_id)
    );

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.748
    • Geschlecht:
    Re: Datenbank von extern befüllen
    Antwort #7 am: 24. September 2023, 20:23:41
    Die Frage ist wie die benutzten Queries entstehen.
    Wenn sie dynamisch erzeugt werden muß man abfangen, daß es nie leere Werte ergibt, bzw. nie den Wert 0 für products_id  und language_id.
    Es scheint also zur Generierung der Queries eine Abfrage auf eine andere Tabelle zu geben (wie du ja auch indirekt schriebst (Stichwort ODBC)) und dort dann leere Ergebnisse die als 0 interpretiert werden, aus Gründen die man ohne Einsicht ins System nicht kennen kann.

    Gruß,
    noRiddle

    roland.k

    • Fördermitglied
    • Beiträge: 96
    Re: Datenbank von extern befüllen
    Antwort #8 am: 25. September 2023, 13:30:25
    Hallo zusammen,

    vielen Dank für Eure Informationen / Hilfe. Ich greife via Visual Foxpro über einen View (eshop_products_description) auf den ODBC-Treiber zu und das funktioniert tatsächlich problemlos bei Tabellen, welchen keinen zusammengesetzten Key haben. Der SQL von mir funktioniert in PHPMyadmin problemlos und da werden auch die Datensätze angelegt. Offensichtlich will der ODBC-Treiber das so nicht ausführen. Ich denke, dass das mit dem Puffer von datensätzen in Visual Foxpro zusammenhängt. Diese Entwicklungsumgebung ist auch schon etwas älter und ich werde das mal in einer anderen Umgebung versuchen oder gleich die Import-/Export-Funktion des Shop für die Neuanlage verwenden.

    Grüße
    Roland

    roland.k

    • Fördermitglied
    • Beiträge: 96
    Re: Datenbank von extern befüllen
    Antwort #9 am: 25. September 2023, 15:03:53
    Hallo zusammen,

    nachdem ich festgestellt habe, dass der SQL überall funktioniert, nur nicht auf Visual Foxpro raus, hab ich den fehler nun in den Einstellungen von Foxpro gesucht und bin tatsächlich fündig geworden in den Einstellungen des Views. Bei zusammengesetzten Keys muss man die Aktualisierung der zusammengesetzten Felder "manuell" aktivieren. Bei Tabellen mit Keys über einzelne Felder macht das System das automatisch beim Verknüpfen .... Sowas aber auch.

    Es hat sich somit soweit erledigt.

    Danke.
    2 Antworten
    2356 Aufrufe
    20. Dezember 2011, 17:14:44 von digiDirk
    3 Antworten
    2416 Aufrufe
    12. Februar 2015, 14:02:48 von WayneTsun
               
    anything