2 SQlite-Datenbanken verbinden

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Bessu
Beiträge: 3
Registriert: So 14. Jan 2024, 22:54

2 SQlite-Datenbanken verbinden

Beitrag von Bessu »

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

charlytango
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

Beitrag von charlytango »

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?
Bessu hat geschrieben:
Mo 15. Jan 2024, 13:45
ch stehe seit einigen Tage vor dem Problem, dass ich versuche 2 SQlite-Datenbanken über ZEOS
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
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.

Ich934
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

Beitrag von Ich934 »

Bei SQLite kann man auch eine zweite Datenbank an die erste anhänge...

Code: Alles auswählen

ATTACH DATABASE "/pfad/zur/zweitendb.sqlite3" AS Alias;
Die zweite Datenbank hängt dann an der ersten und kann direkt abgefragt werden...
Tipp für PostgreSQL: www.pg-forum.de

Bessu
Beiträge: 3
Registriert: So 14. Jan 2024, 22:54

Re: 2 SQlite-Datenbanken verbinden

Beitrag von Bessu »

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

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6216
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

Beitrag von af0815 »

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).

charlytango
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

Beitrag von charlytango »

af0815 hat geschrieben:
Di 16. Jan 2024, 07:05
Die zwei Excel Dateien in eine DB zu konvertieren ist immer die bessere Idee.
Dem stimme ich vorbehaltlos zu.
Bessu hat geschrieben:
Mo 15. Jan 2024, 22:17
Da sich aber immer nur Daten in einer dieser Dateien ändern wollte ich einfach auch mit getrennten Datenbanken arbeiten.
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?
Bessu hat geschrieben:
Mo 15. Jan 2024, 22:17
das ich die Daten in einem Grid darstellen kann
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).

MmVisual
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

Beitrag von MmVisual »

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.
EleLa - Elektronik Lagerverwaltung - www.elela.de

charlytango
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

Beitrag von charlytango »

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

MmVisual
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

Beitrag von MmVisual »

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

Bessu
Beiträge: 3
Registriert: So 14. Jan 2024, 22:54

Re: 2 SQlite-Datenbanken verbinden

Beitrag von Bessu »

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

Antworten