Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-11-2022
steelha steelha is offline
Miembro
 
Registrado: mar 2012
Posts: 158
Poder: 13
steelha Va por buen camino
Ayuda Error Campo tipo Imagen SQL

Buenas, espero todos estén bien. Tengo una tabla (PACIETNES) en la cual tengo un campo (pxfoto) de tipo IMAGE, esto es en SQL SERVE 2014 utilizando Delphi XE7/10. Tengo los siguientes procedimientos :

Código Delphi [-]
procedure TfrmPacientes.cargar_imagen;
Var
  bmp: TBitmap; Stream: TStream;
  bs      : TMemoryStream;
begin
  with DM.QryPacientes do
  begin
     Stream := dm.QryPacientes.CreateBlobStream(dm.QryPacientes.FieldByName('pxfoto'), bmWrite);
     imgfoto.Picture.Graphic.SaveToStream(Stream);
     Stream.Free;
  end;
end;

Código Delphi [-]
procedure TfrmPacientes.mostrar_imagen;
var
  Stream: TStream;
begin
  Stream := dm.QryPacientes.CreateBlobStream(dm.QryPacientes.FieldByName('pxfoto'), bmRead);
  Stream.Seek(0, soFromBeginning);
  imgfoto.Picture.Graphic.LoadFromStream(Stream);
  Stream.Destroy;
end;

Al guardar el campo no tengo problema, incluso veo que el campo pasa de null a <Datos binarios>, pero cuando quiero mostrar la imagen justo en donde marque como rojo da un error. lo intente con bitmap y da mensaje de error de bitmap no valid; si lo dejo con graphic da un error adress violation adress 00700EDA.

Si pueden ayudarme con este problema. se los agradecere.
Responder Con Cita
  #2  
Antiguo 23-11-2022
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Yo cargo así las imágenes con el siguiente procedimiento.
Supongo que en tu caso Formato debería ser 'BMP'.
Lo importante es que creo un bitmap para leer el stream. Luego asigno ese Bitmap a la imagen.

Código Delphi [-]
/// Imagen es un componente tipo TImage en el formulario.
/// Stream es un stream que leo de un campo BLOB que contiene una imagen.
/// Formato es el tipo de codificacion de la imagen.

procedure TDMMain.CargarImagenDeStream(Imagen: TImage; Stream: TStream; Formato: string);
var
  BMP : TBitMap;
  JPG : TJpegImage;
  GIF : TGIFImage;
  PNG : TPNGGraphic;
begin
  if Formato = 'BMP' then
  begin
     BMP := TBitmap.Create;
     try
        BMP.LoadFromStream(Stream);
        Imagen.Picture.Assign(BMP);
     finally
        BMP.Free;
     end;
  end
  else
  if Formato = 'JPG' then
  begin
     JPG := TJpegImage.Create;
     try
        JPG.LoadFromStream(Stream);

        BMP := TBitmap.Create;
        try
           BMP.Assign(JPG);
           Imagen.Picture.Assign(BMP);
        finally
           BMP.Free;
        end;
     finally
        JPG.Free;
     end;
  end
  else
  if Formato = 'GIF' then
  begin
     GIF := TGIFImage.Create;
     try
        GIF.LoadFromStream(Stream);
        Imagen.Picture.Assign(GIF);
     finally
        GIF.Free;
     end;
  end
  else
  if Formato = 'PNG' then
  begin
     PNG := TPNGGraphic.Create;
     try
        PNG.LoadFromStream(Stream);
        Imagen.Picture.Assign(PNG);
     finally
        PNG.Free;
     end;
  end;
end;
Responder Con Cita
  #3  
Antiguo 23-11-2022
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Recuerda también utilizar bloques TRY..FINALLY para evitar que queden cosas abiertas si algo falla.

Código Delphi [-]
procedure TfrmPacientes.cargar_imagen;
Var
  bmp: TBitmap; Stream: TStream;
  bs      : TMemoryStream;
begin
  with DM.QryPacientes do
  begin
     Stream := dm.QryPacientes.CreateBlobStream(dm.QryPacientes.FieldByName('pxfoto'), bmWrite);
     try {<---}
        imgfoto.Picture.Graphic.SaveToStream(Stream);
     finally {<---}
        Stream.Free;
     end; {<---}
  end;
end;

procedure TfrmPacientes.mostrar_imagen;
var
  Stream: TStream;
begin
  Stream := dm.QryPacientes.CreateBlobStream(dm.QryPacientes.FieldByName('pxfoto'), bmRead);
  try {<---}
     try {<---}
        Stream.Seek(0, soFromBeginning);
        imgfoto.Picture.Graphic.LoadFromStream(Stream);
     except {<---}
       // Si falla limpio la foto para que no quede la anterior
       imgfoto.Picture := nil;
     end; {<---}
  finally {<---}
     Stream.Free;
  end; {<---}
end;
Responder Con Cita
  #4  
Antiguo 23-11-2022
steelha steelha is offline
Miembro
 
Registrado: mar 2012
Posts: 158
Poder: 13
steelha Va por buen camino
Muchas gracias duilioisola, copie el codigo que me mandaste y aun asi me daba el mismo error. Cambie el Graphic por bitmap y funciono. dejo código por si lo necesitan.
Código Delphi [-]
procedure TfrmPacientes.cargar_imagen;
Var
  bmp: TBitmap; Stream: TStream;
  bs      : TMemoryStream;
begin
  with DM.QryPacientes do
  begin
     Stream := dm.QryPacientes.CreateBlobStream(dm.QryPacientes.FieldByName('pxfoto'), bmWrite);
     try
        imgfoto.Picture.Bitmap.SaveToStream(Stream);
     finally
        Stream.Free;
     end;
  end;
end;

Código Delphi [-]
procedure TfrmPacientes.mostrar_imagen;
var
  Stream: TStream;
begin
  Stream := dm.QryPacientes.CreateBlobStream(dm.QryPacientes.FieldByName('pxfoto'), bmRead);
  try
     try
        Stream.Seek(0, soFromBeginning);
        imgfoto.Picture.Bitmap.LoadFromStream(Stream);
     except
       // Si falla limpio la foto para que no quede la anterior
       imgfoto.Picture := nil;
     end;
  finally
     Stream.Free;
  end;
end;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Guardar Imagen de un TImage a un campo tipo image en sql server Mechita MS SQL Server 1 19-12-2013 09:34:33
Almacenar una Imagen en un campo Tipo Blob Mysql adeszeus MySQL 1 19-06-2010 01:46:59
Ayuda con campo del tipo fkLookup slayer6969 Conexión con bases de datos 5 23-06-2005 16:21:46
Imagen Tipo Tiff, Ocr, Un Error!! liz_hilton Gráficos 5 12-04-2005 18:55:11
Error en update campo tipo fecha dridly SQL 1 24-09-2004 14:27:37


La franja horaria es GMT +2. Ahora son las 16:00:05.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi