Zeos zum bearbeiten einer JET und einer SQLite - Datenbank

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Zeos zum bearbeiten einer JET und einer SQLite - Datenbank

Beitrag von mschnell »

Hi Datenbank Experten.

Ich muss eine alte "Jet-Engine" (also "Microsoft Access" flatfile Typ") Datenbank in eine SQLite Datenbank überführen. Bei der Umstellung müssen auch die Inhalte teilweise konvertiert werden.

Ich habe eine (volle) Jet-Engine-Datenbank und eine korrekt eingerichtete (leere oder mit Testdaten bestückte) SQLight-Datenbank.

Vor einigen Jahren wurde hier diskutiert, wie man mit ZEOS über ADO auf Jet-Engine - Datenbanken zugreifen kann. Das sollte also möglich

Ich hoffe, dass Zeos kein Problem damit hat, gleichzeitig eine ADO und eine SQLite-Verbindung aufzumachen.

Ich habe also zunächst mal einen Tesf mit SQLite gemacht.

Was ich bereits geschafft habe:
- die Namen der Tabellen und Felder der SQLight-Datenbank ausgeben mit

Code: Alles auswählen

  Memo1.Clear;
  for i := 0 to slt.Count-1 do begin
    Memo1.Lines.Add(slt[i]);
    ZConnection1.GetColumnNames(slt[i], '', slc);
    for j := 0 to slc.Count-1 do begin
      Memo1.Lines.Add(' - ' + slc[j]);
    end;
  end;
 



- einige Numerische Felder in einem DBGrid auszugeben.

Wenn ich aber ein Textfeld im DBGrid ausgeben will sehe ich nur (MEMO).
So ist die erste Frage, wie ich solche Felder anzeigen kann.

Bitte entschuldigt, wenn das eine dumme Frage ist. Ich habe bisher noch nicht viel mit Datenbanken gemacht.

Gruß und Dank,
-Michael

Benutzeravatar
theo
Beiträge: 10461
Registriert: Mo 11. Sep 2006, 19:01

Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

Beitrag von theo »

Bin auch kein DB Spezialist, aber mit einem separaten TDBMemo (ausserhalb des Grid) müsste es eig. gehen.
Sonst auch hier http://wiki.lazarus.freepascal.org/Grid ... or_dbgrids
http://forum.lazarus.freepascal.org/ind ... ic=14082.0

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

Beitrag von mschnell »

Ich verstehe bisher noch nicht, wie ich "manuell" (also ohne ein DBGrid) überhaupt einen Feld-Inhalt aus der Datenbank bekomme und schon gar nicht für ein "MEMO" - Feld, das DBGrid noch nicht einmal anzeigen kann.

-Michael

wp_xyz
Beiträge: 4864
Registriert: Fr 8. Apr 2011, 09:01

Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

Beitrag von wp_xyz »

Kannst du nicht ein DBMemo aufs Formular setzen, dessen Datasource mit derselben Datasource verbinden, die das DBGrid versorgt, und Datafield des DBMemo auf dasjenige Dataset-Feld setzen, das das Memo enthält?

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

Beitrag von mschnell »

Das klappt !!!!

Ich habe allerdings keine Ahnung warum.

Ich habe einfach das DBMemo platziert, es mit der Datasource verbunden und den Feldnamen eingetragen.

Woher jetzt das DBMemo weis, wo in dem DBGrid der Cursor steht, ist mir schleierhaft.

Anscheinen ist das Datenbank-Zeug Wunder-basiert !

Vielen Dank. Ich werde jetzt mal schauen, wie man Felder programmatisch lesen und schreiben kann. Insbesondere auch BLOB-Felder.

Irgendein Kommentar zur gleichzeitigen Verbindung zu Jet und SQLite ?

Nochmals Danke,
-Michael

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2634
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

Beitrag von m.fuchs »

mschnell hat geschrieben:Ich habe allerdings keine Ahnung warum.
Ich habe einfach das DBMemo platziert, es mit der Datasource verbunden und den Feldnamen eingetragen.
Woher jetzt das DBMemo weis, wo in dem DBGrid der Cursor steht, ist mir schleierhaft.

Na weil beide die gleiche DataSource benutzen.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
theo
Beiträge: 10461
Registriert: Mo 11. Sep 2006, 19:01

Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

Beitrag von theo »

Falls es sich um eine einmalige Sache handelt, würde ich die Tabellen der Access DB nach CSV speichern und mit SQLite importieren:
https://www.sqlite.org/cvstrac/wiki?p=ImportingFiles

wp_xyz
Beiträge: 4864
Registriert: Fr 8. Apr 2011, 09:01

Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

Beitrag von wp_xyz »

mschnell hat geschrieben:Woher jetzt das DBMemo weis, wo in dem DBGrid der Cursor steht, ist mir schleierhaft.

Weil die im DBGrid hervorgehobene Zelle zum aktiven Record ("Cursor") des Dataset gehört. Und DB-Controls wie DBMemo, DBEdit, DBLabel etc, entnehmen ihre Daten jeweils aus dem aktiven Record. Wenn das Grid (oder auch der DBNavigator) durch einen Dataset scrollt, ändert sich der aktive Record des Dataset und die verbundenen DB-Controls zeigen das entsprechende Feld an.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

Beitrag von mschnell »

OK. I see. Anscheinend veranlasst der Wechsel des aktiven Record dabei sogar ein Event, das im DBMermo zu einer neuen Darstellung führt.

Wenn ich jetzt Daten programmatisch bearbeiten will, ist es dann sinnvoll die visuellen DBGrid etc Komponenten zu benutzen und die Daten programmatisch zwischen diesen zu transportieren, oder mit (welchen ?) anderen Methoden "unsichtbar" die Datenbank-Felder zu lesen und zu schreiben ?

-Michael

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6197
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: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

Beitrag von af0815 »

mschnell hat geschrieben:OK. I see. Anscheinend veranlasst der Wechsel des aktiven Record dabei sogar ein Event, das im DBMermo zu einer neuen Darstellung führt.


Jeder der Datenaffinen Komponenten hat jede menge Events. Man kann auch so in die Darstellung bzw. Abspeicherung eingreifen. Es gehen auch berechnete Felder, Felder die in anderen Tabellen nachsehen (Lookup) und und.

Der größte Unterschied ist, das Access eine Desktopdatenbank ist und SQLite eine Serverbasierende. Da gibt es doch einige erhebliche Unterschiede im Denkaansatz. Bei der Desktop denkt man Datensatzbasierend, wenn man einen (SQL)Server hat, dann Mengenbasierend. Allein das Select-Statement kann wundersame Sachen, das geht mit Desktop nicht.

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

charlytango
Beiträge: 842
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: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

Beitrag von charlytango »

fang doch mal damit an, das hilft fürs erste schon mal ein Stück weiter um sich in Datenbankzugriff einzuarbeiten
http://wiki.freepascal.org/Lazarus_Database_Tutorial/de

Ich würde versuchen so schnell wie möglich von der Access DB weg zu kommen, evtl ist die Idee von theo zielführend.
Daten könntest du vielleicht dann in einer Zwischen-DB (Mysql, SQLite et al.) anpassen.
Ein gleichzeitiger Zugriff auf Access und eine SQLite ist kein Problem (mit oder ohne ZEOS) -- dann verwaltest du einfach zwei Connections.

Für Access-DB alten Zuschnitts (mdf) gibt es etliche Gratistools im Netz die die DB umwandeln.
(google: Access To SQL). Wenn es ein professionelles Projekt ist, gibt es auch gute Tools um kleines Geld um die 300 €.
Da zahlt es sich kaum aus sich mit einer Migration zu ärgern wenns mit den Tools verlässlich in 10 Minuten samt Einarbeitung geht.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

Beitrag von mschnell »

Leider ist der Inhalt der SQLite - Datenbank nicht identisch mit der alten Access-Datenbank. Den Konverter muss ich also selber schreiben.

-Michael

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6197
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: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

Beitrag von af0815 »

mschnell hat geschrieben:Leider ist der Inhalt der SQLite - Datenbank nicht identisch mit der alten Access-Datenbank. Den Konverter muss ich also selber schreiben.

-Michael


Je nach Komplexität:

*) Access denormalisieren und in die SQL-DB bringen und von dort dann weiterarbeiten.
oder
*) Access DB als SQL Scripten (Inserts) auch denormalisiert. Hat den Vorteil, man kann das dann beliebig oft abspielen.

Edit: EIn Beispiel hätte ich ev. allerdings CSV nach SQL, mittels lcsvutils aus den lazutils.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

Beitrag von mschnell »

af0815 hat geschrieben:*) Access denormalisieren und in die SQL-DB bringen und von dort dann weiterarbeiten.
oder
*) Access DB als SQL Scripten (Inserts) auch denormalisiert. Hat den Vorteil, man kann das dann beliebig oft abspielen.


Verstehe ich nicht.

Abgesehen davon, dass ich nicht weiß, was denormalisieren ist, verstehe ich nicht, warum es schlecht ist, die Access-Datenbank einfach via ADO und Zeos im lazarus Programm zu öffenen und satzweise zu lesen.

-Michael
Zuletzt geändert von mschnell am Mi 29. Mär 2017, 15:28, insgesamt 1-mal geändert.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

Beitrag von mschnell »

af0815 hat geschrieben:Der größte Unterschied ist, das Access eine Desktopdatenbank ist und SQLite eine Serverbasierende.


Via ADO ist die Access-Datenbank doch auch "serverbasiert" (also in ZEOS zu öffnen mit SQL "normal" zugreifbar).

Eine SQLite-Datenbank ist eine einzige Datei und wird von entsprechenden Programmen "einfach so" (natürlich mit Hilfe der SQLite dll) geöffnet.

-Michael

Antworten