adalbertomesquita Experiente


Registrado: Segunda-Feira, 4 de Agosto de 2008 Mensagens: 402 Localização: Brasília
|
Enviada: Seg Abr 01, 2019 3:08 pm Assunto: Salvar Imagem no SQLite |
|
|
Boa tarde Pessoal!
Tenho um projeto no Banco SQLite onde tenho um campo do tipo Image.
Estou tentando salvar uma imagem nesse campo mas aparece o seguinte erro qdo tento:
'Cannot assign a Timage to a TBlobField'
Estou salvando da seguinte forma:
if not (dmLogin.qrTempFotos.State in dsEditModes) then
dmLogin.qrTempFotos.Edit;
dmLogin.qrTempFotosFOTO1.Assign(Image5);
dmLogin.qrTempFotos.Post;
Alguém tem ideia do que fazer para funcionar? |
|
strak2012 Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Ter Abr 02, 2019 1:56 am Assunto: |
|
|
Dificilmente recomendaria salvar imagem em banco, pois a mesma causa uma estabilidade ao banco quando não planejado com o maximo de cuidado.
Quanto ao uso de campos blob, saiba que este campo é possivel amarzenar tudo que se imagine, até mesmo um executavel e ja era um grande dor de cabeça para banco bem mais extruturado o que dirá para uma sqllite.
Eu em seu lugar esqueceria os campos blob e trabalharia com campos text, isso mesmo.
imagem no formato png.
O caminho seria mais ou menos assim:
Para salvar caso a imagem estivesse em um TImage
timage -> tbitmap -> tpngobject -> save in stream -> encode base64 -> sqlite
passos:
1 - converter o bitmap de um Timage em TpngObject - ex: bitmapTopng(image1.picture.bitmap,png_temp)
2 - salvar o conteudo o TpngObject em um Tstream - ex: png_temp.saveToStream(my_stream)
3 - converter o conteudo do Tstream em uma string base64 ex: base64.loadfromStream(my_stream)
4 - salvar a string base64 em um campo texto
para carregar a imagem do sql para Timage
sqlite -> decode base64 -> load in stream -> Tpngobject -> tbitmap -> Timage
passos:
1 - puxar do banco o texto que contem a imagem em base64
2 - decodificar o base64 em um Tstream - ex: base64.SaveToStream(my_stream)
3 - carregar o conteudo de um tpngobjet com o Tstream - ex: png_temp.loadformstream(my_stream)
4 - carregar o bitmap de um timagem com o tpngobjet - ex: image1.picture.bitmap.assign(png_temp)
parece facil não é?
Em se tratando de mobile voce nem precisa trabalhar com pngobject, pois o proprio Tbitmap no android já é deste formato, estranho mais é verdade. _________________ Tudo podemos quando tudo sabemos! |
|