2 SQlite-Datenbanken verbinden
2 SQlite-Datenbanken verbinden
Hallo Gemeinde,
ich stehe seit einigen Tage vor dem Problem, dass ich versuche 2 SQlite-Datenbanken über ZEOS (Zeos habe ich bis jetzt immer bei meinen Datenbankverwaltungen verwendet) zu verbinden was mir nicht gelingt.
Ich erhalte aus einer Datenbank (Internet) über Downloads 2 Exporte im .xlsx-Format, die ich in das SQlite-3-Format convertiere. Beide Tabellen kann ich einzeln problemlos mit Zeos verwenden (öffnen, schliessen, bearbeiten usw.). Ich benötige aber für eine Ausgabe in Formularen Daten aus beiden Datenbanken. Gemeinsame Felder in den Tabellen (ID) sind vorhanden.
Wie kann man so eine Verbindung zwischen den beiden Datenbanken herstellen? Vielleicht kann mir jemand eine Anleitung bzw. einen Lösungsweg zeigen.
Besten Dank!
Gruß Bessu
ich stehe seit einigen Tage vor dem Problem, dass ich versuche 2 SQlite-Datenbanken über ZEOS (Zeos habe ich bis jetzt immer bei meinen Datenbankverwaltungen verwendet) zu verbinden was mir nicht gelingt.
Ich erhalte aus einer Datenbank (Internet) über Downloads 2 Exporte im .xlsx-Format, die ich in das SQlite-3-Format convertiere. Beide Tabellen kann ich einzeln problemlos mit Zeos verwenden (öffnen, schliessen, bearbeiten usw.). Ich benötige aber für eine Ausgabe in Formularen Daten aus beiden Datenbanken. Gemeinsame Felder in den Tabellen (ID) sind vorhanden.
Wie kann man so eine Verbindung zwischen den beiden Datenbanken herstellen? Vielleicht kann mir jemand eine Anleitung bzw. einen Lösungsweg zeigen.
Besten Dank!
Gruß Bessu
-
- Beiträge: 845
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
Re: 2 SQlite-Datenbanken verbinden
Um hier eine valide Antwort zu geben fehlen mir einige wichtige Informationen.
Außerdem vermute ich da etwas Konfusion in den Begrifflichkeiten.
Du bekommst also zwei Dateien die du in ein SQLite Format konvertierst.
Heißt das, du importierst die Daten aus den Dateien in je eine SQLite Tabelle?
BeideTabellen liegen in einer Datenbank?
Abfragen aus zwei Tabellen (auch in anderen Datenbanken) kann man üblicherweise so machen:
Sofern eine Beziehung zwischen den beiden Tabellen herstellbar ist (z.B. über ein koresspondierendes Schlüsselfeld (zb eine ID)
Dieses Vorgehen bezieht sich auf DBMS wie MySQL, MariaDB, MSSQL, Oracle und Konsorten. Ob man das auch mit einer Desktopdatenbank wie SQLite machen kann hab ich noch nicht probiert.
Solltest du tatsächlich zwei SQLite Datenbanken "verbinden" wollen und die vorhin erwähnte Strategie greift nicht, ist Handarbeit angesagt. Also zwei komplette Sets von Zugriffskomponenten die du dann nach deinen Anforderungen ausliest und anzeigst.
Außerdem vermute ich da etwas Konfusion in den Begrifflichkeiten.
Du bekommst also zwei Dateien die du in ein SQLite Format konvertierst.
Heißt das, du importierst die Daten aus den Dateien in je eine SQLite Tabelle?
BeideTabellen liegen in einer Datenbank?
Du erwähnst zwei SQLite Datenbanken ??? Meinst du wirklich zwei Datenbanken (die Entsprechung auf der Festplatte wären zwei SQLite Datendateien) oder zwei Tabellen in einer SQLite-Datenbank?
Abfragen aus zwei Tabellen (auch in anderen Datenbanken) kann man üblicherweise so machen:
Code: Alles auswählen
SELECT ......
FROM db1.Tabelle1, db2.Tabelle1
Dieses Vorgehen bezieht sich auf DBMS wie MySQL, MariaDB, MSSQL, Oracle und Konsorten. Ob man das auch mit einer Desktopdatenbank wie SQLite machen kann hab ich noch nicht probiert.
Solltest du tatsächlich zwei SQLite Datenbanken "verbinden" wollen und die vorhin erwähnte Strategie greift nicht, ist Handarbeit angesagt. Also zwei komplette Sets von Zugriffskomponenten die du dann nach deinen Anforderungen ausliest und anzeigst.
-
- Lazarusforum e. V.
- Beiträge: 317
- Registriert: So 5. Mai 2019, 16:52
- OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
- CPU-Target: x86_64, i386
- Wohnort: Bayreuth
Re: 2 SQlite-Datenbanken verbinden
Bei SQLite kann man auch eine zweite Datenbank an die erste anhänge...
Die zweite Datenbank hängt dann an der ersten und kann direkt abgefragt werden...
Code: Alles auswählen
ATTACH DATABASE "/pfad/zur/zweitendb.sqlite3" AS Alias;
Tipp für PostgreSQL: www.pg-forum.de
Re: 2 SQlite-Datenbanken verbinden
Danke für die schnellen Antworten.
@charlytango, @ich934
Zur besseren Erklärung:
Ich erhalte 2 Exceldateien die ich in auch in 2 SQlite-Datenbanken umwandle, nicht in 2 Tabellen in einer Datenbank.
Mit mehreren Tabellen in einer Datenbank habe ich schon oft gearbeitet und keine Probleme damit. Mein vielleicht (auch falscher) Gedanke liegt eventuell darin, dass ich eine Möglichkeit (bzw. Komponente) suche, die Tabellen aus den 2 Datenbanken so zu verknüpfen das ich die Daten in einem Grid darstellen kann. Eure Vorschläge werde ich kurzfristig ausprobieren.
PS:
Ich hätte natürlich die Möglichkeit, auch beide erhaltenen Excel-Dateien in getrennten Datenblättern unterzubringen und dann als eine SQLite-Datenbank mit 2 Tabellen zu konvertieren. Da sich aber immer nur Daten in einer dieser Dateien ändern wollte ich einfach auch mit getrennten Datenbanken arbeiten. Und nebenbei gesagt: Es nervt mich, wenn ich ein Problem anfasse und es nicht lösen kann!
Beste Grüße
Bessu
@charlytango, @ich934
Zur besseren Erklärung:
Ich erhalte 2 Exceldateien die ich in auch in 2 SQlite-Datenbanken umwandle, nicht in 2 Tabellen in einer Datenbank.
Mit mehreren Tabellen in einer Datenbank habe ich schon oft gearbeitet und keine Probleme damit. Mein vielleicht (auch falscher) Gedanke liegt eventuell darin, dass ich eine Möglichkeit (bzw. Komponente) suche, die Tabellen aus den 2 Datenbanken so zu verknüpfen das ich die Daten in einem Grid darstellen kann. Eure Vorschläge werde ich kurzfristig ausprobieren.
PS:
Ich hätte natürlich die Möglichkeit, auch beide erhaltenen Excel-Dateien in getrennten Datenblättern unterzubringen und dann als eine SQLite-Datenbank mit 2 Tabellen zu konvertieren. Da sich aber immer nur Daten in einer dieser Dateien ändern wollte ich einfach auch mit getrennten Datenbanken arbeiten. Und nebenbei gesagt: Es nervt mich, wenn ich ein Problem anfasse und es nicht lösen kann!
Beste Grüße
Bessu
- af0815
- Lazarusforum e. V.
- Beiträge: 6217
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: 2 SQlite-Datenbanken verbinden
Die zwei Excel Dateien in eine DB zu konvertieren ist immer die bessere Idee. Noch dazu würde ich zuerst Importtabellen machen, die ich dann gezielt in die DB einarbeite. Damit kann man gezielter Importieren und doubletten etc. besser vermeiden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 845
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
Re: 2 SQlite-Datenbanken verbinden
Dem stimme ich vorbehaltlos zu.
Kann es sein dass du einfach nur ein Verständnisproblem hast? SQL-Datenbanken sind darauf ausgelegt dass viele Änderungen passieren. Genau dafür sind sie unter anderem da.
Ich wusste bisher nicht dass man zwei SQLite DBs auch wirklich verbinden und ansprechen kann.
Trotzdem sehe ich in deinem Fall dein Notwendigkeit nicht.
Möglicherweise liegt dein Knoten auch in der Art und Weise wie du die Excel-Datei importierst?
Hier musst du dich noch entscheiden welchen Grid du verwendest. Einen TStringGrid, in den du manuell Daten aus der DB schreibst oder einen TDBGrid der direkt über ein TDataset an der Datenbank hängt.
Für letzteren brauchst du ein einzelnes SQL Statement das dir der Grid dann darstellt.
Das kann auch ein recht komplexes sein in dem du zwei Tabellen verbindest (der Fachausdruck dafür ist JOIN).
-
- Beiträge: 1470
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
- CPU-Target: 32/64Bit
Re: 2 SQlite-Datenbanken verbinden
Es gibt auch noch eine dritte Möglichkeit:
Man hat die eine SQLite Datenbank Datei und die zweite SQLite Datenbank Datei.
Nun macht man für die kombinierte Datenbank Abfrage eine temporäre dritte Datenbank Datei auf, das kann man als Memory-DB machen indem der Datenbank Name ":memory:" ist.
Importiert die Tabelle von der einen und dann von der zweiten SQLite Datenbank Datei in diese eine Memory DB und da kann man seine Abfragen erledigen.
Vorteil: Wenn man die Memory DB wieder schließt sind alle Daten wieder weg und man benötigt keine Datei auf der Festplatte.
Nachteil: Daten bearbeiten/schreiben geschieht nur im RAM und nicht in den original Datenbank Dateien.
Wenn die eine XSLX Datei ohnehin immer nur temporär geladen wird, könnte man diese direkt in die Memory DB laden und erst gar nicht als Datei speichern.
Man hat die eine SQLite Datenbank Datei und die zweite SQLite Datenbank Datei.
Nun macht man für die kombinierte Datenbank Abfrage eine temporäre dritte Datenbank Datei auf, das kann man als Memory-DB machen indem der Datenbank Name ":memory:" ist.
Importiert die Tabelle von der einen und dann von der zweiten SQLite Datenbank Datei in diese eine Memory DB und da kann man seine Abfragen erledigen.
Vorteil: Wenn man die Memory DB wieder schließt sind alle Daten wieder weg und man benötigt keine Datei auf der Festplatte.
Nachteil: Daten bearbeiten/schreiben geschieht nur im RAM und nicht in den original Datenbank Dateien.
Wenn die eine XSLX Datei ohnehin immer nur temporär geladen wird, könnte man diese direkt in die Memory DB laden und erst gar nicht als Datei speichern.
EleLa - Elektronik Lagerverwaltung - www.elela.de
-
- Beiträge: 845
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
Re: 2 SQlite-Datenbanken verbinden
war erstaunt zu lesen dass das mit einer SQLite InMemory DB klappt.
Wie man das einem SQLite Connector (SQLDB oder ZEOS) klar macht entzieht sich meiner Kenntnis.
Sicher eine elegante Variante, aber IMHO immer noch mit Kanonen auf Spatzen geschossen.
Ich würde stinknormal die beiden Excel files in zwei Tabellen importieren. In der Luxus-Version vielleicht über Importtabellen, wie von af0815 vorgeschlagen oder auch mit den Möglichkeiten des Auslesens mittels FPSpreadSheet
Wie man das einem SQLite Connector (SQLDB oder ZEOS) klar macht entzieht sich meiner Kenntnis.
Sicher eine elegante Variante, aber IMHO immer noch mit Kanonen auf Spatzen geschossen.
Ich würde stinknormal die beiden Excel files in zwei Tabellen importieren. In der Luxus-Version vielleicht über Importtabellen, wie von af0815 vorgeschlagen oder auch mit den Möglichkeiten des Auslesens mittels FPSpreadSheet
-
- Beiträge: 1470
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
- CPU-Target: 32/64Bit
Re: 2 SQlite-Datenbanken verbinden
Im SQLite Connector (zumindest ist es bei Zeos so) gibt man statt dem Dateiname einfach nur ":memory:" ein (ohne die " Zeichen)
EleLa - Elektronik Lagerverwaltung - www.elela.de
Re: 2 SQlite-Datenbanken verbinden
Besten Dank für eure zahlreichen Antworten.
Ich werde versuchen in den nächsten Tagen alles mal nachzuvollziehen
und euch dann über das Ergebnis informieren oder mich mit weiteren Fragen
melden.
Gruß
Bessu
Ich werde versuchen in den nächsten Tagen alles mal nachzuvollziehen
und euch dann über das Ergebnis informieren oder mich mit weiteren Fragen
melden.
Gruß
Bessu