Seid gegrüßt!
Normalerweise bin ich nicht der Typ der neue Themen erstellt, aber ich bin einfach noch nicht auf eine passende Antwort zu meinem Problem gestoßen. Deshalb hoffe ich, dass ihr mir ein wenig behilflich sein könnt!
Vor einer Woche habe ich eine Datenbank samt Tabelle zur Katalogisierung meiner Schallplatten angelegt. Um die Erläuterung meines eigentlichen Problems gleich einfacher gestalten zu können, hier mein ungefährer Aufbau der Spalten: ID(Primärschlüssel) - Artist - Titel - Genre - Albumname usw... Das Einpflegen neuer Datensätze funktioniert reibungslos.
Die Datenbank ist online in einer Dropbox abgespeichert. Und da beginnt das Problem. Gleichzeitig können nun also 4 Leute auf diese Datei zugreifen und unabhängig voneinander bearbeiten. Damit es nicht zu Überschreibungen bzw. Auslöschungen bei gleichzeitiger Nutzung kommt, habe ich jeden angewiesen seine geänderte Datei mit Namenskürzel sowie Datum zu benennen.
Da es sich bei den geänderten Dateien quasi nur um Kopien handelt, ist der Tabellenaufbau komplett identisch. Es sind lediglich entweder neue Datensätze hinzugekommen oder es wurden bereits bestehende Datensätze verändert.
Das Szenario welches im Moment vorliegt sieht folgendermaßen aus. Person 1 hat 150 Datensätze eingepflegt und die Datenbank beispielsweise als 08.04P1.odb gespeichert. Person 2 die Datensätze 151-160 eingepflegt ( 09.04P2.odb ). Person 3 hat in den Datensätzen 1-150 Änderungen bei Genre usw. vorgenommen ( 09.04P3.odb ).
Gibt es eine einfache Möglichkeit aus diesen 3 Versionen meiner Tabelle eine vereinte und vorallem aktualisierte Version zu erstellen, ohne das Dopplungen auftreten???
Oder hat irgendjemand eine andere Idee wie man dieses Problem lösen kann?!
Ich bin für jeden Geistesblitz dankbar!
Mit freundlichem Gruß
D.
Vereinen+Aktualisieren - mehrerer Datenbanken/Tabellen
Moderator: Moderatoren
-
- Beiträge: 3
- Registriert: Do, 10.04.2014 12:44
Re: Vereinen+Aktualisieren - mehrerer Datenbanken/Tabellen
Hallo D.,
die folgenden Hinweise könnten vielleicht behilflich sein.
Zuerst die geänderten Tabellen der neuren Versionen stumpf als neue Tabellen mit anderem Namen ("Tabelle_aender" bzw. "Tabelle_erweiter") in die älteste Version der DB einfügen.
Über Extras → SQL folgende Befehle in der ältesten Datenbank eingeben:
Damit werden die geänderten "Genre"-Einträge auf jeden Fall den entsprechenden Datensätzen hinzugefügt. Das Ganze ist ein Update für bestehende Datensätze.
Damit werden alle Datensätze, deren Primärschlüssel > 150 ist, der bestehenden Stammtabelle hinzugefügt.
Wenn Du als Primärschlüssel nicht eine aufsteigende Integer-Zahl gewählt hast, dann gibt es allerdings das Problem, dass zuerst einmal gesucht werden muss, welche Datensätze denn nun neu sind.
Äußerst problematisch wird es dann, wenn mehrere Leute gleichzeitig neue Datensätze hinzufügen. Dann erhältst Du nämlich Datensätze mit gleicher Primärschlüsselnummer und bei einem Update verschwindet dann gegebenenfalls ein früherer Eintrag.
Gruß
Robert
die folgenden Hinweise könnten vielleicht behilflich sein.
Zuerst die geänderten Tabellen der neuren Versionen stumpf als neue Tabellen mit anderem Namen ("Tabelle_aender" bzw. "Tabelle_erweiter") in die älteste Version der DB einfügen.
Über Extras → SQL folgende Befehle in der ältesten Datenbank eingeben:
Code: Alles auswählen
UPDATE "Tabelle" AS "a" SET "Genre" = (SELECT "Genre" FROM "Tabelle_aender" WHERE "ID" = "a"."ID")
Code: Alles auswählen
INSERT INTO "Tabelle" SELECT * FROM "Tabelle_erweiter" WHERE "ID" > 150
Wenn Du als Primärschlüssel nicht eine aufsteigende Integer-Zahl gewählt hast, dann gibt es allerdings das Problem, dass zuerst einmal gesucht werden muss, welche Datensätze denn nun neu sind.
Äußerst problematisch wird es dann, wenn mehrere Leute gleichzeitig neue Datensätze hinzufügen. Dann erhältst Du nämlich Datensätze mit gleicher Primärschlüsselnummer und bei einem Update verschwindet dann gegebenenfalls ein früherer Eintrag.
Gruß
Robert
-
- Beiträge: 3
- Registriert: Do, 10.04.2014 12:44
Re: Vereinen+Aktualisieren - mehrerer Datenbanken/Tabellen
Hallo Robert,
danke für die Erklärungen, es funktioniert bestens! Zu deinen Anmerkungen. Als Primärschlüssel habe ich eine fortlaufende Integer Zahl (ID) gewählt.
Zu dem Problem mit gleichen ID's hat mich ein Freund auf den Befehl "auto increment" hingewiesen. Kann ich mit diesem Befehl den Datensätzen aus den einzelnen Tabellen beim Einfügen in die zusammengefasste Tabelle automatisch neue fortlaufende ID's zuweisen? Sodass quasi alle Spalten abgesehen von der ID übernommen werden.
Ich hoffe du kannst mir folgen.
Frohe Ostern und beste Grüße
D.
danke für die Erklärungen, es funktioniert bestens! Zu deinen Anmerkungen. Als Primärschlüssel habe ich eine fortlaufende Integer Zahl (ID) gewählt.
Zu dem Problem mit gleichen ID's hat mich ein Freund auf den Befehl "auto increment" hingewiesen. Kann ich mit diesem Befehl den Datensätzen aus den einzelnen Tabellen beim Einfügen in die zusammengefasste Tabelle automatisch neue fortlaufende ID's zuweisen? Sodass quasi alle Spalten abgesehen von der ID übernommen werden.
Ich hoffe du kannst mir folgen.
Frohe Ostern und beste Grüße
D.
-
- Beiträge: 3
- Registriert: Do, 10.04.2014 12:44
Re: Vereinen+Aktualisieren - mehrerer Datenbanken/Tabellen
Hallo nochmal.
Mir ist gerade eben aufgefallen, dass es doch nicht so klappt wie ich es mir vorgestellt habe. Kann ich den untenstehenden Code noch erweitern, damit leere Felder nicht übertragen werden? Beim Aktualisieren werden so teilweise vorhandene Datensätze mit leeren Feldern überschrieben...
Frohe Ostern!
D.
Mir ist gerade eben aufgefallen, dass es doch nicht so klappt wie ich es mir vorgestellt habe. Kann ich den untenstehenden Code noch erweitern, damit leere Felder nicht übertragen werden? Beim Aktualisieren werden so teilweise vorhandene Datensätze mit leeren Feldern überschrieben...
RobertG hat geschrieben:Code: Alles auswählen
UPDATE "Tabelle" AS "a" SET "Genre" = (SELECT "Genre" FROM "Tabelle_aender" WHERE "ID" = "a"."ID")
Frohe Ostern!
D.
Re: Vereinen+Aktualisieren - mehrerer Datenbanken/Tabellen
Hallo D.
So wird nur dort etwas eingetragen, wo ein leeres Feld in "Genre" steht.
Zu: ID und AutoWert
Du kannst auch den ID-Wert der Tabelle, zu der neue Felder hinzugefügt wurden, aus der Insert-Anweisung raus lassen, wenn Du den AutoWert benutzt.
Das geht nach dem folgenden Prinzip:
Dadurch wird der Autowert von "Tabelle" einfach weiter hoch geschrieben.
Gruß
Robert
Das bedeutet dann aber auch, dass vermutlich an beiden Tabellen weiter gearbeitet wurde. Wie sollen sonst in der neuen Version leere Felder sein, in der alten aber schon Inhalt. Wie gehst Du dann damit um, wenn irgendein Eintrag nicht korrekt war und in der neuen Tabelle durch ein leeres Feld ersetzt wird?DubbingIsAMust hat geschrieben: Mir ist gerade eben aufgefallen, dass es doch nicht so klappt wie ich es mir vorgestellt habe. Kann ich den unten stehenden Code noch erweitern, damit leere Felder nicht übertragen werden? Beim Aktualisieren werden so teilweise vorhandene Datensätze mit leeren Feldern überschrieben...
Code: Alles auswählen
UPDATE "Tabelle" AS "a" SET "Genre" = (SELECT "Genre" FROM "Tabelle_aender" WHERE "ID" = "a"."ID") WHERE "Genre" IS NULL
Zu: ID und AutoWert
Du kannst auch den ID-Wert der Tabelle, zu der neue Felder hinzugefügt wurden, aus der Insert-Anweisung raus lassen, wenn Du den AutoWert benutzt.
Das geht nach dem folgenden Prinzip:
Code: Alles auswählen
INSERT INTO "Tabelle" ("Vorname","Nachname") SELECT "Vorname","Nachname" FROM "Tabelle_erweiter" WHERE "ID" > 150;
Gruß
Robert