Umgang mit Blob feldern
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Umgang mit Blob feldern
ich stehe im Moment vor dem Problem, das es recht aufwendig ist mit dem LCL/VCL datenbanklayer in SQL Datenbanken auf Blob felder zuzugreifen.
Prinzipiell ist das nicht schwirig. ABER.
Ich will nicht jedesmal die Blob Felder mit abrufen also führ ich ein Select ohne die Blob Felder aus. Ich hab dann Routinen die mir die Blob Felder gesondert abrufen und laden. Beim ändern kommt jetzt aber das Problem.
Ich füge beispielsweise einen Datensatz ein. Jetzt will ich das Blob Feld mit setzen, dort kommts zum Problem das der Datensatz in der Datenbank nicht bekannt ist, da er ja noch im Cache der DataSet Komponente ist. Also führe ich vorher ein Post+ApplyUpdates durch. Nachfolgende Routinen erwarten jetzt aber unter Umständen das die Tabelle noch im State dsInsert ist ...
Gibts keine sauberere Möglichkeit das zu tun ?
Nächstes Problem ist das ich keine Binärdaten übergeben kann, hat jemadn einen effizienten Algorythmus um das zu tun ? Im Moment benutze ich Base64.
Prinzipiell ist das nicht schwirig. ABER.
Ich will nicht jedesmal die Blob Felder mit abrufen also führ ich ein Select ohne die Blob Felder aus. Ich hab dann Routinen die mir die Blob Felder gesondert abrufen und laden. Beim ändern kommt jetzt aber das Problem.
Ich füge beispielsweise einen Datensatz ein. Jetzt will ich das Blob Feld mit setzen, dort kommts zum Problem das der Datensatz in der Datenbank nicht bekannt ist, da er ja noch im Cache der DataSet Komponente ist. Also führe ich vorher ein Post+ApplyUpdates durch. Nachfolgende Routinen erwarten jetzt aber unter Umständen das die Tabelle noch im State dsInsert ist ...
Gibts keine sauberere Möglichkeit das zu tun ?
Nächstes Problem ist das ich keine Binärdaten übergeben kann, hat jemadn einen effizienten Algorythmus um das zu tun ? Im Moment benutze ich Base64.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Sa 9. Sep 2006, 18:05
- OS, Lazarus, FPC: Linux (L trunk FPC trunk)
- CPU-Target: 64Bit
- Wohnort: Dresden
- Kontaktdaten:
Es sollte möglich sein Binärdaten zu übergeben.
Dafür gibts ja den Blobtyp binär. Ich kenn es allerdings nur von Delphi her, um ein Blobfeld bspw. mit einem Bild zu fühlen, musst du einen Stream zur Datenbank öffnen und kannst es anschließend über diesen Stream in die Datenbank ablegen.
Ich hab es nie gemacht...aber im Editmodus sollte es möglich sein, den Stream ins Blob zu schreiben und anschließend mit post zu beenden.
Dafür gibts ja den Blobtyp binär. Ich kenn es allerdings nur von Delphi her, um ein Blobfeld bspw. mit einem Bild zu fühlen, musst du einen Stream zur Datenbank öffnen und kannst es anschließend über diesen Stream in die Datenbank ablegen.
Ich hab es nie gemacht...aber im Editmodus sollte es möglich sein, den Stream ins Blob zu schreiben und anschließend mit post zu beenden.
Johannes
Re: Umgang mit Blob feldern
Der basE91 soll datenmässig etwas effizienter sein. Geschw. weiss ich nicht.Christian hat geschrieben:Nächstes Problem ist das ich keine Binärdaten übergeben kann, hat jemadn einen effizienten Algorythmus um das zu tun ? Im Moment benutze ich Base64.
-
- Beiträge: 131
- Registriert: Sa 5. Apr 2008, 17:57
- OS, Lazarus, FPC: Linux (Debian, Xubuntu), MacOS X, MS Win, Android, Web
- CPU-Target: 32Bit/64Bit
- Wohnort: Ulm
Aufgrund von Problemen mit BLOB Feldern bin ich dazu übergegangen zwei Queries zu benutzen.
In Deinem Fall könntest Du in der einen für die Übersicht die Daten ohne BLOBs laden und dann mit der zweiten die Bearbeitung übernehmen.
Dabei weisst Du ja schon den Datensatz, den Du berabeiten möchtest und kannst nur diesen laden. Dabei ist es dann auch möglich ein "select ... for update" für ein Record-Lock abzusetzen.
Wegen BLOB Felder muss ich noch anmerken, dass es unter Umständen nötig sein kann die Codepage Einstellungen auf der Connection zu ändern. Wir hatten Probleme mit UTF8 und BLOBs. Zum Schreiben deaktivieren wir temporär die UTF8 Einstellung in der ZConnection und setzen sie nach dem Schreibvorgang wieder.
Gruss,
Tibor
In Deinem Fall könntest Du in der einen für die Übersicht die Daten ohne BLOBs laden und dann mit der zweiten die Bearbeitung übernehmen.
Dabei weisst Du ja schon den Datensatz, den Du berabeiten möchtest und kannst nur diesen laden. Dabei ist es dann auch möglich ein "select ... for update" für ein Record-Lock abzusetzen.
Wegen BLOB Felder muss ich noch anmerken, dass es unter Umständen nötig sein kann die Codepage Einstellungen auf der Connection zu ändern. Wir hatten Probleme mit UTF8 und BLOBs. Zum Schreiben deaktivieren wir temporär die UTF8 Einstellung in der ZConnection und setzen sie nach dem Schreibvorgang wieder.
Gruss,
Tibor
-
- Beiträge: 131
- Registriert: Sa 5. Apr 2008, 17:57
- OS, Lazarus, FPC: Linux (Debian, Xubuntu), MacOS X, MS Win, Android, Web
- CPU-Target: 32Bit/64Bit
- Wohnort: Ulm
Dann sehe ich das Problem nicht.
Müsstest Du ev. mal genauer erklären wo Du bei diesem Vorgehen ein Problem siehst.
Du trennst damit sauber das Eintragen von "normalen" Feldern und dem BLOB Feld.
Von der Seite der Transaktionen der Datenbank sehe ich da keine Probleme.
Ausserdem solltest Du nicht so gereizt reagieren.
Versuche ja nur zu helfen...
Gruss,
Tibor
Müsstest Du ev. mal genauer erklären wo Du bei diesem Vorgehen ein Problem siehst.
Du trennst damit sauber das Eintragen von "normalen" Feldern und dem BLOB Feld.
Von der Seite der Transaktionen der Datenbank sehe ich da keine Probleme.
Ausserdem solltest Du nicht so gereizt reagieren.
Versuche ja nur zu helfen...
Gruss,
Tibor