Zeos zum bearbeiten einer JET und einer SQLite - Datenbank
Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba
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.
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.
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- 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
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
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).
-
- 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
Genauer als die aufgeschriebenen Punkte 1..11 kann ich die "nächsten Ziele" nicht definieren
.
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

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.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 ?!
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.
-
- 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
Das ist typisch und mir auch klar.af0815 hat geschrieben: Und vor allen hat M$ die Syntax so gemacht wie sie für sie am besten war.
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
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- 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
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- 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
Schau ich mir morgen an.
Vielen Dank !
-Michael
Vielen Dank !
-Michael
-
- 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
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
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
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- 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
Schön, nur meine Glaskugel ist bei der Reinigung, also bräuchte man den Source. SCNRmschnell hat geschrieben:Wenn ich nun Felder im DBGrid hinzufügen möchte muss ich ja die ZQuery auf "Aktiv" setzen. .....
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).
-
- 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
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. -> Absturzmschnell hat geschrieben: Wenn ich das tue bekomme ich eine Aktivitätsanzeige und die Lazrus IDE ist nicht mehr zugreifbar.
Die "normale" SQLQuery Verhindert das anscheinend (sie hat mir beim Experimentieren eine Fehlermeldung ausgeben).
...
Juchhu, ich kann jetzt sinnvolle SQL-Befehle eingeben !
-Michael
-
- 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
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
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
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- 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
In meinem Beispiel auf Github siehst du die Thumbnails sogar.
DBImage ist das Zauberwort
DBImage ist das Zauberwort
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- 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
Ja, Super, das hat geholfen !
Ich benutze hier
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:
Dann schreibe ich im Resultset mit
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:
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
Ich benutze hier
Code: Alles auswählen
ZQuery4thumbnail.SaveToStream(tp);
JPEG.LoadFromStream(tp);
Image1.Picture.Assign(JPEG);
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);
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;
(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
Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba
Hatte ich hier auch schon bemeckert. Ignorieren bzw. Debugger ausschalten hilft.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.
-
- 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
Das sollte es doch eine korrekte Lösung geben ...theo hat geschrieben: Ignorieren bzw. Debugger ausschalten hilft.
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