Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-12-2008
_Willa _Willa is offline
Miembro
 
Registrado: jun 2003
Ubicación: Madrid
Posts: 26
Poder: 0
_Willa Va por buen camino
Lightbulb Recupearr / Grabar Imagenes en SQL Server.

Hola,

Estoy intentando recuperar una imagen guardada en un campo tipo "image" en Sql Server, no se si el tipo de campo es el correcto o usar el tipo
varbinary(MAX).

Despues de varios intentos, creo que esto funciona.
Código:
	Mi_Imagen->Picture->Graphic->SaveToStream(msImagen);
	unsigned int  sizeg=msImagen->Size;
TMemoryStream *msImagen = new TMemoryStream;
	TADOStoredProc *comm = NULL;
	comm = ptSQLBasic->DefineStoredProc("sp_INSERT_Grafico");
		 TParameter *pe=comm->Parameters->CreateParameter("@Grafico",ftBlob,pdInput,0,"");
	pe->Parameters->ParamByName("@Grafico")->LoadFromStream(msImagen,ftBlob);
			comm->ExecProc();
El procedimiento almacenado llamado es "sp_INSERT_Grafico"
Código:
ALTER PROCEDURE [dbo].[sp_INSERT_Grafico]
(
		@Grafico  varbinary(MAX)
)
AS BEGIN
   UPDATE tbl_Ficha SET FOTO=@Grafico
END
Pero la parte de la recuperacion de la imagen no funciona!!.
no se, de que forma se le asigna al la imagen.

alguna idea ? de como se puede recuperar la imagen, usando un proc. con cursor o con paso de parametros ?
Responder Con Cita
  #2  
Antiguo 17-12-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
No me suena el tipo image en SqlServer, utilizas la versión 2008?


A mi me ha funcionado perfecto usando el tipo blob.

Saludos
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #3  
Antiguo 31-12-2008
petete2008 petete2008 is offline
Miembro
 
Registrado: oct 2008
Posts: 109
Poder: 16
petete2008 Va por buen camino
Yo uso sql server 2005 y el tipo de campo es IMAGE como han comentado.
Yo tengo el mismo problema. No se como almacenar una imagen en mi BD desde delphi 7
Responder Con Cita
  #4  
Antiguo 29-08-2010
Avatar de TheJHorse
TheJHorse TheJHorse is offline
Miembro
 
Registrado: dic 2005
Posts: 13
Poder: 0
TheJHorse Va por buen camino
thejhorse's solution

Un poco tarde tal vez la solucion, pero no deseo dejar este problema sin alguna opcion para resolverlo.

En SQL Server 2000
Estructura de la base de datos "db_prueba":
Código SQL [-]
CREATE TABLE tbl_prueba
(
  codigo INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
  datos  IMAGE
)

un Store procedure, para almacenar datos:
Código SQL [-]
CREATE PROCEDURE spNuevaImagen
  @imgData  IMAGE,
  @iRetorno INT OUTPUT
AS
  INSERT INTO tbl_prueba (datos) VALUES (@imgData)

  SET @iRetorno = @@IDENTITY
GO

En la aplicacion Delphi
Usamos:
Código Delphi [-]
// Agregar DBTables, DB

acConeccion: TADOConnection;
spProcedimiento: TADOStoredProc;
txtImagenTif: TEdit;
btnGuardarImagen: TButton;;
Image1: TImage;
btnCargarImagen: TButton;

Para almacenar la imagen
Código Delphi [-]
procedure TForm1.btnGuardarImagenClick(Sender: TObject);
var
  iResultado: Integer;
  CampoBlob : TStream;
begin
  btnGuardarImagen.Enabled := False;

  // Cambiar Nombre de usuario de la base de datos, su password, servidor SQL
  acConeccion.ConnectionString := 'Provider=SQLNCLI.1;Persist Security Info=False;User ID=NOMBREUSUARIO;Password=TUPASSWORD;Initial Catalog=db_prueba;Data Source=.';

  try
    acConeccion.Open();
  except
    Application.Terminate();
  end;

  spProcedimiento.Close;
  spProcedimiento.Prepared := false;
  spProcedimiento.ProcedureName := 'spNuevaImagen';
  spProcedimiento.Parameters.Refresh;

  spProcedimiento.Parameters.ParamByName('@imgData').LoadFromFile(txtImagenTif.Text, ftBlob);
  spProcedimiento.Parameters.ParamByName('@iRetorno').Value := 0;
  spProcedimiento.Prepared := true;
  spProcedimiento.ExecProc();

  // iResultado almacena el codigo que se creo
  iResultado := spProcedimiento.Parameters.ParamByName('@iRetorno').Value;

  acConeccion.Close();

  btnGuardarImagen.Enabled := True;
end;

Para cargar la imagen:
Código Delphi [-]
procedure TForm1.btnCargarImagenClick(Sender: TObject);
var
  rsDocumentos: TADOQuery;
  blob: TStream;
begin
  // Cambiar Nombre de usuario de la base de datos, su password, servidor SQL
  acConeccion.ConnectionString := 'Provider=SQLNCLI.1;Persist Security Info=False;User ID=NOMBREUSUARIO;Password=TUPASSWORD;Initial Catalog=db_prueba;Data Source=.';

  try
    acConeccion.Open();
  except
    Application.Terminate();
  end;

  rsDocumentos := TADOQuery.Create(Self);

  rsDocumentos.Connection := acConeccion;
  rsDocumentos.Active := False;
  rsDocumentos.SQL.Text := ' SELECT * FROM tbl_prueba WHERE codigo = 1';
  rsDocumentos.Active := True;

  rsDocumentos.First();

  while (not rsDocumentos.Eof) do
  begin
    blob := rsDocumentos.CreateBlobStream(rsDocumentos.FieldByName('datos'), bmRead);
    try
      // Mostramos la imagen
      blob.Seek(0, soFromBeginning);
      Image1.Picture.Graphic.LoadFromStream(blob);

      // Guardamos los datos en disco
      blob.Seek(0, soFromBeginning);

      with TFileStream.Create('c:\archivox.jpg', fmCreate) do
      try
        CopyFrom(blob, blob.Size)
      finally
        Free
      end;
    finally
      blob.Free
    end;

    rsDocumentos.Next();
  end;

  rsDocumentos.Close();
  rsDocumentos.Free();
  acConeccion.Close();
end;

Bueno si vas a usar imagenes JPG, ten en cuenta que debes cargar una imagen JPG en el control Image1, en tiempo de diseño, ya que si no lo haces te saldra error al cargar la imagen de Stream en run time.

Última edición por TheJHorse fecha: 29-08-2010 a las 19:07:33.
Responder Con Cita
  #5  
Antiguo 30-08-2010
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Mira este link haber si te sirve.
http://www.clubdelphi.com/foros/showthread.php?t=68872
Un saludo
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
grabar imagen en base de datos sql server 7 didier SQL 3 31-12-2008 18:41:36
Grabar un RichEdit con formato en SQL Server josejm SQL 3 25-03-2008 15:11:48
grabar imagen en base de datos sql server 7 didier Internet 0 24-05-2005 16:12:57
Grabar imagenes grandes en la base de datos... uper Firebird e Interbase 1 04-04-2005 19:46:53
grabar imagenes tdbimage Jorge Taveras Gráficos 0 10-02-2005 01:58:23


La franja horaria es GMT +2. Ahora son las 20:50:59.


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