Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-11-2013
Renegoras Renegoras is offline
Registrado
NULL
 
Registrado: oct 2013
Posts: 6
Poder: 0
Renegoras Va por buen camino
Question Guardar y recuperar imágenes de BD en C++ builder

Amigos del foro: Un saludo y agradecimiento muy fraternal a todos ustedes, por la colaboración que brindan.

Espero no redundar con este tema ya que hay varios hilos respecto a esto, sin embargo la mayoría por obviedad están enfocados a Delphi y me es algo complicado transportar el código a c++ builder, ya que siempre existe o esta presente algún error.

Mi duda concreta-mente hace referencia a como guardar una imagen desde un Form a una Base de Datos que tenga un campo blob y de igual forma recuperar y poder mostrar esta imagen en C++ Builder.

También si se podría, mostrarme mediante código como guardar la imagen como tal en la Base de Datos, como guardar solamente la dirección de referencia de la imagen almacenada en un Disco duro y como poder recuperar dicha imagen.

Trabajo con MySQL, conexion ODBC, formato de imágenes jpg y C++Builder 2010.

PD: He logrado guardar las imágenes en la BD directamente desde el editor de PhpMyAdmin y parcialmente he logrado ver esas imágenes desde un form......lo que no logro es recuperar la imagen cuando esta almacenada la dirección de esta en la BD.

De antemano muchas gracias a todos.................
Responder Con Cita
  #2  
Antiguo 03-11-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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 Renegoras.

Cita:
Empezado por Renegoras Ver Mensaje
Mi duda concreta-mente hace referencia a como guardar una imagen desde un Form a una Base de Datos que tenga un campo blob y de igual forma recuperar y poder mostrar esta imagen en C++ Builder.
Código:
...
#include <jpeg.hpp>

// TImage a campo BLOB
void __fastcall ImageToField(TImage *aImage, TField *aField)
{
  if (aImage->Picture->Graphic->ClassNameIs("TJPEGImage")) {
    aField->DataSet->Edit();
    aField->Assign(aImage->Picture->Graphic);
  }
}

// Campo BLOB a TImage
void __fastcall FieldToImage(TField *aField, TImage *aImage)
{
  TJPEGImage *JPG = new TJPEGImage;

  if (aField->ClassNameIs("TBlobField")) {
    JPG->Assign(aField);
    aImage->Picture = NULL;
    aImage->Picture->Assign(JPG);
  }
  delete JPG;
}
Ejemplos de llamada:
Código:
// Guardar
void __fastcall TForm1::btSaveClick(TObject *Sender)
{
  DataSet->Edit();
  ImageToField(Image1, DataSet->FieldByName("IMAGEN"));
  DataSet->Post();
}

// Mostrar en TImage
void __fastcall TForm1::btMuestraClick(TObject *Sender)
{
 FieldToImage(DataSet->FieldByName("IMAGEN"), Image2);
}
Saludos
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 03-11-2013 a las 22:35:54. Razón: agregar llave
Responder Con Cita
  #3  
Antiguo 05-11-2013
Renegoras Renegoras is offline
Registrado
NULL
 
Registrado: oct 2013
Posts: 6
Poder: 0
Renegoras Va por buen camino
Unhappy Funciona

Gracias por la respuesta amigo ecfisa.
Logre implementar el codigo y puedo llamar la imagen de manera correcta:

DataSource1->DataSet->Active=False;
Buscar_Usuario->Close();
Buscar_Usuario->Params->Items[0]->Value=Edit1->Text;
Buscar_Usuario->Open();
if(Buscar_Usuario->RecordCount !=0)
{
DataSource1->DataSet->Active=True;
FieldToImage(DataSource1->DataSet->FieldByName("fotos"), Image1);

}
else

{
ShowMessage("No existe el registro");

}


Sin embargo debo molestarte con una duda mas, puesto que quisiera ingresar la imagen junto con un nombre y algún otro dato mas (CI, Email, etc)...........no he logrado hacer eso, puesto que con:

DataSource2->DataSet->Edit();
ImageToField(Image1, DataSource2->DataSet->FieldByName("fotos"));
DataSource2->DataSet->Post();

solo he logrado que el programa corra apuntado el DataSource a la Tabla, pero solo modifica la imagen del primer registro

He tratado de utilizar un Query con una consulta SQL(insert into fotos (nombre,fotos) values(:nombre,:fotos)).....pero no logro enlazar esta consulta con el código que me proporcionarte de manera que guarde los datos junto con la imagen.

PD: He logrado mostrar la Imagen cuando está esta en la base de datos y no así cuando solo está la dirección....me sale un error #53 jpg..algo asi.

Espero no molestarte mucho con estas preguntas.................Muchas gracias
Responder Con Cita
  #4  
Antiguo 05-11-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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 Renegoras Ver Mensaje
...
Sin embargo debo molestarte con una duda mas, puesto que quisiera ingresar la imagen junto con un nombre y algún otro dato mas (CI, Email, etc)...........no he logrado hacer eso, puesto que con:

DataSource2->DataSet->Edit();
ImageToField(Image1, DataSource2->DataSet->FieldByName("fotos"));
DataSource2->DataSet->Post();
Hola Renegoras.

Para agregar los valores a los campos:
Código:
...
    DataSource2->DataSet->Insert();   // Agregar
    DataSource2->DataSet->FieldByName("CI")->Value    = variableCI;
    DataSource2->DataSet->FieldByName("Email")->Value = variableEmail;
    FieldToImage(DataSource2->DataSet->FieldByName("fotos"), Image1);
    DataSource2->DataSet->Post();
...
En cuanto al error #53, en general se debe a un archivo de imagen no válido, revisa estos enlaces: Por último cuando agregues código C++, por favor encerralo entre las etiquetas [code] aquí_tu_codigo [/code] para que sea mas legible.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 06-11-2013
Renegoras Renegoras is offline
Registrado
NULL
 
Registrado: oct 2013
Posts: 6
Poder: 0
Renegoras Va por buen camino
Thumbs up Gracias ................

Muchas gracias "ecfisa", funciono perfectamente, tomare en cuenta tus recomendaciones para la siguiente..........................un saludo fraternal.
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 y recuperar imagen en bd Lizette Varios 17 26-11-2009 15:49:59
Recuperar las imagenes de un DBNavigator David Varios 1 13-12-2008 02:40:12
Recuperar imagenes jpeg seoane Gráficos 18 07-10-2007 01:51:35
Guardar/Recuperar OLEVARIANT OF ARRAY (II) Franz Argandoña Tablas planas 2 13-07-2006 20:42:59
Guardar y recuperar noipa Varios 3 07-02-2006 14:46:21


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


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