Zeos zum bearbeiten einer JET und einer SQLite - Datenbank

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

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

Beitragvon theo » 16. Apr 2017, 17:21 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.
theo
 
Beiträge: 7885
Registriert: 11. Sep 2006, 18:01

Beitragvon af0815 » 16. Apr 2017, 19:54 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
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815
 
Beiträge: 3265
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 » 16. Apr 2017, 22:27 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 :( .

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 16. Apr 2017, 22:43, insgesamt 4-mal geändert.
mschnell
 
Beiträge: 3159
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 » 16. Apr 2017, 22:37 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

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
mschnell
 
Beiträge: 3159
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 » 17. Apr 2017, 19:39 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).
af0815
 
Beiträge: 3265
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 » 17. Apr 2017, 20:55 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

Schau ich mir morgen an.

Vielen Dank !
-Michael
mschnell
 
Beiträge: 3159
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 » 19. Apr 2017, 12:41 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
mschnell
 
Beiträge: 3159
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 » 19. Apr 2017, 14:45 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

./.
mschnell
 
Beiträge: 3159
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 » 19. Apr 2017, 15:19 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

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).
af0815
 
Beiträge: 3265
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 » 20. Apr 2017, 10:08 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

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: 3159
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 » 20. Apr 2017, 15:39 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
mschnell
 
Beiträge: 3159
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 » 20. Apr 2017, 17:02 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

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).
af0815
 
Beiträge: 3265
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 » 21. Apr 2017, 12:48 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

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
mschnell
 
Beiträge: 3159
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 » 21. Apr 2017, 13:26 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

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

Beitragvon mschnell » 21. Apr 2017, 13:59 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

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
mschnell
 
Beiträge: 3159
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 »
VorherigeNächste

Zurück zu Datenbanken



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

porpoises-institution
accuracy-worried