var ImgExt : string; i : integer; ImgByteArray : TByteArray; Sql,ImgStr : String; my_sql: AnsiString; MemStream : TMemoryStream; begin if OpenPictureDialog.Execute then begin ImgExt := UpperCase(ExtractFileExt(OpenPictureDialog.FileName)); if (ImgExt = '.BMP') then begin Image1.Picture.LoadFromFile(OpenPictureDialog.FileName); MemStream := TMemoryStream.Create; Image1.Picture.Bitmap.SaveToStream(MemStream); MemStream.Seek(0, soFromBeginning); SetLength(ImgByteArray, MemStream.size); MemStream.ReadBuffer(ImgByteArray[0], Length(ImgByteArray)); // Transformation en chaine Hexa ImgStr :=''; for i:=0 to High(ImgByteArray) do ImgStr:= ImgStr + Inttohex(ImgByteArray[i],2); Sql := 'Insert into TableTest (Image) Values (X''' + ImgStr + ''')'; my_sql := AnsiString(sql); if mysql_real_query(LibHandle, PAnsiChar(my_sql), Length(my_sql))<>0 then raise Exception.Create(UnicodeString(mysql_error(LibHandle))); MemStream.free; end; end; end;
Type TBArray = Array of Byte; procedure Bitmap2ByteArray(const aBMP: TBitmap;var ByteArray: TBArray); var MS: TMemoryStream; begin MS := TMemoryStream.Create; try aBMP.SaveToStream(MS); MS.Seek(0, soFromBeginning); SetLength(ByteArray, MS.size); MS.ReadBuffer(ByteArray[0], Length(ByteArray)); finally MS.free; end; end;
procedure InsertBitmap(id: Integer; MonStream: TStream); begin with Form1, Query1, Sql do begin Clear; Add('INSERT INTO '+ MaTable + ' (id, MonImage)'); Add('VALUES ('+ IntToStr(id)+ ', :MonImage)');'+ ')'); ParamByName('MonImage').LoadFromStream(MonStream, ftBlob); ExecSql; end; end;
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionvar ImgExt : string; ImgByteArray : TByteArray; Sql,ImgStr : String; my_sql: AnsiString; StrStream : TStringStream; begin if OpenPictureDialog.Execute then begin ImgExt := UpperCase(ExtractFileExt(OpenPictureDialog.FileName)); if (ImgExt = '.BMP') then begin Image1.Picture.LoadFromFile(OpenPictureDialog.FileName); StrStream := TStringStream.Create(''); Image1.Picture.Bitmap.SaveToStream(StrStream); StrStream.Seek(0, soFromBeginning); SetLength(ImgByteArray, StrStream.size); StrStream.ReadBuffer(ImgByteArray[0], Length(ImgByteArray)); {ImgStr :=''; for i:=0 to High(ImgByteArray) do ImgStr:= ImgStr + Inttostr(ImgByteArray[i]);} ImgStr := StringReplace(StrStream.DataString, '''', '\''', [rfReplaceAll, rfIgnoreCase]); Sql := 'Insert into TableTest (Image) Values (' + ImgStr + ')'; my_sql := AnsiString(sql); if mysql_real_query(LibHandle, PAnsiChar(my_sql), Length(my_sql))<>0 then raise Exception.Create(UnicodeString(mysql_error(LibHandle))); StrStream.free; end; end; end;