Tuesday, 25 November 2008

Trabajando con Blob Objects en MySQL y Delphi 2007


Para poder trabajar con blob objects desde MySQL con delphi, primero podemos ver como se configura la conexión con un post que ya subí anteriormente. Una vez tenemos la BD de prueba con la que testear, creo una tabla que Prueba_blob, donde crearé un campo de tipo Blob, y luego almacenaré una imagen. (Podemos almacenar lo que queramos, ya sean documentos, textos largos, imagenes o vídeos, ya que este tipo de registros nos lo permite).
La descripción de un Blob, la podemos encontrar en la wikipedia.
El ejemplo que propongo es bastante sencillo, subiré las imágenes en jpeg, y las iré mostrando en una grid (en este caso en una QuantumGrid de DevExpress).
  • Creando la tabla en MySQL.
Create Table prueba_Blob (
ID int,
nombre Varchar(50),

Blob_col BLOB);


  • Resultado de la aplicación.


El código tanto para subir como para descargar la imágen es bastante sencillo, aquí os dejo el código de mis pruebas:




procedure TForm1.SubirImagen(Sender: TObject);
var
sFile: string;
begin
if opdlg.Execute then
begin
if not (cdsBlob.State in [dsEdit, dsInsert]) then
cdsBlob.Edit;
cdsBlob.Append;
sFile := ExtractFileName(opdlg.FileName);
if AnsiUpperCase(ExtractFileExt(
sFile)) = AnsiUpperCase('.jpg') then
begin
cdsBlobId.AsInteger := GetMaxId;
cdsBlobBlob.LoadFromFile(opdlg.FileName);
cdsBlobNom.AsString :=
sFile;
cdsBlob.Post;
end
else
ShowMessage('Imposible subir fichero');
end;
end;

procedure TForm1.DescargarImagen(Sender: TObject);
var
sFile: string;
begin
if cdsBlobNom.AsString <> '' then
begin
sFile := 'c:\temporal\' + 'BLob_' + cdsBlobId.AsString + '_';
sFile := sFile + cdsBLobNom.AsString;
cdsBLobBLob.SaveToFile(sFitxerTemp);
try
ShellExecute(self.handle, 'Open', PChar(
sFile), nil, nil, SW_SHOW);
except
ShowMessage('No se puede abrir');
end;
end;
end;



Aquí podemos ver los 2 métodos, tanto para subir la imagen como para descargarla. La función GetMaxID, devuelve el último identificador de la BD, solo hace un SELECT MAX(ID). Al subir una imagen, se abre un Open Dialog que selecciona una imagen jpeg.

0 comments:

Post a Comment