PDA

Ver la Versión Completa : Problema al visualizar imagenes


PallyRS
02-12-2011, 17:13:50
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:
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
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.


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 (http://www.clubdelphi.com/foros/member.php?u=16506), se te saluda, no te pierdas :)

PallyRS
07-12-2011, 17:03:27
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:
http://imageshack.us/photo/my-images/687/impresoras.jpg/

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
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
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.


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
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í:


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
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
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
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

PallyRS
28-12-2011, 20:26:49
Se te olvidó añadir que esto es a cambio de una ronda de ron para todos. :D

Pues nada, solo tienen que llegarse por aqui y seran bien recibidos en mi casa. Cualquiera que sea. De la fiesta y la diversion me encargo yo. Ron y como vivo cerquita del mar, hasta los llevo a pescar y freimos lo que se pesque, jugando domino si quieren.

Y hasta debatimos cualquier tema, Programacion, la vida, en fin, la pasariamos muy bien.

Seran bienvenidos todos por igual