Delphi - JPG en BD

 
Vista:

JPG en BD

Publicado por Hector (39 intervenciones) el 01/02/2009 01:59:07
Como cargar un JPG en una BD
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:JPG en BD

Publicado por Eva (484 intervenciones) el 01/02/2009 23:43:54
Para una base de datos FireBird

Creas un campo blob para guardar la foto y otro de texto para guardar el formato que tiene la foto (en el ejemplo podrás guardar jpg y bmp

Para visualizarla pones un TImage.

//cargar foto
//en el evento OnClick de un botón o de un popupmenu
procedure TFAlumnos.Cargarfoto1Click(Sender: TObject);
var
m, f: TStream;
s: string;
begin
//se abre picturedialog para cargar fichero foto que se coja
if dlgOpenPicture.Execute then
begin
//modo edición
DM.IBDSAlumnos.Edit;
//stream a partir campo Blob que contendrá la imagen
m:= DM.IBDSAlumnos.CreateBlobStream(DM.IBDSAlumnosFOTO, bmWrite);
//stream para acceder al archivo gráfico
f:= TFileStream.Create(dlgOpenPicture.filename, fmOpenRead);
//copiar de un stream a otro
m.CopyFrom(f, f.Size);
//coger formato foto y ponerlo en campo correspondiente
s:= AnsiUpperCase(ExtractFileExt(dlgOpenPicture.FileName));
if s='.JPEG' then
s:= '.JPG';
DM.IBDSAlumnosFORMATOFOTO.AsString:= Copy(s,2,3);
DM.IBDSAlumnos.Post;
DM.IBDSAlumnos.Edit;
DM.IBT.CommitRetaining;
//destruir streams
f.Free;
m.Free;
end
end;

//borrar foto
//en el evento OnClick de un botón o de un popupmenu
procedure TFAlumnos.Borrarfoto1Click(Sender: TObject);
begin
if Application.MessageBox('¿Seguro que desea borrar esta foto?','Alumnos',mb_OkCancel+mb_IconQuestion)= IdOk then
begin
//borrar imangen
ImageFoto.Picture.Assign(nil);
ImgFoto.Picture.Assign(nil);
//borrar foto del campo blob
if (DM.IBDSAlumnos.State <> dsEdit) and (DM.IBDSAlumnos.State <> dsInsert) then
DM.IBDSAlumnos.Edit;
DM.IBDSAlumnosFOTO.Assign(nil);
DM.IBDSAlumnos.Post;
DM.IBDSAlumnos.Edit;
DM.IBT.CommitRetaining;
end;
end;

//visualizar foto
//en el evento on change del DataSource
procedure TFAlumnos.DSAlumFotoEDataChange(Sender: TObject; Field: TField);
var
m : TStream;
begin
//visualizar foto
if DM.IBDSAlumnosFOTO.IsNull then
//para registros sin foto poner imagen vacia
ImageFoto.Picture := nil
else
begin
if DM.IBDSAlumnosFORMATOFOTO.AsString = 'BMP' then
//si es formato BMP
ImageFoto.Picture.Graphic:= TBitmap.Create
else if DM.IBDSAlumnosFORMATOFOTO.AsString = 'JPG' then
//si es formato JPG
ImageFoto.Picture.Graphic:= TJpegImage.Create
else
Exit;
//copiar los datos desde la tabla con un stream
m:= DM.IBDSAlumnos.CreateBlobStream(DM.IBDSAlumnosFOTO, bmRead);
ImageFoto.Picture.Graphic.LoadFromStream(m);
m.Free;
end;
end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:JPG en BD

Publicado por Hector (39 intervenciones) el 04/02/2009 03:52:27
Mira que intento y no puedo descifrar lo que escribes, recuerda que estoy pidiendo ayuda. por ejemplo

TFAlumnos= Form
Cargarfoto1= Button1

ok eso se deduce pero que me dices de:

DM =
IBDSAlumnos=

No es mas fácil poner los nombres como son Button1, Form o Table para que todos puedan entender pues si uno no sabe y además le vienen con cosas que uno no sabe de dónde sale es una locura. Discúlpame pero puedes ponerlo de una forma legible para todos

Recuerda que el verdadero programador no hace los programas para sí mismo lo hace para el público.

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 65
Oro
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

RE:JPG en BD

Publicado por E.T. (1244 intervenciones) el 04/02/2009 17:13:34
DM = DataModule
IBDS = IBDataSource
IBT = IBTable
Creo que son los componentes IBO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:JPG en BD

Publicado por Eva (484 intervenciones) el 04/02/2009 18:33:47
Lo que va ahora no son reproches, sino aclaraciones, que nadie se ofenda.

- El que pregunta debe procurar aclarar al máximo lo que quiere y dar todo tipo de explicaciones, pues a él es a quien le interesa que le resuelvan la duda.

- El que responde solo intenta ayudar, pero no sabe el nivel que tiene el que pregunta. A veces he explicado muy detalladamente algunas cosas a aguien que no era necesario, perdiendo yo el tiempo y él leyendolo, por eso, y porque hay veces que no se tiene tanto tiempo o tantas ganes en ese momento se da una solución que se cree válida.

- El que pregunta, si a la primera no entiende, vuelve a preguntar que le aclaren algo y ya está, no pasa nada.

.....

Ahora sobre lo que me dices:

>>Recuerda que el verdadero programador no hace los programas para sí mismo lo hace para el público.

El programa sí se hace para el público, pero las fuentes del programa no se hacen para el público, excepto si son para la enseñanza. Si se trabaja en equipo si que habrá que seguir unas normas, en caso contrario es aconsejable pero no necesario. Y lo más importante, soy programador porque programo, pero no soy profesional programador, mi profesión es otra, programo solo, no en equipo, y los programas que hago son para mí.

>>No es mas fácil poner los nombres como son Button1, Form o Table para que todos puedan entender pues si uno no sabe y además le vienen con cosas que uno no sabe de dónde sale es una locura.

Como te digo antes, pongo los nombres para mí solo y los entiendo perfectamente. Ese código no lo he escrito para este foro, lo tengo yo en una aplicación y lo único que hice fué copiarlo y pegarlo para ayudar. Además Button1 dice poco, imagínate que tienes 50 botones, a ver lo que te dicen Button1, Button2, etc., en todo caso sería BotonGuardar, BotónBorrar, etc., que es en realidad lo que yo hago, pero la primera parte con iniciales IBDS: InterBaseBoton, DM: InterBaseDataModulo, DS: DataSource, etc.

>>Discúlpame pero puedes ponerlo de una forma legible para todos

No hay ningún problema, ahí va:

dlgOpenPicture: un picturedialog (lo aclaro en la línea anterior)
DM: un DataModule
IBDSAlumnos: DataSet que le pongo de nombre Alumnos para distinguierle claramente de otros (con componentes IBX [InterBaseDataSetAlumnos])
IBT: una transación (se ve por el CommitRetaining [InterBaseTransation)
ImageFoto: un TImage
IBDSAlumnosFOTO: el campo FOTO [InterBaseDataSetAlumnosFOTO]
IBDSAlumnosFORMATOFOTO: el campo FORMATOFOTO [InterBaseDataSetAlumnosFORMATOFOTO]

Si tenes más dudas sigue preguntando.

Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:JPG en BD

Publicado por Hector (39 intervenciones) el 04/02/2009 20:35:55
Eva disculpa por todo, no quise ni por asombro ofender. Pero tienes algún correo donde pueda mandarte el programa para que le eches un vistazo y me digas como solucionar unas inquietudes que tengo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:JPG en BD

Publicado por Eva (484 intervenciones) el 04/02/2009 22:27:06
Si tienes dudas pregunta en el foro, hay muchos foristas que son programadores y saben muchisimo y pueden ayudarte más que yo que apenas se cuatro cosas, y de paso todo el mundo puede aprender.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:JPG en BD

Publicado por Hector (39 intervenciones) el 05/02/2009 02:06:57
OK gracias de todos modos. suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:JPG en BD

Publicado por Hector (39 intervenciones) el 05/02/2009 05:48:04
Hola
Mira he podido cambiar algunas cosas revisa y dime si están bien pro tengo dunas en tres lugares, además el IBT si es un componente no me funciona pues el delphi 7 que tengo me error al instalarlo, me sale en la paleta de delphi ya instalado pero no me deja usarlo espero que no sea el componente.
dudas = (())
procedure TForm3.Button1Click(Sender: TObject);
var
m, f: TStream;
s: string;
begin
//se abre picturedialog para cargar fichero foto que se coja
if OpenPictureDialog1.Execute then
begin
//modo edición
Datasource1.dataset.Edit;
//stream a partir campo Blob que contendrá la imagen
m:= Datasource1.dataset.CreateBlobStream(Datasource1.((DM.IBDSAlumnosFOTO)), bmWrite);
//stream para acceder al archivo gráfico
f:= TFileStream.Create(OpenPictureDialog1.filename, fmOpenRead);
//copiar de un stream a otro
m.CopyFrom(f, f.Size);
//coger formato foto y ponerlo en campo correspondiente
s:= AnsiUpperCase(ExtractFileExt(OpenPictureDialog1.FileName));
if s='.JPEG' then
s:= '.JPG';
Datasource1.((IBDSAlumnosFORMATOFOTO)).AsString:= Copy(s,2,3);
Datasource1.dataset.Post;
Datasource1.dataset.Edit;
Datasource1.((IBT.CommitRetaining));
//destruir streams
f.Free;
m.Free;
end
end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:JPG en BD

Publicado por Eva (484 intervenciones) el 05/02/2009 20:49:36
¿Qué base de datos estás usando?, porque esto lo hice para FireBird.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:JPG en BD

Publicado por Hector (39 intervenciones) el 05/02/2009 21:37:47
no se bien del tipo solo se que es la que se hace con delphi en Database Desktop Paradox 7
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 65
Oro
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

RE:JPG en BD

Publicado por E.T. (1244 intervenciones) el 06/02/2009 20:34:30
En paradox alguna vez utilicé esta linea

TablaFotos.FieldByName('foto').Assign(Image1.Picture);

EL campo foto es tipo graphic
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:JPG en BD

Publicado por Eva (484 intervenciones) el 06/02/2009 21:09:50
Como te dije, esto está hecho para FireBird, con componentes InterBase, que para Paradox creo que no sirven. Transaciones creo que no hay en Paradox por ejemplo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar