Club Delphi  
    Paypal   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 17-03-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pues esto depende mucho de cómo quieras manejarlo tú, es decir, de cómo manejas en general el resto de los datos.

Por ejemplo, vamos a suponer que muestras tus registros en un DBGrid. Normalmente no querrás poner un columna con las fotos de los empleados. Se puede hacer pero puede generar un tráfico de datos innecesario.

Pero puedes colocar un componente Image a un lado del DBGrid en donde muestres la foto del empleado actualmente seleccionado. En este caso, el código para cargar la foro podrías ponerlo en el evento AfterScroll del DataSet que está enlazado al DBGrid.

Pero también podrías optar por abrir un formulario aparte con los detalles del empleado seleccionado. Esto es muy frecuente; en el DBGrid pones sólo los campos mínimos necesarios para que un usuario reconozca el registro y mediante un botón o acción similar mandas abrir un formulario con controles de datos (DBEdits, etc.) enlazados el mismo DataSet que el DBgrid para mostrar los detalles del registro actual. En ese formulario pondrías tu componente Image y, por ejemplo, podrías usar su evento OnShow para poner el código de carga de la foto.

En el caso inverso, el de agregar un empleado, sus datos y su foto, podrías usar también el formulario de detalles luego de insertar un registro en blanco. Junto a tu Image puedes tener un botón en cuyo evento OnClick cargas la imagen en el Image mediante Image.LoadFromFile. Puedes ahí mismo traspasar la imagen al campo BlobField con el código que te he puesto antes o usar directamente el método LoadFromFile del BlobField.

// Saludos
Responder Con Cita
  #2  
Antiguo 17-03-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 28
Caral Va por buen camino
Hola
Sigue este ejemplo:

Coloca en un form:
2 botones
1 image
1 dbnavigator
1 adotable y su adoconnection

Ahora coloca este código donde corresponde (ya de estas cosas sabes).
Código Delphi [-]
implementation

{$R *.dfm}

uses jpeg;

var jpg: TJPEGImage;

// form create
procedure TForm1.FormCreate(Sender: TObject);
begin
 jpg := TJPEGImage.Create;        // Creamos el objeto que "entiende" al JPEG

end;

// boton 1
procedure TForm1.Button1Click(Sender: TObject); 
var bmp: TBitmap; Stream: TStream;
begin
 if not OpenDialog1.Execute then Exit;

 bmp := TBitmap.Create;           // Creamos el objeto que "entiende" al Bitmap
 bmp.LoadFromFile(OpenDialog1.FileName);  // cargamos la imagen
 jpg.Assign(bmp);                 // signamos la imagen BMP al objeto del JPEG
 bmp.Destroy;                     // y liberamos el objeto. }

 ADOTable1.Open;                  // Abrimos la tabla
 ADOTable1.Insert;                // Insertamos una nueva tupla
 Stream := ADOTable1.CreateBlobStream(ADOTable1.FieldByName('photo'), bmWrite); // Asignamos el BLOB a un stream
 jpg.SaveToStream(Stream);        // y guardamos la imagen como JPEG (convertido), en el stream
 Stream.Destroy;                  // liberamos.
 ADOTable1.Post;                // Guardamos.

end;

// boton 2
procedure TForm1.Button2Click(Sender: TObject); 
var  Stream: TStream;
begin
 ADOTable1.Open;                 // Abrimos la tabla
 ADOTable1.Last;                 // Nos vamos a la última tupla para ver la ultima imagen añadida.
 Stream := ADOTable1.CreateBlobStream(ADOTable1.FieldByName('photo'), bmRead); // Lo mismo que el anterior caso pero ahora en modo de escritura.
 jpg.LoadFromStream(Stream);     // Cargamos el BLOB al objeto JPEG
 Stream.Destroy;                 // liberamos...
 Image1.Picture.Assign(jpg);     // y asignamos la imagen al TPicture.

 end;

// dbnavigator
procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn); 
var  Stream: TStream;
begin
 Stream := ADOTable1.CreateBlobStream(ADOTable1.FieldByName('photo'), bmRead); // Lo mismo que el anterior caso pero ahora en modo de escritura.
 jpg.LoadFromStream(Stream);     // Cargamos el BLOB al objeto JPEG
 Stream.Destroy;                 // liberamos...
 Image1.Picture.Assign(jpg);     // y asignamos la imagen al TPicture.

end;
Este código es gracias a mi amigo cHackAll
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 17-03-2010
aanil aanil is offline
Miembro
 
Registrado: abr 2006
Posts: 155
Poder: 21
aanil Va por buen camino
Hola.

Cuando corro la aplicacion se para en:

Código Delphi [-]
if not OpenDialog1.Execute then Exit;

Estoy estudiando las dos formas.

Saludos.
Responder Con Cita
  #4  
Antiguo 17-03-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Te pongo un ejemplo completo. El ejemplo incluye una base de datos de access 2003 extraida de la tabla biolife que viene con Delphi. Este ejemplo lo tenía ya por aquí en el foro para mostar un dbnavigator personalizado pero lo adapté a ADO y Access.

Los dos botones de la derecha no pertenecen al Navigator y son para cargar una imagen o borrar la imagen del registro seleccionado.

En el ejemplo incluyo las imagenes jpg en la subcarpeta fish. De entrada, ningun registro tiene imagen.

Ahora bien, es posible, pero no estoy seguro, que si tus imágenes son bitmaps en lugar de jpg, puedas usar directamente un componente DBImage directamente sin pasar por todo el rollo de los streams.

Agrego

En el ejemplo se me quedó un componente Table del BDE del ejemplo anterior. No hagas caso de él, lo puedes suprimir.

// Saludos
Archivos Adjuntos
Tipo de Archivo: zip AccBiolife.zip (549,8 KB, 59 visitas)
Responder Con Cita
  #5  
Antiguo 17-03-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 28
Caral Va por buen camino
Hola
No entiendo.
Lo estoy viendo pero no quiero meter las patas.
Tienes componentes ado, sin embargo veo Zeos.
Quito las referencias sin problema?.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #6  
Antiguo 17-03-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 28
Caral Va por buen camino
Hola
Ya le quite algunas referencias y funciono.
Esta muy bien el programa, interesante el codigo.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #7  
Antiguo 17-03-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Ja, ja, perdón. Recién noto que la versión a partir de la cual hice el ejemplo no es la del que está en los foros sino una en la que había comenzado a adaptarlo a Zeos y nunca lo terminé. Gracias por la observación, espero mañana limpiarla y recolocarla aquí.

// Saludos
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
Seguridad de tablas planas pmtzg Tablas planas 1 01-04-2009 09:55:41
Cansado de tablas planas... Jheysson13 Conexión con bases de datos 10 23-06-2008 16:03:21
Consejo sobre tablas planas pablonill Tablas planas 2 12-12-2006 01:08:18
Tablas planas. REHome Tablas planas 1 10-11-2005 22:18:31
backup en tablas planas soloriv Tablas planas 0 25-03-2005 15:39:54


La franja horaria es GMT +2. Ahora son las 16:41:53.


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