Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-02-2018
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: May 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 18
BlueSteel Va por buen camino
Guardar Imagen en SQL

Holas

Ando medio lento y necesito vuestra ayudita...

Quiero almacenar una imagen en un base de datos de SQL. Campo de tipo Image

Quiero traspasar la imagen que esta en un componente TImagen (sFot)
Cargue la foto en el TImagen con componente TOpenPictureDialog

Aqui el proceso para guardar el registro, en donde tambien quiero guardar la foto

DM_Datos : Formulario tipo DataModule
AQ_Insert : AdoQuery

Código Delphi [-]
     DM_Datos.AQ_Insert.Close;
     DM_Datos.AQ_Insert.SQL.Clear;
     DM_Datos.AQ_Insert.SQL.Add('Insert Into Socio(Soc_Rut,Soc_Nombre,Soc_APaterno,Soc_AMaterno,Soc_FecNac,Soc_Estado,Soc_Direccion,Soc_Poblacion  ,Soc_Comuna,Soc_Telefono,Soc_Celular,Soc_Email,Id_TipoSocio,Id_Categoria,Soc_FechaIngreso,Soc_Foto)'  );
     DM_Datos.AQ_Insert.SQL.Add('Values (:v01, :v02, :v03, :v04, :v05, :v06, :v07, :v08, :v09, :v10, :v11, :v12, :v13, :v14, :v15, :v16)');
     DM_Datos.AQ_Insert.Parameters[0].Value   := sRut.Text;
     DM_Datos.AQ_Insert.Parameters[1].Value   := sNom.Text;
     DM_Datos.AQ_Insert.Parameters[2].Value   := sPat.Text;
     DM_Datos.AQ_Insert.Parameters[3].Value   := sMat.Text;
     DM_Datos.AQ_Insert.Parameters[4].Value   := sNac.Date;
     DM_Datos.AQ_Insert.Parameters[5].Value   := 1;
     DM_Datos.AQ_Insert.Parameters[6].Value   := sDir.Text;
     DM_Datos.AQ_Insert.Parameters[7].Value   := sPob.Text;
     DM_Datos.AQ_Insert.Parameters[8].Value   := sCom.Text;
     DM_Datos.AQ_Insert.Parameters[9].Value   := sTel.Text;
     DM_Datos.AQ_Insert.Parameters[10].Value  := sCel.Text;
     DM_Datos.AQ_Insert.Parameters[11].Value  := sMai.Text;
     DM_Datos.AQ_Insert.Parameters[12].Value  := DM_Datos.AQ_Tipo.FieldByName('Id_TipSocio').Value;
     DM_Datos.AQ_Insert.Parameters[13].Value  := DM_Datos.AQ_Categoria.FieldByName('Id_Categoria').Value;
     DM_Datos.AQ_Insert.Parameters[14].Value  := sIng.date;
    // Hasta aqui, todo funciona bien,me almacena, solo agregue ahora guardar la foto


     // La siguiente linea es donde quiero traspasar la Foto a la Tabla
     DM_Datos.AQ_Insert.Parameters[15].Value  :=  sFot.Picture. // en realidad no se como definir.. 

     DM_Datos.AQ_Insert.ExecSQL;

revise los foros y encontre lo siguiente, pero no lo entendi
Código Delphi [-]
procedure GuardarImagen(Imagen: TImage);
var
  StreamImagen: TStream;
begin
  qry := crear tu componente query 
  qry.Connection := le asignas la conexion
  qry.SQL.Text := 'INSERT INTO TABLA (CampoImagen) VALUES (:CampoImagen)';
  StreamImagen := TMemoryStream.Create;
  try
     Imagen.SaveToStream(StreamImagen);
    StreamImagen.Position := 0;
    qry.ParamByName('CampoImagen').AsSteam := StreamImagen;
    // puede ser en lugar de .AsSteam, .Value, o .LoadFromStream; depende de los componentes
    qry.Execute;
  finally
   StreamImagen.Free;
  end;
end
__________________
BlueSteel
Responder Con Cita
  #2  
Antiguo 22-02-2018
oscorm oscorm is offline
Miembro
 
Registrado: Aug 2004
Ubicación: Hospitalet de Llobregat
Posts: 45
Poder: 0
oscorm Va por buen camino
Prueba:
DM_Datos.AQ_Insert.Parameters[15].LoadFromFile('c:\sample.jpg', ftBlob);
donde 'c:\sample.jpg' es el fichero que tiene la foto
Responder Con Cita
  #3  
Antiguo 22-02-2018
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: May 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 18
BlueSteel Va por buen camino
Cita:
Empezado por oscorm Ver Mensaje
Prueba:
DM_Datos.AQ_Insert.Parameters[15].LoadFromFile('c:\sample.jpg', ftBlob);
donde 'c:\sample.jpg' es el fichero que tiene la foto
Interprete el codigo que me indicas con esto

Código Delphi [-]
     DM_Datos.AQ_Insert.Parameters[15].LoadFromFile(BuscaFoto.filename, ftBlob);

donde BuscaFoto es un componente de tipo OpenPictureDialogo. Lo que tomo de ella es la ruta donde esta ubicada la foto

Ahora el error que me indica es

[dcc32 Error] frmCreaActSocios.pas(143): E2003 Undeclared identifier: 'ftBlob'
__________________
BlueSteel
Responder Con Cita
  #4  
Antiguo 22-02-2018
oscorm oscorm is offline
Miembro
 
Registrado: Aug 2004
Ubicación: Hospitalet de Llobregat
Posts: 45
Poder: 0
oscorm Va por buen camino
Este te deberia funcionar

TBlobField(DM_Datos.AQ_Insert.Parameters[15]).LoadFromFile(BuscaFoto.filename);
Responder Con Cita
  #5  
Antiguo 22-02-2018
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: May 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 18
BlueSteel Va por buen camino
Unhappy

Cita:
Empezado por oscorm Ver Mensaje
Este te deberia funcionar

TBlobField(DM_Datos.AQ_Insert.Parameters[15]).LoadFromFile(BuscaFoto.filename);

me sigue dando error

Código Delphi [-]
     TBlobField(DM_Datos.AQ_Insert.Parameters[15]).LoadFromFile(BuscaFoto.filename);

Error
[dcc32 Error] frmCreaActSocios.pas(143): E2003 Undeclared identifier: 'TBlobField'
[dcc32 Error] frmCreaActSocios.pas(143): E2066 Missing operator or semicolon
__________________
BlueSteel
Responder Con Cita
  #6  
Antiguo 22-02-2018
oscorm oscorm is offline
Miembro
 
Registrado: Aug 2004
Ubicación: Hospitalet de Llobregat
Posts: 45
Poder: 0
oscorm Va por buen camino
TBlobField está definido en la unidad DB o Data.DB dependiendo de la versión de Delphi con la que estés trabajando.
Pon que use esa unit en la parte del uses de interface y debería tirar
Responder Con Cita
  #7  
Antiguo 23-02-2018
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: May 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 18
BlueSteel Va por buen camino
Wink

Cita:
Empezado por oscorm Ver Mensaje
TBlobField está definido en la unidad DB o Data.DB dependiendo de la versión de Delphi con la que estés trabajando.
Pon que use esa unit en la parte del uses de interface y debería tirar
Excelente, ya me funciono


Código Delphi [-]
// Esta linea no funciono. Si bien compila, al momento de guardar genera error
TBlobField(DM_Datos.AQ_Insert.Parameters[15]).LoadFromFile(BuscaFoto.filename);

// Esta linea funciono super...
DM_Datos.AQ_Insert.Parameters[15].LoadFromFile(BuscaFoto.filename, ftBlob);

Gracias
__________________
BlueSteel
Responder Con Cita
  #8  
Antiguo 23-02-2018
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: May 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 18
BlueSteel Va por buen camino
Me faltaría realizar ahora el proceso inverso, es decir, saber como traspaso la foto que esta en la base de datos a un componente de tipo TImage?
__________________
BlueSteel
Responder Con Cita
  #9  
Antiguo 26-02-2018
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: May 2007
Ubicación: Llagostera (Girona)
Posts: 569
Poder: 12
jafera Va por buen camino
Yo lo hago así:

Código Delphi [-]
procedure TF_Material.DBEdit1Change(Sender: TObject);
var
        jpg:TJpegImage;
        foto:TMemoryStream;
begin
        PageControl1.ActivePage := TabSheet1;

        If SysUtils.FileExists('C:\Trens_1.0\Temp\Temporal.jpg') then
        SysUtils.DeleteFile ('C:\Trens_1.0\Temp\Temporal.jpg');

        If F_Moduldades.MaterialFoto.AsString <>'' then
        begin
                Jpg:=TJpegImage.create;
                Foto:=TMemoryStream.create;
                try
                        F_Moduldades.MaterialFoto.SaveToStream(Foto);
                        Foto.Seek(0,soFromBeginning);
                        Jpg.LoadFromStream(Foto);
                        Jpg.SaveToFile('C:\Trens_1.0\Temp\Temporal.jpg');
                        Image1.Picture.Assign(Jpg);
                finally
                        Foto.Free;
                        Jpg.Free;
                end;
        end
        else
                Image1.Picture.Assign(nil);
end;

Saludos
Responder Con Cita
  #10  
Antiguo 26-02-2018
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: May 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 18
BlueSteel Va por buen camino
Cita:
Empezado por jafera Ver Mensaje
Yo lo hago así:

Código Delphi [-]
procedure TF_Material.DBEdit1Change(Sender: TObject);
var
        jpg:TJpegImage;
        foto:TMemoryStream;
begin
        PageControl1.ActivePage := TabSheet1;

        If SysUtils.FileExists('C:\Trens_1.0\Temp\Temporal.jpg') then
        SysUtils.DeleteFile ('C:\Trens_1.0\Temp\Temporal.jpg');

        If F_Moduldades.MaterialFoto.AsString <>'' then
        begin
                Jpg:=TJpegImage.create;
                Foto:=TMemoryStream.create;
                try
                        F_Moduldades.MaterialFoto.SaveToStream(Foto);
                        Foto.Seek(0,soFromBeginning);
                        Jpg.LoadFromStream(Foto);
                        Jpg.SaveToFile('C:\Trens_1.0\Temp\Temporal.jpg');
                        Image1.Picture.Assign(Jpg);
                finally
                        Foto.Free;
                        Jpg.Free;
                end;
        end
        else
                Image1.Picture.Assign(nil);
end;

Saludos
Hola, disculpa,,, con el codigo que indicastes, pasas una foto que esta almacenada en una Tabla del SQL Server al componente TImage???
__________________
BlueSteel
Responder Con Cita
  #11  
Antiguo 26-02-2018
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: May 2007
Ubicación: Llagostera (Girona)
Posts: 569
Poder: 12
jafera Va por buen camino
Si, pero yo utilizo Firebird no se si el SQL que utilizas tu usa los mismos parametros, pero puedes ajustarlo.
Este proceso esta puesto en un DBEdit que al cambiar borra la foto en temporal y recarga la nueva

Saludos
Responder Con Cita
  #12  
Antiguo 27-02-2018
mRoman mRoman is offline
Miembro
 
Registrado: Nov 2003
Posts: 344
Poder: 15
mRoman Va por buen camino
Otra forma

Hola buenas noches BlueSteel

Yo lo hago de esta forma (Lo q esta marcado con rojo, es lo q talvez necesites).

Código Delphi [-]
procedure TfrmProducto.btnGrabarClick(Sender: TObject);
var
   bmp:TBitmap; Stream:TStream;

begin
  inherited;
  try
        if chkBActivar.Checked then
            dsProducto.FieldByName('ACTIVAR_PRODUCTO').AsInteger:=1
        else
            dsProducto.FieldByName('ACTIVAR_PRODUCTO').AsInteger:=0;
        if chkKardex.Checked then
            dsProducto.FieldByName('CONTROL_KARDEX').AsString:='S'
        else
            dsProducto.FieldByName('CONTROL_KARDEX').AsString:='N';
        {Este clave servira para identificar si el producto es subsidiado o comercial,
        utilizando el numero 0 para los productos que son comerciales y el 1 para
        los productos subsidiados.}
        bmp:=TBitmap.Create;
        bmp.Assign(Image1.Picture.Graphic);
        dsProducto.FieldByName('TIPO_PRODUCTO').AsInteger:=cbxTipoProducto.ItemIndex;
        dsProducto.FieldByName('TIPO_LECHE').AsInteger:=cbxTipoLeche.ItemIndex;
        dsProducto.FieldByName('FOTO').Assign(bmp)  //Aqui le asigno la foto al campo de la tabla
        dsProducto.FieldByName('envase').AsString:=cbxEnvase.Text;
        dsProducto.FieldByName('embalaje').AsString:=cbxEmbalaje.Text;
        dsProducto.Post;
        dsProducto.ApplyUpdates;
        modDatos.trsFluida.Commit;
        btnGrabar.Enabled:=False;
        btnEliminar.Enabled:=False;
        btnCancelar.Enabled:=False;
        edClave.Text:='';
        edClave.SetFocus;
  except
        modDatos.trsFluida.Rollback;
        showmessage('Este registro no se puede Grabar');
  end;
end;

Y aqui...la leo de la tabla para q se muestre en un componente TImage
Código Delphi [-]
procedure TfrmProducto.pnlClavesExit(Sender: TObject);
var
i:integer;
begin
  inherited;
  dsProducto.Close;
  dsProducto.ParamByName('CVE_PROD').AsString:=edClave.Text;
  dsProducto.Open;
  if dsProducto.IsEmpty then
  begin
        btnGrabar.Enabled:=True;
        btnEliminar.Enabled:=False;
        btnCancelar.Enabled:=True;
        dsProducto.Append;
        dsProducto.FieldByName('CVE_PRODUCTO').AsString:=edClave.Text;
        GroupBox4.Enabled:=True;
  end Else Begin
        btnGrabar.Enabled:=True;
        btnEliminar.Enabled:=True;
        btnCancelar.Enabled:=True;
        dsProducto.Edit;
        if dsProducto.FieldByName('ACTIVAR_PRODUCTO').AsInteger=1 then
            chkBActivar.Checked:=True
        else
            chkBActivar.Checked:=False;
        if dsProducto.FieldByName('CONTROL_KARDEX').AsString='S' then
            chkKardex.Checked:=True
        else
            chkKardex.Checked:=False; 

        if dsProducto.FieldByName('tipo_producto').AsInteger=0 then
             Panel1.Visible:=True
        else
             Panel1.Visible:=False;

        for i:=0 to cbxEnvase.Items.Count -1 do
        begin
             if cbxEnvase.Items[i]=dsProducto.FieldByName('envase').AsString then
             begin
                  cbxEnvase.ItemIndex:=i;
             end;
        end;

        for i:=0 to cbxEmbalaje.Items.Count -1 do
        begin
             if cbxEmbalaje.Items[i]=dsProducto.FieldByName('embalaje').AsString then
             begin
                  cbxEmbalaje.ItemIndex:=i;
             end;
        end;
        if (dsProducto.FieldByName('stock_inicial').IsNull) or
           (dsProducto.FieldByName('stock_inicial').AsInteger=0) then
        begin
             GroupBox4.Enabled:=True;
        end;
        cbxTipoLeche.ItemIndex:=dsProducto.fieldByName('TIPO_LECHE').AsInteger;
        cbxTipoProducto.ItemIndex:=dsProducto.fieldByName('TIPO_PRODUCTO').AsInteger;
        Image1.Picture.Assign(dsProducto.fieldbyname('foto'));
  end;
end;

En la tabla declaras un campo tipo BLOB Binary....bueno eso en Firebird. Espero te sirva el ejemplo.

Saludos.
__________________
Miguel Román
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 num11 Varios 3 19-03-2009 05:52:55
Guardar una Imagen a PDF atrus Gráficos 8 12-08-2008 10:36:03
Guardar imagen franfl Firebird e Interbase 1 29-02-2008 09:02:54
redimensionar y guardar una imagen gallipi Gráficos 1 24-05-2007 19:17:04
Guardar una imagen en un DB lore Conexión con bases de datos 5 20-03-2007 17:07:48


La franja horaria es GMT +2. Ahora son las 04:44:12.


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