Einzelnen Beitrag anzeigen

Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Teildatenbank aus großer Datenbank erzeugen

  Alt 8. Dez 2009, 08:51
OMG,
ok damit ihr zufrieden seit.

Nur weil ich geschrieben habe, daß ich mich mit Datenbanken nicht so gut auskenne, soll das nicht heißen ich wäre ein Volldepp in dieser Hinsicht. Diese Aussage sollte heißen, daß ich mich in anderen Bereichen deutlich besser auskenne.

Die Datenbank ist in der 3. Normalform und es herschen nur noch 1:1 Beziehungen.
Sehr viele Tabellen war übertrieben. Es gibt 35 Tabellen für 35 verschiedene Sprachen mit vier Feldern.
Dazu noch 17 weitere Tabellen mit Zusatzinformationen. Es gibt keine Tabelle, die mehr als 10 Felder hat, die auch
sinnigerweise zusammengehören und nicht mehr normalisiert werden sollten.

Die Datenbank ist eine Übersetzungs-/ Sprachdatenbank mit zusätzlichen Projektdaten.

Es gibt eine zentrale Datenbank, in der viele Übersetzungen mit Zusatzdaten stehen.
Projektbearbeiter synchronisieren ihre Projekte mit dieser Datenbank und erhalten auotmatisch Übersetzungen und Daten in ihren Projekten.

Ziel: Projektbearbeiter sollen, wenn sie möchten eine lokale Projektbezogene Datenbank erstellen, in der sie nur die Daten aus ihrem Projekt haben.

Ja das ganze Vorhaben macht Sinn.
Alle nun zufrieden?


Was meine Frage eher war, wie kann man das am Besten performant realisieren?

Lösungsmöglichkeiten:
1.
Die von mir bereits realisierte Lösung, bei der ich TADOQuery.
Dabei gehe ich jede Tabelle durch.
Hole alle Daten aus aleln Tabellen, sichere die Daten in Datenhalter-Klassen.
Und schreibe diese Daten mittels einer "INSERT INTO..." Query wieder in die andere Dtaenbank.

2. alzaimer´s Lösung - vielen Dank dafür, da du der Einzige warst, der sich überhaupt mit der Fragestellung beschäftigt hat.

Mittels TADOQuery alle Daten aller Felder aus der Datenbank holen.
Und mittels einer weiteren TADOQuery(TDataSet) die Daten in die zweite Datenbank schreiben.
Das schöne an dieser Lösung, man muss sich nicht mit den Feldern auskennen.
Es läuft für jede Datenbank.
(Genau solch eine Lösung habe ich gesucht. Die Perormance teste ich noch)

3.
Mittels - SELECT INTO ..IN
Delphi-Quellcode:
const

  SQL_Mask = 'SELECT %s INTO [%s] IN "%s" %s FROM %s WHERE ID = %s';

  // | | | | |

  // fields | | | |

  // dest table | | |

  // dest database | |

  // database format |

  // source dataset

...
Man holt mittels TADOConnection alle Tabellen. Itteriert darüber.
Per TADOConnection werden die Fields der aktuellen Tabelle geholt und in einem Komma getrennten String zusammengehängt.
"dest database" ist der Dateipfad zur Tabelle. Database Format habe ich bei meinen Tests leer gelassen, könnte mir vorstellen, daß dies der Fehler ist. Ich weiss aber auch nicht, was ich da hinschreiben soll.

Leider krieg ich diese Lösung nicht hin. Es kommt die Fehlermeldung, daß mindestens ein Parameter der notwendig ist fehlen würde.

4.
Eventuell mit TADODataSet und der Funktion Clone.
Noch weiss ich nicht, ob das überhaupt möglich wäre.



Off Topic:
"Hallo, könne sie mir sagen wo ich Äpfel kaufen kann?"
"Äpfel? Um diese Jahreszeit?"
"Ich glaube er will eher Birnen kaufen."
"Kommt drauf an was er machen will, wenn er einen Schanps brauen will, könnte beides gemeint sein."
"Ich denk er will eher einen Kuchen backen, da wären Kirschen viel netter."
"Da könnten sie Recht haben."
"Wie kann man nur eine Apfelkuchen backen wollen? Leute gibts. das macht doch in dieser Jahreszeit keinen Sinn."
"...aber, ich wollte doch nur wissen, wo es Äpfel zu kaufen gibt..."
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat