PDA

Ver la Versión Completa : como declarar Clases que almacenen imagenes


morfeo21
06-09-2006, 17:54:05
hola a todos. estoy realizando la creacion de una interfaz en delphi el cual almacena informacion en una tabla de bd interbase. La tabla la e llamado articuloImagen y en su estructura tiene un campo de tipo blob ,algo asi:


CREATE TABLE ARTICULOIMAGEN
(
"TIPINV" INTEGER NOT NULL,
"CODART" VARCHAR(40) NOT NULL,
"CODIMG" INTEGER NOT NULL,
"DIRIMG" VARCHAR(150),
"IMAGEN" BLOB SUB_TYPE 0 SEGMENT SIZE 80,
"FORMATO" VARCHAR(3),
)


lo particular en esto es que en la interfaz , utilizo componentes standar ; que luego los verifico bajandolo hacia una clase , que mantiene la misma estructura , pero el problema es que no se como declarar en mi clase el cambo imagen. lo que he hecho no me a resultado. alguien sabe como poder realizar esto?


Tart_imagen = Class
Private
ptipinv :integer;
pcodart :string;
pcodimg :integer;
pdirimg :string;
pimagen :TBlobData;
pformato :Variant;
Public
Property tipinv :integer read ptipinv write ptipinv;
Property codart :string read pcodart write pcodart;
Property codimg :integer read pcodimg write pcodimg;
Property dirimg :string read pdirimg write pdirimg;
Property imagen :tblobdata read pimagen write pimagen;
Property formato :string read pformato write pformato;
Constructor Create;
procedure Clear;
end;

constructor Tart_imagen.Create;
begin
inherited;
Clear;
end;

procedure Tart_imagen.Clear;
begin
tipinv:=0;
codart:='';
codimg:=0;
dirimg:='';
imagen:=nil;
formato:='';
end;

function GetArticulo_imagen(Conexion:TADOConnection;Articulo_imagen:Tart_imagen):boolean;
var
sw : Boolean;
PArtImagen : TADODataSet;
begin
Sw:=False;
PArtImagen := TADODataSet.Create(nil);
PArtImagen.Connection:=Conexion;
PArtImagen.CommandText:=' Select tipinv,codart,codimg,dirimg,imagen,formato'+
' from art_imagen '+
' where tipinv = : p01 and Codart = : p02 and Codimg = : p03 ';
PArtImagen.Parameters.ParamByName('p01').Value:=Articulo_imagen.tipinv;
PArtImagen.Parameters.ParamByName('p02').Value:=Articulo_imagen.codart;
PArtImagen.Parameters.ParamByName('p03').Value:=Articulo_imagen.codimg;
PArtImagen.Open;
PArtImagen.First;
if not(PArtImagen.Eof) then
begin
Articulo_imagen.tipinv :=PArtImagen.FieldByName('tipinv').Value;
Articulo_imagen.codart :=PArtImagen.FieldByName('codart').Value;
Articulo_imagen.codimg :=PArtImagen.FieldByName('codesp').Value;
Articulo_imagen.dirimg :=PArtImagen.FieldByName('dirimg').Value;
Articulo_imagen.imagen :=PArtImagen.FieldByName('imagen').Value;
Articulo_imagen.formato :=PArtImagen.FieldByName('formato').Value;
SW:=True;
end;
PArtImagen.Close;
PArtImagen.Free;
Result:=sw;
end;


nota : si me dieran alguna recomendacion adicional, se los agradeceria mucho. gracias:o

chalitox
06-09-2006, 21:18:12
a ver si entendi? -> Vos lo que queres hacer es traer una imagen de la DB y tenerla en una clase.

Jonnathan
06-09-2006, 21:20:41
Hola morfeo21, hace un tiempo vi un componente donde almacenaban una imagen de una base de datos en un campo de tipo TPicture. Para asignarlo sería algo como:
Código Delphi [-] (http://www.clubdelphi.com/foros/#)... Private ptipinv :integer; pcodart :string; pcodimg :integer; pdirimg :string; pimagen :TPicture; pformato :Variant; ... Property imagen :tPicture read pimagen write pimagen; ... //Mas abajo a la hora de asignarlo if not(PArtImagen.Eof) then begin Articulo_imagen.tipinv := PArtImagen.FieldByName('tipinv').Value; Articulo_imagen.codart := PArtImagen.FieldByName('codart').Value; Articulo_imagen.codimg := PArtImagen.FieldByName('codesp').Value; Articulo_imagen.dirimg := PArtImagen.FieldByName('dirimg').Value; Articulo_imagen.imagen.Assign(PArtImagen.FieldByName('imagen').Value); Articulo_imagen.formato :=PArtImagen.FieldByName('formato').Value; SW:=True; end;

Tambien tendrías que crear y destruir ese objeto TPicture junto con tu componente. Pruébalo a ver si te funciona asi.

Jonnathan
06-09-2006, 21:26:24
Perdon por el mensaje repetido y el mal formato, creo que tengo problemas con mi navegador, si algún moderador lo puede arreglar... :(

jachguate
06-09-2006, 21:38:29
Podes borrarlos vos mismo... le das en Editar, y luego Borrar.

Saludos.

;)

bismarck_sierra
07-09-2006, 00:31:56
Que tal

Te paso unas modificaciones, con esto te debe funcionar, haber que tal te parece.


Tart_imagen = Class
Private
ptipinv :integer;
pcodart :string;
pcodimg :integer;
pdirimg :string;
pformato :Variant;
strImagen: TMemoryStream;
Public
Property tipinv :integer read ptipinv write ptipinv;
Property codart :string read pcodart write pcodart;
Property codimg :integer read pcodimg write pcodimg;
Property dirimg :string read pdirimg write pdirimg;
Property imagen :tblobdata read pimagen write pimagen;
Property formato :string read pformato write pformato;
property Imagen: TMemoryStream read strImagen write strImagen;
Constructor Create;
procedure Clear;
end;

constructor Tart_imagen.Create;
begin
inherited;
strImagen:= TMemoryStream.Create;
Clear;
end;

procedure Tart_imagen.Clear;
begin
tipinv:=0;
codart:='';
codimg:=0;
dirimg:='';
imagen:=nil;
formato:='';
strImagen.Clear;
end;

function GetArticulo_imagen(Conexion:TADOConnection;Articulo_imagen:Tart_imagen):boolean;
var
sw : Boolean;
PArtImagen : TADODataSet;
fldCampo: TField;
begin
Sw:=False;
PArtImagen := TADODataSet.Create(nil);
PArtImagen.Connection:=Conexion;
PArtImagen.CommandText:=' Select tipinv,codart,codimg,dirimg,imagen,formato'+
' from art_imagen '+
' where tipinv = : p01 and Codart = : p02 and Codimg = : p03 ';
PArtImagen.Parameters.ParamByName('p01').Value:=Articulo_imagen.tipinv;
PArtImagen.Parameters.ParamByName('p02').Value:=Articulo_imagen.codart;
PArtImagen.Parameters.ParamByName('p03').Value:=Articulo_imagen.codimg;
PArtImagen.Open;
PArtImagen.First;
if not(PArtImagen.Eof) then
begin
Articulo_imagen.tipinv :=PArtImagen.FieldByName('tipinv').Value;
Articulo_imagen.codart :=PArtImagen.FieldByName('codart').Value;
Articulo_imagen.codimg :=PArtImagen.FieldByName('codesp').Value;
Articulo_imagen.dirimg :=PArtImagen.FieldByName('dirimg').Value;
Articulo_imagen.formato :=PArtImagen.FieldByName('formato').Value;
fldCampo:= FieldByName('imagen');
Articulo_imagen.strImagen:= CreateBlobStream(fldCampo, bmRead);
SW:=True;
end;
PArtImagen.Close;
PArtImagen.Free;
Result:=sw;
end;

morfeo21
08-09-2006, 16:43:58
Gracias por la pronta respuesta por parte de todos Uds. se los agradesco mucho. Realizare las pruebas pertinentes ahora mismo