AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken BlobStream in StringGrid speichern
Thema durchsuchen
Ansicht
Themen-Optionen

BlobStream in StringGrid speichern

Ein Thema von Smiley · begonnen am 6. Mai 2022 · letzter Beitrag vom 23. Mai 2022
Antwort Antwort
Benutzerbild von Smiley
Smiley

Registriert seit: 9. Dez 2004
Ort: Gedern
210 Beiträge
 
Delphi 12 Athens
 
#1

AW: BlobStream in StringGrid speichern

  Alt 19. Mai 2022, 16:23
OK dann also etwa so

qBilder.FieldByName('JPGPic').AsStream.CopyFrom(MS tream, -1);

Jetzt nur noch Das Array in das MStream reinbringen.
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
689 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: BlobStream in StringGrid speichern

  Alt 19. Mai 2022, 17:20
OK dann also etwa so

qBilder.FieldByName('JPGPic').AsStream.CopyFrom(MS tream, -1);

Jetzt nur noch Das Array in das MStream reinbringen.
Einfach die TPicture Klasse nutzen mit SaveToStream und dann aber die Stream.Position auf 0 setzen
  Mit Zitat antworten Zitat
Benutzerbild von Smiley
Smiley

Registriert seit: 9. Dez 2004
Ort: Gedern
210 Beiträge
 
Delphi 12 Athens
 
#3

AW: BlobStream in StringGrid speichern

  Alt 23. Mai 2022, 10:08
Ich habe jetzt etwas gefunden und zusammengebaut das dem entspricht was ich vorhabe.
Ich schreibe und lese mein TJpegImage Array[0..19) direkt in ein BlobFeld und lese es so auch wieder.
Code:
// **************************************************************************
// * Read and Write Blob Stream                                            *
// **************************************************************************
procedure TDM.ReadBlobStream;
var
  BlobStream: TStream;
Begin
  // Bild aus Datenbank lesen und in AktData.JPegArray schreiben
  BlobStream := DM.qData.CreateBlobStream(DM.qData.FieldByName('PicData'), bmRead);
  BlobStream.Position := 0;
  Try
    BlobStream.ReadBuffer(AktData.JpegArray, sizeof(????????));
  Finally
    BlobStream.Free;
  End;
End;

procedure TDM.WriteBlobStream;
var
  BlobStream: TStream;
Begin
  // Bild aus AktData.JPegArray lesen und in Datenbank schreiben
  BlobStream := DM.qData.CreateBlobStream(DM.qData.FieldByName('PicData'), bmWrite);
  BlobStream.Position := 0;
  Try
    BlobStream.WriteBuffer(AktData.JpegArray, sizeof(AktData.JpegArray));
  Finally
    BlobStream.Free;
  End;
End;
Ist das so korrekt ??
Was muss ich bei SizeOf(??????) reinschreiben?

Geändert von Smiley (23. Mai 2022 um 10:23 Uhr)
  Mit Zitat antworten Zitat
Poelser

Registriert seit: 21. Apr 2008
Ort: Europa
145 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: BlobStream in StringGrid speichern

  Alt 23. Mai 2022, 10:29
Ohne jetzt genauer in die Materie einzutauchen, ist mein erster Gedanke Length(AktData.JpegArray). SizeOf ist doch nur die Größe des Pointers, du brauchst hier aber doch die Länge der Daten.
LG aus dem hohen Norden, Edmund
  Mit Zitat antworten Zitat
Benutzerbild von Smiley
Smiley

Registriert seit: 9. Dez 2004
Ort: Gedern
210 Beiträge
 
Delphi 12 Athens
 
#5

AW: BlobStream in StringGrid speichern

  Alt 23. Mai 2022, 10:43
Muss da vielleicht sowas wie
BlobStream.ReadBuffer(AktData.JpegArray,BlobStream .Size);
rein ?

Streams sind mir noch völlig fremd daher so merkwürdige Fragen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.372 Beiträge
 
Delphi 12 Athens
 
#6

AW: BlobStream in StringGrid speichern

  Alt 23. Mai 2022, 11:30
BlobStream.WriteBuffer(AktData.JpegArray, SizeOf(AktData.JpegArray));

Aber NEIN.

So wird bloß die Array-Variable gespeichert.

Wäre es ein dynmaisches Array, dann bloß der Array-Zeiger
und bei einem statischen Array die Felder, also bloß die Objekt-Zeiger zu den TJpegImage.



Du willst mußt aber den Inhalt (die Daten) der JpegImage speichern, also jeweils SaveToStream.
Soll das dann noch alles zusammen in einen Stream, mußt du die die größe der einzelnen Streams speichern
und dann beim Laden die Streams aufteilen und jeweils in einen MemoryStream umkopieren.
* speichernd an einen Stream anhängen geht
** vorher die alte Position/Ende merken, ein paar Byte (z.B. Integer) als Platzhalter einfügen, mit SaveToStream das Jpeg anhängen und dann den Platzhalter mit der Größe überschreiben
** oder SaveToStream in einen zwischenStream (TMemoryStream) und dann Stream.Size in den Blob und anschließend die Daten mit CopyData rüberkopieren
* beim Laden weiß dann aber LoadFromStream nicht, wo es endet
** also das Size auslesen, die Daten in einen TMemoryStream, MS.Position zurück auf 0 und LoadFromStream(MS)
** und dann so weiter, für die anderen Streams
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (23. Mai 2022 um 12:46 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Smiley
Smiley

Registriert seit: 9. Dez 2004
Ort: Gedern
210 Beiträge
 
Delphi 12 Athens
 
#7

AW: BlobStream in StringGrid speichern

  Alt 23. Mai 2022, 12:29
Na, jetzt wissen wir wenigstens dass es so nicht funktioniert.
Wäre ja zu schön gewesen.

Ich lasse meine Praktikanten auch immer erst mal einige Zeit suchen und sich mit dem Thema beschäftigen und gebe nur kleine Hinweise aber irgendwann ist dann doch die Schmerzgrenze erreicht und dann sage ich ihnen wie es geht.
  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 02: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-2025 by Thomas Breitkreuz