Estoy con una app que lee y graba fotos (entre otros datos) en una base Sqlite. Después de seguir muchos ejemplo logre que funcione bien leyendo y escribiendo .
Seguí este ejemplo de Jonatan Souza y me funciona bien en android.
https://www.youtube.com/watch?v=2X7yDJYHuQk&t=62s
Ahora bien... en windows no funciona ....
Si bien la aplicación no es para windows , hago pruebas ahí (creo, como muchos) por una cuestión del tiempo que tarda la aplicación en correr.
Al leer: "Loading bitmap failed" y al grabar nada ..... pero tampoco la graba, lo verifiqué. Los otros datos se leen y graban sin problemas.
Uso Sqlite 3 , el archivo tiene se llama base1.s3db y es el mismo que subo al teléfono cuando pruebo. Me imagino que puede ser una cosa de versiones de sqlite. Ni idea que tiene el teléfono... La verdad nose.
Uso Delphi 10.1 -
grabar:
Código Delphi
[-]
var
BlobStream : TStream;
QGuardar : TFDQuery;
begin
QGuardar := TFDQuery.Create( Nil );
QGuardar.Connection := FDConnection1;
QGuardar.SQL.Clear;
QGuardar.SQL.Add('SELECT perfil WHERE id=1');
QGuardar.ExecSQL;
lb_nombre.Text := QGuardar.FieldByName('nombre').AsString;
lb_email.Text := QGuardar.FieldByName('email').AsString;
ed_fechaNac.Text := QGuardar.FieldByName('fechanac').AsString;
BlobStream := QGuardar.CreateBlobStream(
QGuardar.FieldByName('foto'),TBlobStreamMode.bmRead
);
FotoPerfil.LoadFromStream(BlobStream);
Cir_Foto.fill.bitmap.Bitmap := FotoPerfil;
QGuardar.Close;
leer:
Código Delphi
[-]
procedure TFormThree.BC_SalvarPerfilClick(Sender: TObject);
Var
qrySalvar : TFDQuery;
ImgSalvar : TMemoryStream;
begin
qrySalvar := TFDQuery.Create( Nil );
qrySalvar.Connection := FDConnection1;
qrySalvar.SQL.Clear;
qrySalvar.SQL.Add('UPDATE perfil SET nombre=:name, email=:email, foto=:foto WHERE id=1');
qrySalvar.ParamByName('name').AsString := Ed_NOMBRE.Text;
qrySalvar.ParamByName('email').AsString := Ed_Email.Text;
ImgSalvar := TMemoryStream.Create;
FotoPerfil.SaveToStream( ImgSalvar );
ImgSalvar.Seek(0,0);
qrySalvar.ParamByName('foto').LoadFromStream( ImgSalvar, ftBlob);
qrySalvar.ExecSQL;
end;