AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Firedac probleme mit Blob

Ein Thema von Kostas · begonnen am 19. Jul 2016 · letzter Beitrag vom 20. Jul 2016
Antwort Antwort
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.058 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Firedac probleme mit Blob

  Alt 19. Jul 2016, 21:10
Datenbank: Firebird • Version: 2.5 • Zugriff über: Firedac
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:
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= 20801 SizeZ= 20801
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
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.996 Beiträge
 
Delphi 12 Athens
 
#2

AW: Firedac probleme mit Blob

  Alt 19. Jul 2016, 22:02
Sieht so aus, als liege es an diesem speziellen Bild.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.058 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Firedac probleme mit Blob

  Alt 19. Jul 2016, 22:39
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Firedac probleme mit Blob

  Alt 20. Jul 2016, 07:06
Hallo,
die Blob_Size hat noch historische Gründe.
siehe hier zu Blob_Size 80 = Terminalzeichen pro Zeile

https://www.ibphoenix.com/resources/...general/doc_54

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
http://stackoverflow.com/questions/4...ld-in-firebird
( OCTET_LENGTH() )

Heiko
Heiko

Geändert von hoika (20. Jul 2016 um 07:10 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Firedac probleme mit Blob

  Alt 20. Jul 2016, 07:30
Nicht nur historische sondern vorallem ein Performancefaktor. (Level 0,1 2)

http://www.ibexpert.net/ibe_de/index.php?n=Doku.BLOB
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.996 Beiträge
 
Delphi 12 Athens
 
#6

AW: Firedac probleme mit Blob

  Alt 20. Jul 2016, 07:41
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.
Sorry, ich wollte damit eigentlich andeuten, daß uns der Zugriff auf dieses Bild eventuell ein Debugging ermöglicht. An dem Code ist ja generell nichts auszusetzen. Deswegen kann es natürlich immer noch an der Implementation liegen, aber eben nur in Kombination mit diesem einen Bild.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz