AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Binärdaten speichern (blob)
Thema durchsuchen
Ansicht
Themen-Optionen

Binärdaten speichern (blob)

Ein Thema von DelTurbo · begonnen am 8. Okt 2011 · letzter Beitrag vom 10. Okt 2011
Antwort Antwort
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#1

Binärdaten speichern (blob)

  Alt 8. Okt 2011, 16:28
Datenbank: mysql • Version: 5 • Zugriff über: DirectMySql
Ich suche schon länger im netz und auch hier im Board, wie man z.b. eine jpg datei übergeben kann. Also Binary daten speichern kann. Kann mir vielleicht jemand sagen wie das geht?

Unter sqlite3 wäre das z.b. DataBase.UpdateBlob bzw. ms:=Table.FieldAsBlob

Danke im voraus
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#2

AW: Binärdaten speichern (blob)

  Alt 9. Okt 2011, 11:23
Hi, nachdem keiner geantwortet hat, dachte ich mir, die ist sooo doof das keiner mit reden will.

Ich habe mir das DirectMySql mal angesehen und nach dem wort "blob" gesucht. Es gibt eine Function mit namen EscapeStr. Damit kann man dann ganz "normal" das query aufrufen.

Was ich nicht weiss bzw. gefunden habe ist, wenn ich den datensatz wieder lese, wie kommt er zurück? Als binärdaten? Oder kommt der gleiche String zurück? Wenn ja, wie bekomme ich daraus wieder binärdaten? Dafür habe ich keine Function gefunden.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#3

AW: Binärdaten speichern (blob)

  Alt 9. Okt 2011, 12:39
Es ist eigentlich keine so gute Idee ein ganzes Bild in einer DB abzusichern. Besser wäre es, wenn du das Bild in einem Verzeichnis speicherst, davon den MD5 oder so nimmst und es so benennst. Dann schreibst du in die DB nur den MD5 Wert.

Ansonsten würde ich es so probieren:
Delphi-Quellcode:
var
  StringStream: TStringStream;
begin
  StringStream := TStringStream.Create('');
  with StringStream do
    try
      Position := 0;
      Image1.Picture.Graphic.SaveToStream(StringStream);

      // diesen Wert in die DB speichern: StringStream.DataString
    finally
      Free;
    end;
Wenn du das Bild von einem TFileStream hast funktioniert es genauso. Das Laden einfach umgekehrt mit WriteString(); den Wert aus der DB in den TStringStream schreiben und dann den Stream in das Image oder eben den Filestream speichern.
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Binärdaten speichern (blob)

  Alt 9. Okt 2011, 12:42
Es ist eigentlich keine so gute Idee ein ganzes Bild in einer DB abzusichern. Besser wäre es, wenn du das Bild in einem Verzeichnis speicherst, davon den MD5 oder so nimmst und es so benennst.
Das ist jetzt aber ein bisschen sehr verallgemeinert, oder? Beide Vorgehensweisen haben ihre Vor- und Nachteile, so dass es von der fallspezifischen Anforderung abhängt, welcher man nun den Vorzug geben sollte.

[edit] Achja, als escapeter String sollte das wie beschrieben funktionieren. Nach dem Auslesen sollte man mit UnescapeStr wieder an die ursprünglichen Daten gelangen. [/edit]
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
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#5

AW: Binärdaten speichern (blob)

  Alt 9. Okt 2011, 12:59
[edit] Achja, als escapeter String sollte das wie beschrieben funktionieren. Nach dem Auslesen sollte man mit UnescapeStr wieder an die ursprünglichen Daten gelangen. [/edit]
Leider finde ich dazu nix. Hast du noch eine idee wonach ich suchen könnte?
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#6

AW: Binärdaten speichern (blob)

  Alt 10. Okt 2011, 14:04
Ich habs mir grade selber gemacht. (Wer nun an was anderes denk, ist ein Ferkel )
Falls es mal jemand braucht...

Delphi-Quellcode:
{------------------------------------------------------------------------------
  function UnEscapeStr(aString:String;var ms:TMemoryStream):Integer - 10.10.2011 14:50
   Convertiert einen EscString in einen MemoryStream zurueck
------------------------------------------------------------------------------}

function UnEscapeStr(aString:String;var ms:TMemoryStream):Integer;
var
   i    :Integer;
   line   :String;
   pc      :PChar;
begin
      Result:=0;
      i:=1;
      line:='';
      while ( i<Length(aString) ) do begin
         if ( aString[i]='\' ) then begin
            inc(i);
         case aString[i] of
           't': line:=line+#9;
           'n': line:=line+#10;
           'r': line:=line+#13;
           '0': line:=line+#0;
         else
           line:=line+aString[i];
         end;
         end else begin
            line:=line+aString[i];
         end;
         inc(i);
      end;
     pc:=PChar(line);
     ms.write(pc^,Length(line));
      Result:=ms.Size;
end; {function UnEscapeStr(aString:String;var ms:TMemoryStream):Integer}
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Binärdaten speichern (blob)

  Alt 10. Okt 2011, 14:11
Du solltest aber den Funktionskopf noch etwas ändern:
function UnEscapeStr(const aString:String; ms:TMemoryStream):Integer;
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
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 18:27 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