Zeos zum bearbeiten einer JET und einer SQLite - Datenbank

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.

Zeos zum bearbeiten einer JET und einer SQLite - Datenbank

Beitragvon mschnell » 29. Mär 2017, 10:45 Zeos zum bearbeiten einer JET und einer SQLite - Datenbank

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
mschnell
 
Beiträge: 3144
Registriert: 11. Sep 2006, 09:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

Beitragvon theo » 29. Mär 2017, 10:58 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

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
theo
 
Beiträge: 7866
Registriert: 11. Sep 2006, 18:01

Beitragvon mschnell » 29. Mär 2017, 11:08 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

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
mschnell
 
Beiträge: 3144
Registriert: 11. Sep 2006, 09:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

Beitragvon wp_xyz » 29. Mär 2017, 11:15 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

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?
wp_xyz
 
Beiträge: 2117
Registriert: 8. Apr 2011, 08:01

Beitragvon mschnell » 29. Mär 2017, 11:33 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

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
mschnell
 
Beiträge: 3144
Registriert: 11. Sep 2006, 09:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

Beitragvon m.fuchs » 29. Mär 2017, 11:41 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

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
m.fuchs
 
Beiträge: 1609
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (L 1.6, FPC 3.0) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon theo » 29. Mär 2017, 11:41 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

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
theo
 
Beiträge: 7866
Registriert: 11. Sep 2006, 18:01

Beitragvon wp_xyz » 29. Mär 2017, 11:49 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

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.
wp_xyz
 
Beiträge: 2117
Registriert: 8. Apr 2011, 08:01

Beitragvon mschnell » 29. Mär 2017, 11:59 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

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
mschnell
 
Beiträge: 3144
Registriert: 11. Sep 2006, 09:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

Beitragvon af0815 » 29. Mär 2017, 12:50 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

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).
af0815
 
Beiträge: 3185
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: Win7/Linux (L stable FPC stable) per fpcup | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon charlytango » 29. Mär 2017, 12:58 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

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.
charlytango
 
Beiträge: 83
Registriert: 12. Sep 2015, 11:10
Wohnort: Wien
OS, Lazarus, FPC: FPC 3.0; Laz 1.6 | 
CPU-Target: Win 32Bit, 64bit
Nach oben

Beitragvon mschnell » 29. Mär 2017, 13:08 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

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

-Michael
mschnell
 
Beiträge: 3144
Registriert: 11. Sep 2006, 09:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

Beitragvon af0815 » 29. Mär 2017, 14:19 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

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).
af0815
 
Beiträge: 3185
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: Win7/Linux (L stable FPC stable) per fpcup | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon mschnell » 29. Mär 2017, 14:23 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

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 29. Mär 2017, 14:28, insgesamt 1-mal geändert.
mschnell
 
Beiträge: 3144
Registriert: 11. Sep 2006, 09:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

Beitragvon mschnell » 29. Mär 2017, 14:27 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

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
mschnell
 
Beiträge: 3144
Registriert: 11. Sep 2006, 09:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

» Weitere Beiträge siehe nächste Seite »
Nächste

Zurück zu Datenbanken



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried