Zeos zum bearbeiten einer JET und einer SQLite - Datenbank

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

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

Beitrag von theo »

Wollte dir eigentlich nur zeigen, wo man SQL lernen kann und dass das eine gute Idee ist.

Aber OK, dann verfolge du mal deine eigene "Agenda".

Meine Prognose: Dieser Thread wird am Ende 70 Seiten haben und der Erkenntnisgewinn wird so ziemlich bei Null liegen.

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

Michael, vielleicht gibst du ein Ziel vor, wohin die Reise als nächstes gehen kann.

Die Jet ist ein Hybrid, IMHO weder Fisch noch Fleisch, daher etwas ServerDB etwas DesktopDB. Und vor allen hat M$ die Syntax so gemacht wie sie für sie am besten war.

Soweit ich verstanden habe, willst du die Access Tabellen mit den als Blob gespeicherten Vorschaubilderen auslesen und die Bilder noch besser komprimieren ?!

Andreas
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 »

Genauer als die aufgeschriebenen Punkte 1..11 kann ich die "nächsten Ziele" nicht definieren :( .

af0815 hat geschrieben:Soweit ich verstanden habe, willst du die Access Tabellen mit den als Blob gespeicherten Vorschaubilderen auslesen und die Bilder noch besser komprimieren ?!

Um genau zu sein, soll das Programm alle die Bilder, die der User vorher in TP in eine bestimmte Galerie gesteckt hat (also in der Datenbank gekennzeichnet hat) durch sehr stark JPEG-komprimierte Versionen ersetzen.

Nachdem ich das Ziel, das ganze nach SQLite zu konvertieren (und gleichzeitig zur neuen Version von TP, die etwas unterschiedliche Tabellen und Felder hat), erstmal aufgeschoben habe, ist das das momentane Ziel.

Dafür finde ich die oben angegebene "Agenda" ganz adäquat.

Die BLOBs stehen (vermutlich) in einer anderen Tabelle als die Grund-Daten jedes "Thumbnail"-Satzes. Außerdem ist BLOB-Bearbeitung ja vermutlich etwas "speziell" und ich möchte erstmal sehen was in Zeos sicher geht.

Nachdem ich eine Tabelle anzeigen kann, möchte ich demzufolge erstmal in der Lage sein, (Text-)Felder aus assoziierten Sätze einer anderen Tabelle (z.B. "Path") zusammen mit einigen wichtigen Kenndaten aus dem "Thumbnail"-Satz der Haupt-Tabelle anzeigen (idealeireise gemeinam in einem Grid, zur Not aber auch anders)) .

Wenn das klappt schaue ich, wie man einen BLOB lesen kann.

Sann versuche ich ihn wieder wegzuschreiben.

Klingt für mich ziemlich "straight forward".

Und dass ich dabei nach Möglichkeit das verwenden möchte, was mir Lazarus, die DB-Komponenten und ZEOS anbieten, ist doch eigentlich auch legitim...

Herzlichen Dank für alle Tips,
-Michael
Zuletzt geändert von mschnell am So 16. Apr 2017, 23:43, insgesamt 4-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: Und vor allen hat M$ die Syntax so gemacht wie sie für sie am besten war.

Das ist typisch und mir auch klar.

Das wiederum ist vermutlich auch der Grund, warum die Jet-Anbindung in Zeos nicht "offiziell" ist: entweder haben die Macher es aufgegeben, die letzten Inkompatibilitäten auszutüfteln und zu bearbeiten, oder sie sitzen noch dran.

Andererseits ist das aber auch der Grund, Zeos, einzusetzen, das ja - soweit ich das verstanden habe - versucht, die Unterschiede zwischen den verschiedenen Datenbank-Egines - zumindest für die Basis-Operationen - für den Anwender transparent zu machen.

In diesem Bewusstsein gehe ich ja auch in kleinen Schritten vor um auszuloten ,was bei Zeos (svn-Version) auf Jet denn tatsächlich funktioniert.

-Michael

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

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 »

Schau ich mir morgen an.

Vielen Dank !
-Michael

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 »

Um irgendwo SQL eintippen und testen zu können, habe ich weites DBGrid eingebaut und das mit einer weiteren Datasource und einer ZQuery statt einer ZTable an die ZConnection gehängt. in die SQL-Property der ZQuery habe ich "SELECT * FROM Thumbnail" eingetippt (Tumbnail ist die Tabelle, die ich auch in der ZTable ausgesucht hatte.

Wenn ich nun Felder im DBGrid hinzufügen möchte muss ich ja die ZQuery auf "Aktiv" setzen.

Wenn ich das tue bekomme ich eine Aktivitätsanzeige und die Lazrus IDE ist nicht mehr zugreifbar.

-Michael

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 »

./.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
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:Wenn ich nun Felder im DBGrid hinzufügen möchte muss ich ja die ZQuery auf "Aktiv" setzen. .....

Schön, nur meine Glaskugel ist bei der Reinigung, also bräuchte man den Source. SCNR

Ich habe mal ein Beispiel hinzugefügt, wie man mit ZEOS die MetaDaten abfrägt. Ausserdem habe ich im ZEOS Forum einen Hinweis bekommen, mit welchen DSN-String man keinen EOleError bekommt.

Siehe Branch wip_af

Andreas
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 »

mschnell hat geschrieben:Wenn ich das tue bekomme ich eine Aktivitätsanzeige und die Lazrus IDE ist nicht mehr zugreifbar.


Ich habe den trivialen Fehler gefunden: man darf in ZQuery in die "DataSource" Property nicht die Datasource eintragen, die wiederum ZQuery benutzt. Das gibt eine zirkuläre Referenz. -> Absturz

Die "normale" SQLQuery Verhindert das anscheinend (sie hat mir beim Experimentieren eine Fehlermeldung ausgeben).

...

Juchhu, ich kann jetzt sinnvolle SQL-Befehle eingeben !

-Michael

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 »

Noch mehr Erfolg:

Anscheinend ist die Datenbank netterweise so gebaut (vermutlich durch einen eingebauten "View"), dass die relevanten Daten alle in einer eiknzigen (virtuellen) Tabelle stehen (also alle Thumbnail-Daten, und die Tumbnail-Daten entsprechend mehrfach, wenn der Thumbnail mehreren Galerien zugeordnet ist).

Es reicht also, aus einer Tabelle die Galerie-ID zu einem Galerie-Namen zu suchen und dann in der "View"-Tabelle mit einem "select .. where ... " die Dinger abzuholen. (Vermutlich muss ich das dann später in 1000er Paketen oder so ähnlich machen, damit es in den Speicher passt und die Aktion nicht unendlich lange dauert.)

Ich kann den "Thumbnail" - BLOB in einen Stream lesen. Die Stream-Größe stimmt, also ist der BLOB wohl wirklich drin.

Allerdings scheinen die Daten nicht einfach JPEG-codiert zu sein (sondern vermutlich ohne Header oder so). Aber das ist ein anderes Thema.

Jedenfalls Danke für alle Hilfe,
-Michael

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

In meinem Beispiel auf Github siehst du die Thumbnails sogar.

DBImage ist das Zauberwort
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 »

Ja, Super, das hat geholfen !

Ich benutze hier

Code: Alles auswählen

 
    ZQuery4thumbnail.SaveToStream(tp);
    JPEG.LoadFromStream(tp);
    Image1.Picture.Assign(JPEG);
 


Was genauso klappt. Und ich kann mir den Stream zwischendurch ansehen...


Ich habe inzwischen auch den Trivialen Fehler gefunden, warum mein Programm die JPEGs (die natürlich doch im Prinzip JPEG-Dateien sind, sonst könnte DBImage es ja nicht anzeigen) nicht angezeigt hat.

Das klappt inzwischen prima und ich kann die JPEGs auch um-komprimieren:

Code: Alles auswählen

 
  JPEG.Assign(Image1.Picture.Bitmap);
  JPEG.CompressionQuality := 2;
  JPEG.SaveToStream(stream);
 



Dann schreibe ich im Resultset mit

Code: Alles auswählen

 
  ZQuery4.Edit;
  ZQuery4thumbnail_size.AsInteger:=ssize;
  ZQuery4thumbnail.LoadFromStream(stream);
 

die geänderten Daten zurück in den Datensatz. Das geht ohne Fehlermeldung.

Der letzte Schritt ist nun offensichtlich die Änderung an die Engine zurückzuschicken und sie zu veranlassen, sie in die datenbank zu schreiben.

ich habe da:

Code: Alles auswählen

 
  ZQuery4.ApplyUpdates;
  ZQuery4.CommitUpdates;
  ZQuery4.Post;
 


Darauf bekomme ich (z.B. bei "ApplyUpdates", wenn ich das weglasse, aber auch bei "Post") die Fehlermeldung "Der Provider kann keine Parameterinformation ermitteln und SetParamInfo ist nicht aufgerufen worden".

(Der SQL-Befehl in ZQuery4 ist
SELECT * from ThumbnailGallery where idGallery =1
)

Was habe ich da vergessen ?

Wenn ich in Deinem Programm im DBDrid nach "Edit" etwas ändere und dann "Post" Clicke, kommt dieselbe Fehlermeldung.

Gruß und dank,
-Michael

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

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

Beitrag von theo »

mschnell hat geschrieben:Darauf bekomme ich (z.B. bei "ApplyUpdates", wenn ich das weglasse, aber auch bei "Post") die Fehlermeldung "Der Provider kann keine Parameterinformation ermitteln und SetParamInfo ist nicht aufgerufen worden".

Was habe ich da vergessen ?

Wenn ich in Deinem Programm im DBDrid nach "Edit" etwas ändere und dann "Post" Clicke, kommt dieselbe Fehlermeldung.


Hatte ich hier auch schon bemeckert. Ignorieren bzw. Debugger ausschalten hilft.

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 »

theo hat geschrieben: Ignorieren bzw. Debugger ausschalten hilft.


Das sollte es doch eine korrekte Lösung geben ...

Welche der "commit" - Anweisung muss ich denn nun geben ?
ApplyUpdates , CommitUpdates und/oder Post ?

Ich habe um jede einzelne ein try/except gemacht. Alle machen die Exception und die Datenbank ist nachher nicht verändert, es wurde also nichts zurückgeschrieben.

"Next" wirft dann (anders als wenn man kein Update versucht) auch eine Exception.

-Michael

Antworten