![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: Firedac
Firedac probleme mit Blob
Hallo Zusammen,
ich habe ein großes Problem mit Blobs. In einer Tabellen sind Bilder in ein Blob-Feld abgelegt. Alle Blobs bis auf eines werden korrekt ausgelesen. Schaue ich mit IBExpert in die Tabelle Bilder rein, ist die kleine Grösse die das BilderDataSet.FieldByName('BILD').Size ausgibt exakt identisch. Das Feld ist angelegt als FieldType=BlOB Size=1024 Suytype=Binary. Er fällt auf dass der Stream genau um den Faktor 1024 größer ist. Ist das Zufall oder hat das was mit der definierten Blob-Größe von 1024 zu tun?
Delphi-Quellcode:
SizeQ= 20801 SizeZ= 20801
var TmpStream:TStream;
begin TmpStream := BilderDataSet.CreateBlobStream(BilderDataSet.FieldByName('BILD'),bmRead); cmAppendTarget.Params.ParamByName('BILD').LoadFromStream(TmpStream,ftBlob); Memo1.Lines.add(Format('SizeQ= %d SizeZ= %d',[BilderDataSet.FieldByName('BILD').Size, TmpStream.Size])); TmpStream.Free; SizeQ= 19907 SizeZ= 19907 SizeQ= 23810 SizeZ= 23810 SizeQ= 31347 SizeZ= 32099328 <<<<Warum wird der Stream Faktor 1024 größer? SizeQ= 24599 SizeZ= 24599 SizeQ= 18064 SizeZ= 18064 SizeQ= 15731 SizeZ= 15731 SizeQ= 15295 SizeZ= 15295 SizeQ= 12934 SizeZ= 12934 SizeQ= 26518 SizeZ= 26518 SizeQ= 4787 SizeZ= 4787 SizeQ= 7283 SizeZ= 7283 SizeQ= 26060 SizeZ= 26060 SizeQ= 22652 SizeZ= 22652 hat jemand eine Idee? Gruß Kostas |
AW: Firedac probleme mit Blob
Sieht so aus, als liege es an diesem speziellen Bild.
|
AW: Firedac probleme mit Blob
Hallo Uwe,
könnte schon sein, aber einem Blob sollte doch egal sein welcher Inhalt verwaltet wird. Ich habe das Bild nicht geladen sondern rein als Blob abgerufen. Das interessante dabei ist, in der Tabelle ist das Bild noch klein. Es fällt auf dass der Stream das Bild um den Faktor zufällig? 1024 vergrößert. Zufällig ist die Felddefinition in der DB auf 1024. Auch ist auffällig dass die Orignalgröße vom Bild die größte von allen andern Bildern ist. Ich werde morgen weitere Bilder in die DB importieren die auch grösser sind. Mal sehen was passiert. Gibt es Richtlinien wie die Größe der Blob Felder berechnet werden soll bei Firebird? Irgend wo habe ich mal davon gelesen. Im Idealfall sollte die Größe des Bildes ein vielfacher der Feldgröße sein vermutlich. Doch bei Bildern kann ich das unmöglich vorgeben. Gruß Kostas |
AW: Firedac probleme mit Blob
Hallo,
die Blob_Size hat noch historische Gründe. siehe hier zu Blob_Size 80 = Terminalzeichen pro Zeile ![]() Intern in FB wird ein Puffer mit genau dieser Größe angelegt und immer diese Größe in den Puffer geladen. Bei Blob_Size 80 und einer Größe des Blobs von 90 Byte wird also hintereinander einmal die 80 Byte in einen statischen Puffer (char[80]) geladen, und wenn es mehr als 80 Byte sind, ein zweiter 2., dynamischen Puffer benutzt. Der statische Puffer ist natürlich schneller. Wenn der Blob i.d.R. nur 80 Byte hat, reicht Puffer 1, Beim Client kommen aber die 90 Byte an. (Ob das immer noch so ist, weiss ich nicht.) Versuch doch mal hiermit die Größe direkt über FB zu ermitteln ![]() ( OCTET_LENGTH() ) Heiko |
AW: Firedac probleme mit Blob
Nicht nur historische sondern vorallem ein Performancefaktor. (Level 0,1 2)
![]() |
AW: Firedac probleme mit Blob
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz