![]() |
Datenbank: mysql • Version: 5 • Zugriff über: DirectMySql
Binärdaten speichern (blob)
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 |
AW: Binärdaten speichern (blob)
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. |
AW: Binärdaten speichern (blob)
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:
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.
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; |
AW: Binärdaten speichern (blob)
Zitat:
[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] |
AW: Binärdaten speichern (blob)
Zitat:
|
AW: Binärdaten speichern (blob)
Ich habs mir grade selber gemacht. (Wer nun an was anderes denk, ist ein Ferkel :-D )
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} |
AW: Binärdaten speichern (blob)
Du solltest aber den Funktionskopf noch etwas ändern:
Delphi-Quellcode:
function UnEscapeStr(const aString:String; ms:TMemoryStream):Integer;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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