Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PostgreSQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=42)
-   -   Problema al visualizar imagenes (https://www.clubdelphi.com/foros/showthread.php?t=76893)

PallyRS 02-12-2011 17:13:50

Problema al visualizar imagenes
 
Hola Foro:

Actualmente estoy desarrollando una aplicación sobre un inventario. La misma la estoy creando con CodeGear 2007 (Delphi 2007) y utilizo PostgreSQL como Servidor de datos (Excelente desempeño). En específico utilizo la versión 9.1.1 que es la última estable.

El problema es el siguiente:

Una de las informaciones a guardar es una imagen, la cual veo que se guardó en un campo tipo Bytea. Cuando examino esa tabla con Navicat for PostgreSQL la imagen se observa perfectamente.

Pero cuando desde Delphi le asigno en la ventana de trabajo, un TDBImage, no me muestra la imagen que tengo almacenada en la Base de datos.

Tampoco me permite cargar imagen nueva mediante:
Código Delphi [-]
  if RzOpenDialogo.Execute then DBImagen.Picture.LoadFromFile(RzOpenDialogo.FileName);

Me llega a mostrar la imagen pero no la incerta en la tabla de la base de datos.

Como modo de aclaración decirles que antes eran tablas Tipos PARADOX, la cuales importe desde el mismo NAVICAT, sin problema alguno.

¿Como puedo solucionar el problema de que me muestre la imagen almacenada desde Delphi?
¿Como puedo hacer incertar una imagen nueva asignada?

Gracias de antemano

newtron 02-12-2011 17:53:01

Hola.

A ver si va a ser por el tipo de campo, ¿PostgreSQL no tiene campos blob?

Saludos

PallyRS 02-12-2011 18:41:03

Hola [newtron]

No, PostgreSQL no tiene este tipo de Campo, que me perece utiliza MySQL. Estuve revisando el Post este http://www.clubdelphi.com/foros/showthread.php?t=66498

Pero desgraciadamente ese componente no va nada bien con Delphi 2007. Ahora estoy tratando de ver algún componente actualziado o equivalente para esto. Vaya que debe existir..

Saludos

Casimiro Notevi 02-12-2011 19:00:22

Seguro que tiene campos blob o similares.

radenf 02-12-2011 23:52:23

1 Archivos Adjunto(s)
Cita:

Empezado por Casimiro Notevi (Mensaje 420293)
Seguro que tiene campos blob o similares.

En PostgreSql se utilizan campos bytea.

Te adjunto PallyRS el componente EDBImage para Delphi 2007. Ojalá lo puedas instalar sin problemas, ya que yo lo actualizé para D2007 y aunque no tengo mucha experiencia a mi me funciona perfecto.
Salu2

Casimiro Notevi 03-12-2011 09:44:42

Pues entonces, PallyRS, está usando el tipo correcto, el problema debe ser en su código, habría que verlo entonces.


movorack 04-12-2011 05:29:11

Hola a todos... tiempo sin reponder algún post... :D

El tipo de dato si es el correcto y no solo sirve para imágenes... lo he utilizado hasta para guardar reportes (como uso fastreport) cosa de tenerlos centralizados :D

Este código lo usé hace rato para guardar la imágen que obtenia de una camara digital a la base de datos... el objeto JPEG es solo un TGPEGImage... la misma imágen del TImage pero procesada en un JPEG para mejorar el rendimiento en la carga de las imágenes cuando se presentaba en la web.

Código Delphi [-]
procedure TFrmCarnet.BtnCapturaClick(Sender: TObject);
  var
    Stream : TStream;
begin
  if FrmMain.DlgFotoCapturaExecute = mrOK then
  begin
    With QryCliente do
    begin
      Edit;
  Stream := CreateBlobStream(FieldByName('cli_imag'), bmReadWrite);
        JPEG.SaveToStream(Stream); //Aquí ya estaba asignado a la base de datos
        DBImgPhoto.Picture.Assign(JPEG); //Aquí lo mostraba en el Image del formulario
        //Que la imagen estuviera asignada al value del campo no significaba que se deplegara
        //En el formulario.... por eso tenia que hacer el segundo paso.
        Post; //Eso era todo.
      Refresh;
    end;
  end;
end;

lastimosamente no encontré el código para cuando hacia la consulta y mostrar la foto... espero te ayude.

Casimiro Notevi 04-12-2011 10:54:34

movorack, se te saluda, no te pierdas :)

PallyRS 07-12-2011 17:03:27

El problema persiste
 
Hola Foro:

Muchisimas gracias radenf, el componente se instaló muy bien, pero lastimosamente algo impide que se muestren las imagenes almacenadas. El código que incluye movorack no lo he probado, pues si bien no me muestra la imagen almacenada, no debo seguir, pues es muy importante este paso para el programa.

Ahora como bien dice Casimiro Notevi les pondría una parte del código, pero como no es nada complicado, es lo más estandar posible.

Es una ventana que contiene elementos estandares de Acceso a Datos:


Cuando me desplazo con el DBNavigator, debería mostrarme cuantas imagenes están almacenadas, como normalmente ocurre cuando se hacen en tablas planas. El código de esa ventana en sí no tiene nada especial, pues sin código debería mostrarme la imagen.




¿podrían continuar ayudándome?

Gracias a todos.

radenf 07-12-2011 21:56:34

Cita:

Empezado por PallyRS (Mensaje 420710)
el componente se instaló muy bien, pero lastimosamente algo impide que se muestren las imagenes almacenadas.

No entiendo por qué. Me imagino que conectaste el DBImage de tu form al Dataset y que tus imágenes son .jpg o .bmp.

Saludos

Casimiro Notevi 07-12-2011 22:00:21

Por muy "simple" que sea el código, si no lo vemos y además no explicas NADA, ¿cómo quiéres que te ayudemos?, lo único que sabemos es que es todo muy simple, muy sencillo y muy normal, ¿y qué hacemos con eso? :confused:

movorack 08-12-2011 02:49:48

Y además el tema de los campos blob de postgres (bytea) y oracle aveces dan estos problemas... porque he tenido el problema es que te plantee algo de como lo solucioné.

PallyRS 22-12-2011 16:34:47

Estuve de Vacaciones
 
Hola Foro:

Estuve de vacaciones, por lo que no me había dado una vuelta por aquí.

Casimiro Notevi tienes toda la razón del mundo en cuanto a no haber puesto el código de la Unit en cuestión, por lo que lo haré ahora mismo.

randef: Si, la EDBimage y la DBImage están conectadas al campo correspondiente donde se almacena la imagen. La imagen es .JPG, no he probado con .BMP

Ahora cuando vean el código quisiera saber donde, y en que momento entraría a jugar el código puesto por movorack pues al parecer la solución esta por ahí, según he podido leer en la Web del PostgreSQL. Pero no acabo de arreglar algún detalle que me impide la inserción de las imagénes.

Código Delphi [-]
unit UnitImpresoras;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Mask, RzEdit, RzDBEdit, RzLabel, RzCmboBx, RzDBCmbo,
  ExtCtrls, RzPanel, RzDBNav, DBCtrls, Menus, RzShellDialogs, EDBImage, DBActns,
  ActnList;

type
  TFormImpresoras = class(TForm)
    RzLabelMarcamodelo: TRzLabel;
    RzDBComboBoxLasert: TRzDBComboBox;
    RzDBEditImpresora: TRzDBEdit;
    RzLabelLasert: TRzLabel;
    RzLabelTonert: TRzLabel;
    RzDBEditTonert: TRzDBEdit;
    RzDBMemoImpresora: TRzDBMemo;
    RzDBNavigatorDatos: TRzDBNavigator;
    RzOpenDialogo: TRzOpenDialog;
    PopupMenu: TPopupMenu;
    Cargarimagen: TMenuItem;
    RzLabelDatos: TRzLabel;
    EDBImageImpresora: TEDBImage;
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure CargarimagenClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FormImpresoras: TFormImpresoras;

implementation

uses UnitDataModulo, UnitFormInventarioPC;

{$R *.dfm}

procedure TFormImpresoras.CargarimagenClick(Sender: TObject);
var
  Stream: TStream;
begin
  DataModuleInventarioPC.ADOTableImpresora.Edit;
  Stream:=DataModuleInventarioPC.ADOTableImpresoraImagen;
  if RzOpenDialogo.Execute then EDBImageImpresora.Picture.LoadFromFile(RzOpenDialogo.FileName);
  DataModuleInventarioPC.ADOTableImpresora.Post;
end;

procedure TFormImpresoras.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  DataModuleInventarioPC.ADOTableBitacora.InsertRecord([Date, Time, PC, Usuario,'Cerrado Clasificador de Impresoras']);
end;

procedure TFormImpresoras.FormShow(Sender: TObject);
begin
  DataModuleInventarioPC.ADOTableBitacora.InsertRecord([Date, Time, PC, Usuario,'Activado Clasificador de Impresoras']);
end;

end.


No sé donde poner esa parte del código de movorack donde hace alusión a una JPEG, ¿Me falta por declarar en uso alguna Unit que me está impidiendo realziar la operación correspondiente?

Gracias

radenf 23-12-2011 01:09:46

Estimado PallyRS :

Poe el código que adjuntaste veo que te conectas a PostgrSql utilizando ADO. Yo utilizo Zeos y funciona perfectamente. Puede ser esa la diferencia que te impide ver las imágenes con el DBImage.

Saludos

PallyRS 23-12-2011 20:05:32

Solucionadoooooooooooooooooo (Al fin)
 
Hola Foro:

Pues como lo leen, mil gracias, ya solucioné, ¿Pues como?. Seguí el consejo de radenf y descargué los componentes ZeosDBO 6.6.6-stable. Ni que hablar del trabajo que pasé para descargarlo pues SourceForgue con todo lo Open Source que dicen que són para Cuba no nos dejan descargar nada, ni que fueramos marcianos, pero bueno, eso es política y no cabe en este magnifico Foro.

Incluso me ahorre par de lineas de código. Aparte de los cambios normales en los tipos de conexión y los tipos de tablas, el procedure Cargarimagenclic, cambió quedando ahora solamente así:

Código Delphi [-]
procedure TFormImpresoras.CargarimagenClick(Sender: TObject);
begin
  if RzOpenDialogo.Execute then EDBImageImpresora.Picture.LoadFromFile(RzOpenDialogo.FileName);
end;

La imagen se carga y se vizualiza muy bien.

Gracias a todos, pues todos ayudaron.

Al moderador ya puede dar como solucionado el Hilo este.

Casimiro Notevi 23-12-2011 20:11:28

Algunos paisanos tuyos, cuando necesitan algún programa de esos sitios, los bajamos nosotros y lo ponemos en nuestro FTP para que puedan descargarlos.
Así que ya sabes, para la próxima vez :)
Incluso recuerdo haber enviado algunos CDs con programas a un amigo cubano, que me los pidió, básicamente distribuciones Linux.

radenf 23-12-2011 21:28:09

Encantado de haber podido ayudarte.
Saludos y muchas felicidades junto a tu familia y seres queridos en estas fiestas.

newtron 24-12-2011 09:26:47

Cita:

Empezado por Casimiro Notevi (Mensaje 421842)
Algunos paisanos tuyos, cuando necesitan algún programa de esos sitios, los bajamos nosotros y lo ponemos en nuestro FTP para que puedan descargarlos.
Así que ya sabes, para la próxima vez :)
Incluso recuerdo haber enviado algunos CDs con programas a un amigo cubano, que me los pidió, básicamente distribuciones Linux.

Se te olvidó añadir que esto es a cambio de una ronda de ron para todos. :D

PallyRS 28-12-2011 20:08:53

Gracias
 
Cita:

Empezado por Casimiro Notevi (Mensaje 421842)
Algunos paisanos tuyos, cuando necesitan algún programa de esos sitios, los bajamos nosotros y lo ponemos en nuestro FTP para que puedan descargarlos.
Así que ya sabes, para la próxima vez :)
Incluso recuerdo haber enviado algunos CDs con programas a un amigo cubano, que me los pidió, básicamente distribuciones Linux.

Muchísimas gracias, valientre desición la tuya decirlo público tu animo de cooperar. No todos son capaces de hacerlo. Pero apreciamos la ayuda venga de quien venga y de donde sea. Normalmente no me gusta estar molestando pero casi casi me vi pidiendo ayuda al foro para el componente, pues no encontraba la manera hasta que lo logré. Algunas cosas que son Freeware si puede ser que nos ayuden a optenerlas, pero es siempre y cuando no existan luego complicaciones para quienes nos tiendan la mano.

Por otra parte mi conexión es muy lenta, y cuando es necesario tener alguna imagen de CD DVD, no tenemos mas remedio que quedarnos con las ganas o que alguien nos ayude como acabas de explicar. Muy bien de tu parte. :D

PallyRS 28-12-2011 20:16:17

Felicidades igualmente
 
Cita:

Empezado por radenf (Mensaje 421845)
Encantado de haber podido ayudarte.
Saludos y muchas felicidades junto a tu familia y seres queridos en estas fiestas.

Gracias por todo. Igual te deseo que pases las fiestas de todos estos días de la forma más feliz que quieras. Hoy por lo menos ya me espera una caja de cerveza TINIMA, y unas costillas de puerco azadas en casuelas. Brindare por este Foro en la primera botella, porque despues de varias no se de que me acuerde o por que brinde.

Saludos

FELIZ AÑO NUEVO A TODOS

:D


La franja horaria es GMT +2. Ahora son las 23:10:38.

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