Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-04-2014
keine1lust keine1lust is offline
Miembro
NULL
 
Registrado: sep 2012
Posts: 17
Poder: 0
keine1lust Va por buen camino
Thumbs up Guardar Imagenes zeoslib+lazarus

Buen dia tengo un pequeño problema para guardar imágenes a la base de datos, eh vistos muchos ejemplos y temas relacionados con dicho asunto pero veo que funciona bien pero en usando delphi.

yo estoy programando un registro de personas en el cual debo guardar una foto que almaceno en un TImage aparte de guardar los datos esa persona lo quiero que se guarde junto con la imagen pero solo consigo error seguí este ejemplo que me brinda una guía básica de zeoslib:

Código Delphi [-]
 Var TheStream : TMemoryStream;
Begin
  TheStream := TMemoryStream.Create;
  Try
    Image1.Picture.Bitmap.Savetostream(TheStream);
    With qryBlobInsert do 
    Begin
      Sql.Text := 'INSERT INTO EVENTS (EventNo,EVENT_PHOTO) VALUES (100,:ThePicture)';
      Params.Clear;
      Params.CreateParam(ftBlob,'ThePicture', ptInput);
      ParamByName('ThePicture').LoadfromStream(TheStream,ftBlob);
      ExecSQL;
    End;
  Finally
    TheStream.Free;
  End;
End;

pero en lazarus no reconoce ftBlob y ptInput

mi forma de conectarme a una base de datos es llamando a una clase de conexión a base de datos

eh probado otros ejemplos donde solo se guarda la imagen y en realidad no me han funcionado. Si me guiar o recomendarme alguna guía que leer estaría muy agradecido que tengan buen dia
Responder Con Cita
  #2  
Antiguo 08-04-2014
keine1lust keine1lust is offline
Miembro
NULL
 
Registrado: sep 2012
Posts: 17
Poder: 0
keine1lust Va por buen camino
Cool Respuesta a guardar

Buenas la solución es que se debe incluir en la unidad db y con eso el ejemplo anterior funciona perfecto y para mi parecer es bastante sencilla disculpen las molestias si alguien tiene duda me escriben y le puedo compartir el codigo
Responder Con Cita
  #3  
Antiguo 09-04-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por keine1lust Ver Mensaje
...
si alguien tiene duda me escriben y le puedo compartir el codigo
Hola keine1lust.

Podes compartirlo en este mismo hilo o mejor aún como aporte en un nuevo mensaje. Con seguridad tendrá mas alcance y los agradecidos seran muchos

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 09-04-2014
keine1lust keine1lust is offline
Miembro
NULL
 
Registrado: sep 2012
Posts: 17
Poder: 0
keine1lust Va por buen camino
pasos para guardar imagenes

1.
declarar el uso de unidad DB y componente Zeos
Código Delphi [-]
unit freg_per;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Buttons,
  StdCtrls, MaskEdit,ExtCtrls, ExtDlgs,conexionesbd, ZDataset,DB;

es importante declarar la unidad DB ya que el contiene las constantes para el manejo de varibles tipo blob ejemplo: ftBlob, ptInput si no la declaran el compilador no reconocerá dichas variables

2. este codigo es el que te da la guia de zeoslib:

Código Delphi [-]
Var TheStream : TMemoryStream;
Begin
  TheStream := TMemoryStream.Create;
  Try
    Image1.Picture.Bitmap.Savetostream(TheStream);
    With qryBlobInsert do 
    Begin
      Sql.Text := 'INSERT INTO EVENTS (EventNo,EVENT_PHOTO) VALUES (100,:ThePicture)';
      Params.Clear;
      Params.CreateParam(ftBlob,'ThePicture', ptInput);
      ParamByName('ThePicture').LoadfromStream(TheStream,ftBlob);
      ExecSQL;
    End;
  Finally
    TheStream.Free;
  End;
End;

en mi caso lo adapte a lo que necesitaba:

Código Delphi [-]
 TheStream := TMemoryStream.Create;
  Try
    Image1.Picture.Jpeg.Savetostream(TheStream);

    conexiodb.Conectar_Mysql; //llamo a la base de datos para conectarme
    sqlejecuta:=TZQuery.Create(nil);//creo un nuevo objeto

    With sqlejecuta do
    Begin
      Connection:= Conexion;
      Sql.Text:='INSERT INTO personal(cedula,nom_comp,direccion,telf_movil,'+
                'tlf_local,cargo,foto,departamento_iddepart,'+
                'parametro_idparametro,'+
                'tip_empleado_idtip_emp,id_user) '+
                'VALUES('+mcedula+','+ mnom_comp+','+mdireccion+
                ','+mtelf_movil+','+ mtlf_local+','+mcargo+',:foto'+
                ','+middepart+','+midparametro+','+midtip_emp+
                ','+QuotedStr(tid_user)+')';
      Params.Clear;
      Params.CreateParam(ftBlob,'foto', ptInput);
      ParamByName('foto').LoadfromStream(TheStream,ftBlob);
      ExecSQL;
    End;
  Finally
    TheStream.Free;
  End;

   MessageDlg('Registro almacenado con exito',mtInformation,[mbOK], 0);

   end     
Conexion.Disconnect;

de igual forma como hice el insert lo adapto para hacer update

hice una pequeña combinación ya que por el momento tengo que investigar mas sobre el uso de Params

si alguien me puede sugerir como optimizar el código o que sea mas presentable para otros programadores se los agradecería
Responder Con Cita
  #5  
Antiguo 09-04-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Responder Con Cita
  #6  
Antiguo 09-04-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola keine1lust.

Primero que nada te agradezco que hayas compartido tu código

Siempre que sea posible, es aconsejable el uso de parámetros, entonces mi sugerencia es: Tratar de parametrizar todas las inserciones.

No he usado los componentes Zeos, aunque tengo entendido que son similares a los IBX, basándome en eso, con un TIBQuery lo haría de este modo:
Código Delphi [-]
var
  MS: TMemoryStream;
begin
  ...
  with sqlejecuta do
  begin
    Connection:= Conexion;
    Close;
    SQL.Clear;
    SQL.Add('INSERT INTO PERSONAL(CEDULA,NOM_COMP,DIRECCION,TELF_MOVIL,');
    SQL.Add('TLF_LOCAL,CARGO,FOTO,DEPARTAMENTO_IDDEPART,');
    SQL.Add('PARAMETRO_IDPARAMETRO,TIP_EMPLEADO_IDTIP_EMP,ID_USER)');
    SQL.Add('VALUES(:CEDULA,:NOM_COMP,:DIRECC,:MOVIL,:FIJO,:CARGO,');
    SQL.Add(':FOTO,:DEPTO_ID,:PARAM_ID,:TIP_EMPL,:USER_ID)');
    ParamByName('CEDULA').AsString:= mcedula;
    ParamByName('NOM_COMP').AsString:= mnom_comp;
    ParamByName('DIRECC').AsString:= mdireccion;
    ParamByName('MOVIL').AsString:= mtelf_movil;
    ParamByName('FIJO').AsString:= mtlf_local;
    ParamByName('CARGO').AsString:= mcargo;
    ParamByName('DEPTO_ID').AsString:= middepart;
    ParamByName('PARAM_ID').AsString:= midparametro;
    ParamByName('TIP_EMPL').AsString:= midtip_emp;
    ParamByName('USER_ID').AsString:= tid_user;
    MS:= TMemoryStream.Create;
    try
      Image1.Picture.Bitmap.SaveToStream(MS);
      MS.Position:= 0;
      ParamByName('FOTO').LoadFromStream(MS, ftBlob);
    finally
      MS.Free;
    end;
    ExecSQL;
    ...
De este modo funciona correctamente (con IBX), ojalá sea igual para Zeos y la sugerencia te resulte útil.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 09-04-2014 a las 17:37:10. Razón: quitar caritas del código
Responder Con Cita
  #7  
Antiguo 09-04-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Responder Con Cita
  #8  
Antiguo 09-04-2014
keine1lust keine1lust is offline
Miembro
NULL
 
Registrado: sep 2012
Posts: 17
Poder: 0
keine1lust Va por buen camino
Thumbs up quedo perfecto

Código Delphi [-]
 

Var  MS : TMemoryStream;

begin

conexiodb.Conectar_Mysql;
    sqlejecuta:=TZQuery.Create(nil);

      with sqlejecuta do
  begin
    Connection:= Conexion;
    Close;
    SQL.Clear;
    SQL.Add('INSERT INTO PERSONAL(CEDULA,NOM_COMP,DIRECCION,TELF_MOVIL,');
    SQL.Add('TLF_LOCAL,CARGO,FOTO,DEPARTAMENTO_IDDEPART,');
    SQL.Add('PARAMETRO_IDPARAMETRO,TIP_EMPLEADO_IDTIP_EMP,ID_USER)');
    SQL.Add('VALUES(:CEDULA,:NOM_COMP,IRECC,:MOVIL,:FIJO,:CARGO,');
    SQL.Add(':FOTO,EPTO_ID,:PARAM_ID,:TIP_EMPL,:USER_ID)');
    ParamByName('CEDULA').AsString:= Trim(trif.Text);
    ParamByName('NOM_COMP').AsString:= Trim(tnom_per.Text);
    ParamByName('DIRECC').AsString:= Trim(mdir.Text);
    ParamByName('MOVIL').AsString:= Trim(tmovil.Text);
    ParamByName('FIJO').AsString:= Trim(tntlf.Text);
    ParamByName('CARGO').AsString:= Trim(tnom_cargo.Text);
    ParamByName('DEPTO_ID').AsInteger := middepart;
    ParamByName('PARAM_ID').AsInteger:= midparametro;
    ParamByName('TIP_EMPL').AsInteger:= midtip_emp;
    ParamByName('USER_ID').AsString:= tid_user;    
    MS:= TMemoryStream.Create;
    try
      Image1.Picture.Bitmap.SaveToStream(MS);
      MS.Position:= 0;
      ParamByName('FOTO').LoadFromStream(MS, ftBlob);
    finally
      MS.Free;
    end;
        try
      ExecSQL;
      MessageDlg('Registro Almacenado con exito',mtInformation,[mbOK], 0);
      exit;
     except
      on  E: Exception do
        begin
        //showmessage('Problemas con query ['+text+']');
        MessageDlg('Problemas de conexion con la base de datos',mtWarning,[mbOK], 0);
        exit;
       end;
     end;

      end;

Muchas gracias ecfisa funciona perfecto ya solo agregue otra excepcion a ExecSQL; y antes con Parametros no me funcionaba era por esta linea:
Código Delphi [-]
Params.CreateParam(ftBlob,'foto', ptInput);
como escribi anteriormente tengo que leer mas sobre el uso de parámetros de nuevo muchas Gracias estoy haciendo esto para tratar pasar un sistema hecho en vfp a pascal ya me falta los reportes que actualmente los estoy haciendo en fortesreport4lazarus claro ya poco a poco haré un código mas limpio
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 imagenes en dll Melissa_12 Varios 2 04-12-2012 16:16:41
Lazarus, Linux, ZeosLib, Firebird. ¿Qué combinación funciona? rolandoj Lazarus, FreePascal, Kylix, etc. 44 12-09-2011 23:47:45
Mover imagenes creadas en tiempo de ejecucion en lazarus Guy Fawkes Lazarus, FreePascal, Kylix, etc. 1 14-01-2010 19:09:14
Guardar en una variable el contenido de 100000 registros obtenidos con ZeosLib noob Conexión con bases de datos 7 20-04-2009 09:14:50
Guardar Imagenes escarlete Gráficos 1 11-10-2005 18:57:47


La franja horaria es GMT +2. Ahora son las 18:10:28.


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