JPEG mediante SQL desde BLOB de MySQL
Publicado por cesar (1 intervención) el 24/10/2011 17:28:49
Buen dia a todos tengo un problema con imagenes JPEG desde campo Blob en base de datos MySQL.
Requiero almacenar imagenes JPEG en campo Blob de MySQl mediante sentecial SQL y visualizar las imagenes almacenadas en un campo DBImage o TImage, recuperando mediante sentiencias SQL, es decir sin usar TTable o ADOTable solo usando TSQL.
Pongo el codigo que estoy utilizando para almacenar las fotos en el campo IMAGEN de tipo Blob en la base en MySQL y de igual forma pongo el codigo que utilizo para recuperar las imagenes, hasta este momento no se si las imagenes se almacenan correctamente en el campo blob ya que no logro visualizar las imagenes.
Alguien que me ayude por favor a resolver el problema.
Y aprovechando este mismo codigo podria usarse para almacenar documento en formato DPF?
CODIGO PARA ALMACENAR LAS IMAGENES.
procedure TFormDigitaVale.Button1Click(Sender: TObject);
Var
xSQl:String;
MS : TMemoryStream;
begin
imgFoto.Picture.LoadFromFile('65ca57.jpg'); //imagen que guardo, esto solo es temporal la idea es escanear el documento y guardarlo.
imgFoto.Stretch:=TRUE; //imgFoto es un componente TImage que permita visualizar la imagen que se almacena
with DM1.QueryDM do
begin
Close;
SQL.Clear;
xSQL := ' Insert into repositorio (IDAlmacen,Anio,NoFacReq,Titulo,Imagen) ';
xSQL := xSQL + ' Values (0,"2011","'+EditNumSalida.Text+'","descipcion de documento",:xDocumento)'; //EditNumSalida es el folio que asigno a la imagen para despues recuperar
SQL.Add(xSQL);
ParamByName('xDocumento').DataType := ftBlob; //se supone indico al campo blob que la imagen es blob
ParamByName('xDocumento').LoadFromFile('65ca57.jpg', ftBlob); //cargo la imagen en campo blob
ExecSQL; // ejecuto el SQL
end;
end;
CODIGO USADO PARA RECUPERAR LA IMAGEN DESDE CAMPO BLOB de MySQL
procedure TFormDigitaVale.Button2Click(Sender: TObject);
var
imgJPG:TJpegImage;
blobF:TBlobField;
// Jpeg:TJpegImage;
Corriente:TMemoryStream;
fs : TMemoryStream;
xSQl:String;
begin
imgJPG := TJpegImage.create;
with DM1.QueryRepositorio do begin
SQL.Clear;
SQL.Add('SELECT * FROM repositorio WHERE IDAlmacen= 0
' and anio=2011 and NoFacReq='+EditNumSalida.Text+' ');
Open;
if RecordCount = 1 then begin
(FieldByName('imagen') as TBlobField).SaveToStream(fs);
imgJPG.LoadFromStream(fs);
with DM1.TableRepositorioImagen do begin
imgFoto.Picture.Assign(imgJPG); // imgFOTO es un componente TImage
imgFoto.Visible := True;
ImgFoto.Refresh;
end;
end;
// Close; //Evito cerrar el query que recupera la consulta pensado que se cerraba y que la imagen ya no se visualizaba
end;
fs.Free;
imgJPG.Free;
end;
Requiero almacenar imagenes JPEG en campo Blob de MySQl mediante sentecial SQL y visualizar las imagenes almacenadas en un campo DBImage o TImage, recuperando mediante sentiencias SQL, es decir sin usar TTable o ADOTable solo usando TSQL.
Pongo el codigo que estoy utilizando para almacenar las fotos en el campo IMAGEN de tipo Blob en la base en MySQL y de igual forma pongo el codigo que utilizo para recuperar las imagenes, hasta este momento no se si las imagenes se almacenan correctamente en el campo blob ya que no logro visualizar las imagenes.
Alguien que me ayude por favor a resolver el problema.
Y aprovechando este mismo codigo podria usarse para almacenar documento en formato DPF?
CODIGO PARA ALMACENAR LAS IMAGENES.
procedure TFormDigitaVale.Button1Click(Sender: TObject);
Var
xSQl:String;
MS : TMemoryStream;
begin
imgFoto.Picture.LoadFromFile('65ca57.jpg'); //imagen que guardo, esto solo es temporal la idea es escanear el documento y guardarlo.
imgFoto.Stretch:=TRUE; //imgFoto es un componente TImage que permita visualizar la imagen que se almacena
with DM1.QueryDM do
begin
Close;
SQL.Clear;
xSQL := ' Insert into repositorio (IDAlmacen,Anio,NoFacReq,Titulo,Imagen) ';
xSQL := xSQL + ' Values (0,"2011","'+EditNumSalida.Text+'","descipcion de documento",:xDocumento)'; //EditNumSalida es el folio que asigno a la imagen para despues recuperar
SQL.Add(xSQL);
ParamByName('xDocumento').DataType := ftBlob; //se supone indico al campo blob que la imagen es blob
ParamByName('xDocumento').LoadFromFile('65ca57.jpg', ftBlob); //cargo la imagen en campo blob
ExecSQL; // ejecuto el SQL
end;
end;
CODIGO USADO PARA RECUPERAR LA IMAGEN DESDE CAMPO BLOB de MySQL
procedure TFormDigitaVale.Button2Click(Sender: TObject);
var
imgJPG:TJpegImage;
blobF:TBlobField;
// Jpeg:TJpegImage;
Corriente:TMemoryStream;
fs : TMemoryStream;
xSQl:String;
begin
imgJPG := TJpegImage.create;
with DM1.QueryRepositorio do begin
SQL.Clear;
SQL.Add('SELECT * FROM repositorio WHERE IDAlmacen= 0
' and anio=2011 and NoFacReq='+EditNumSalida.Text+' ');
Open;
if RecordCount = 1 then begin
(FieldByName('imagen') as TBlobField).SaveToStream(fs);
imgJPG.LoadFromStream(fs);
with DM1.TableRepositorioImagen do begin
imgFoto.Picture.Assign(imgJPG); // imgFOTO es un componente TImage
imgFoto.Visible := True;
ImgFoto.Refresh;
end;
end;
// Close; //Evito cerrar el query que recupera la consulta pensado que se cerraba y que la imagen ya no se visualizaba
end;
fs.Free;
imgJPG.Free;
end;
Valora esta pregunta
0