AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Aus TurboDB Blob in Stream schreiben
Thema durchsuchen
Ansicht
Themen-Optionen

Aus TurboDB Blob in Stream schreiben

Ein Thema von machstuhl · begonnen am 15. Aug 2012 · letzter Beitrag vom 17. Aug 2012
Antwort Antwort
Seite 1 von 2  1 2      
machstuhl

Registriert seit: 17. Jul 2012
40 Beiträge
 
#1

Aus TurboDB Blob in Stream schreiben

  Alt 15. Aug 2012, 13:48
Datenbank: TurboDB • Version: 6 • Zugriff über: SQL
Hallo Freunde der Nacht,

über folgendem Problem sitze ich schon einige Tage und komme nicht weiter.
Ziel ist es, ein Blobfeld (meistens JPEG) aus der Datenbank auszulesen, in einen Stream zu schreiben und dann in einem TImage auszugeben.

Der Code aus der Klasse (FBLOB1 = TMemoryStream, Stream0 = TStream)
Code:
  Stream0 := CreateBlobStream(FieldByName('BLOB1'), bmRead);
  Stream0.Position := 0;
  FBLOB1.Create;
  FBLOB1.Write(Stream0, fmOpenRead);
  FBLOB1.CopyFrom(Stream0, Stream0.Size);
Der Code im Programm (J = TJpegImage)
Code:
  J.LoadFromStream(T.BLOB1);
  Image1.Picture.Assign(J);
Das Problem besteht denke ich ganz am Anfang, bei der Übergabe des Blobs an den Stream.

Hat wer einen guten Rat parat?
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Aus TurboDB Blob in Stream schreiben

  Alt 15. Aug 2012, 14:16
Hallo,

ein

FieldByName('BLOB1').SaveToStream()
gibt es nicht zufällig? ggf. schauen ob du das Feld auf ein TBlobField (oder wie auch immer das bei TubroDB heißt) casten musst...

Grüße
  Mit Zitat antworten Zitat
machstuhl

Registriert seit: 17. Jul 2012
40 Beiträge
 
#3

AW: Aus TurboDB Blob in Stream schreiben

  Alt 15. Aug 2012, 14:21
Hallo,

ein

FieldByName('BLOB1').SaveToStream() gibt es nicht zufällig? ggf. schauen ob du das Feld auf ein TBlobField (oder wie auch immer das bei TubroDB heißt) casten musst...

Grüße
Zufällig nicht, das wäre ja viel zu einfach .
Casten brauch ich denke ich nichts.

der Fehler tritt in folgender Zeile auf.
Code:
Stream0 := CreateBlobStream(FieldByName('BLOB1'), bmRead);
edit:

mittlerweile habe ich den code ein bisschen umgeändert, funktioniert aber immernoch nicht.

Code:
 Stream0 := CreateBlobStream(FieldByName('BLOB1'), bmRead);
 J.LoadFromStream(Stream0);
 Form3.Image1.Picture.Assign(J);

Geändert von machstuhl (15. Aug 2012 um 14:24 Uhr)
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Aus TurboDB Blob in Stream schreiben

  Alt 15. Aug 2012, 15:10
Casten brauch ich denke ich nichts.
Ok, wenn du denkst..

der Fehler tritt in folgender Zeile auf.
Code:
Stream0 := CreateBlobStream(FieldByName('BLOB1'), bmRead);
gut für dich, schlecht für uns... weil wir nicht wissen was für ein Fehler...

schon mal die Dokumentation gelesen? z.B. das Kapitel über TTdbBlobProvider? oder das über das Demo "Images"? TurboDB ist bei mir schon verdammt lange her, daher kenne ich mich nicht mehr soo gut aus...

Grüße
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
795 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Aus TurboDB Blob in Stream schreiben

  Alt 15. Aug 2012, 15:22
Wie heißt denn die Query (oder die Table), deren Feld BLOB1 heißt...

Irgendwie fehlt diese Information nicht nur mir, sondern wohl auch dem Compiler...

Grüße
Mikhal

PS: Ich bin an dieser Stelle immer sehr faul, ich caste immer:
(Query.FindField('Blub') As TBlobField).SaveToStream(s)
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Aus TurboDB Blob in Stream schreiben

  Alt 15. Aug 2012, 15:51
Wie heißt denn die Query (oder die Table), deren Feld BLOB1 heißt...
ich vermute stark, dass das ne "with...." Konstruktion ist. Äh nein, ich hoffe es...


PS: Ich bin an dieser Stelle immer sehr faul, ich caste immer:
(Query.FindField('Blub') As TBlobField).SaveToStream(s)
er denkt ja, dass er nicht casten muss, also müssen wir halt den schweren Weg gehen....
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Aus TurboDB Blob in Stream schreiben

  Alt 16. Aug 2012, 07:05
Das hier dürfte übrigens auch nicht so recht klappen:
Zitat:
FBLOB1.Create;
Vielmehr soll das wohl
FBLOB1 := TMemoryStream.Create; heißen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
machstuhl

Registriert seit: 17. Jul 2012
40 Beiträge
 
#8

AW: Aus TurboDB Blob in Stream schreiben

  Alt 16. Aug 2012, 09:36
Wie heißt denn die Query (oder die Table), deren Feld BLOB1 heißt...

Irgendwie fehlt diese Information nicht nur mir, sondern wohl auch dem Compiler...

Grüße
Mikhal

PS: Ich bin an dieser Stelle immer sehr faul, ich caste immer:
(Query.FindField('Blub') As TBlobField).SaveToStream(s)
Code:
SQL.Text := 'Select * from TEST1 where ID = :I';
prepare;
ParamByName('I').AsInteger := FID;
ist die Query.

Casten brauch ich denke ich nichts.
Ok, wenn du denkst..

der Fehler tritt in folgender Zeile auf.
Code:
Stream0 := CreateBlobStream(FieldByName('BLOB1'), bmRead);
gut für dich, schlecht für uns... weil wir nicht wissen was für ein Fehler...

schon mal die Dokumentation gelesen? z.B. das Kapitel über TTdbBlobProvider? oder das über das Demo "Images"? TurboDB ist bei mir schon verdammt lange her, daher kenne ich mich nicht mehr soo gut aus...

Grüße
ja, beides.
mit einer ttdbDatabase-TdbTable-TDataSource-TdbBlobproviderkette funktioniert es auch.
Trotzdem würde ich gerne ohne die Komponenten und nur mit Code arbeiten.

Der Fehler ist folgendert: Zugriffsverletzung bei Adresse XXXXXXXX in Modul 'xxxxxx.exe'. Lesen von Adresse XYZXYZXY

Thx DeddyH für die Korrektur, nur soweit wird der Code gar nicht ausgeführt.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#9

AW: Aus TurboDB Blob in Stream schreiben

  Alt 16. Aug 2012, 09:51
Mit beiliegener Unit kannst Du beliebige Grafiken (PNG,JPG etc.) speicher und laden, es wird allerdings eine Info über den Typ im Blob mit abgelegt, gegf. anpassen.
Angehängte Dateien
Dateityp: pas LoadSaveImageBlobs.pas (1,9 KB, 53x aufgerufen)
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
machstuhl

Registriert seit: 17. Jul 2012
40 Beiträge
 
#10

AW: Aus TurboDB Blob in Stream schreiben

  Alt 16. Aug 2012, 10:02
sorry schonmal für den doppelpost, aber der obere ist irrelevant geworden. das blobfeld ist nun im stream.

Code:
(FindField('BLOB1') As TBlobField).SaveToStream(MS);
hat die Lösung gebracht, thx dafür.

nächstes Problem
Code:
J := TJPEGImage.Create;
J.LoadFromStream(MS);
Form3.Image1.Picture.Assign(J);
Ich denke das Problem ist, dass die TImage Komponente nicht weiß welcher Bildtyp da ankommt. Weiß einer dafür eine Lösung? Oder liegt das Problem woanders.

Die Fehlermeldung ist eine Zugriffsverletzung bei Adresse ABCDEFGJ usw.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

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 06:05 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