Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Vincular imagen a una base de datos (https://www.clubdelphi.com/foros/showthread.php?t=93129)

DiegoPucho 26-05-2018 07:20:19

Vincular imagen a una base de datos
 
Hola CLUB!!! Hago una simple consulta... quiero vincular imágenes a la base de datos pero no guardar la imagen en la misma, ejemplo: una carpeta que contenga imágenes con el nombre del producto a mostrar... es decir si en mi base de datos tengo un producto 33333 y en la carpeta tengo una imagen 33333.jpg como hago para vincularlas?

alguien me pasa algún link de este tema?
Desde ya muchas gracias...

Casimiro Notevi 26-05-2018 10:00:15

Crea un hilo nuevo para tu consulta. Donde lo has puesto es para contestar a alguien que inició su propia consulta.
Lo he movido a un hilo nuevo, tenlo en cuenta para otra ocasión, gracias.

Casimiro Notevi 26-05-2018 11:17:17

¿Qué quieres decir con "cómo vincularlas"? Si ya la tienes guardada con el nombre 333.jpg y estás consultando el artículo 333, no tienes más que abrir la imagen 333.jpg
Tal vez no he entendido lo que preguntas.

duilioisola 26-05-2018 14:37:15

Ya las tienes vinculadas por el nombre. (Imagen = Ruta + CodigoProducto + ".JPG")

Supongo que te refieres a mostrar la imagen.
En ese caso tienes que tener un componente TImage en el formulario y cargarle la imagen:

Código Delphi [-]
procedure TForm.CargarImagenDeArchivo(Imagen: TImage; Archivo: string);
begin
  try
     Imagen.Picture.LoadFromFile(Archivo);
  except
     on EInvalidGraphic do
     begin
        Imagen.Picture.Graphic := nil;
        MessageDlg(_('Formato de imagen no aceptado'), mtError, [mbOK], 0);
     end;
     on EFOpenError do
     begin
        Imagen.Picture.Graphic := nil;
     end;
  end;
end;

begin
   RutaImagenesProductos := 'C:\Imagenes\Productos\';
   RutaImagenesClientes := 'C:\Imagenes\Clientes\';
[...]
   CargarImagenDeArchivo(MiImagen, RutaImagenesProductos + Tabla.FieldByName('PRODUCTO').AsString + '.JPG')
[...]
end;

DiegoPucho 26-05-2018 19:35:27

Gracias Casimiro Notevi y perdón soy nuevo... Pero como creo un Hilo??
Desde ya un millón de gracias...

DiegoPucho 26-05-2018 19:38:30

Gracias duilioisola No sabia como hacerlo o encargarlo... :-).

Casimiro Notevi 26-05-2018 20:11:51

Cita:

Empezado por DiegoPucho (Mensaje 526567)
Pero como creo un Hilo??

Eliges el foro más adecuado a tu pregunta, una vez allí solamente tienes que pulsar el botón que está arriba, a la izquierda, que dice: "Nuevo hilo".
Escribes un título lo más descriptivo posible a lo que quieras preguntar. Y describes tu duda lo más ampliamente posible.
Saludos.

DiegoPucho 26-05-2018 21:10:57

No entendí
 
Donde coloco esto??? Ultima parte...

Código Delphi [-]
begin
   RutaImagenesProductos := 'C:\Imagenes\Productos\';
   RutaImagenesClientes := 'C:\Imagenes\Clientes\';
[...]
   CargarImagenDeArchivo(MiImagen, RutaImagenesProductos + Tabla.FieldByName('PRODUCTO').AsString + '.JPG')
[...]
end;

Perdón que recién empiezo con delphi y a programar... estoy aprendiendo mucho así... a prueba y error...

duilioisola 27-05-2018 12:42:31

Esto debes ponerlo en el lugar donde quieras que se ejecute la acción de mostrar la imagen.

Se me ocurre que lo quieres cada vez que cambie el producto. En ese caso lo puedes poner en el evento OnChange del Edit que muestre el código del producto.

También lo puedes poner en el OnClick de un botón para evitar que se carguen cada vez que muestras un producto diferente. Solo se cargará la imagen si el usuario lo pide, presinando el botń.

Código Delphi [-]
procedure TForm.BotonMuestraImagen.Click(Sender: TObject);
begin
   // Estas deberían ser variables globales, o globales a la unidad
   // Podrías cargarlas desde un fichero .ini que contenga la configuración/preferencias
   RutaImagenesProductos := 'C:\Imagenes\Productos\';
   RutaImagenesClientes := 'C:\Imagenes\Clientes\';

   CargarImagenDeArchivo(MiImagen, RutaImagenesProductos + Tabla.FieldByName('PRODUCTO').AsString + '.JPG')
end;
otń.

DiegoPucho 27-05-2018 17:33:26

Problemas con visualización
 
Hola duilioisola tengo problemas en que se visualice. Hice muchas pruebas y nada aun.. explico por donde voy:
Tenia problemas con este código:
Código Delphi [-]
RutaImagenesProductos := 'C:\Imagenes\Productos\';
Le puse en un VAR y nada hasta que se me ocurrió esto:
Código Delphi [-]
const
  RutaImagenesProductos:String = ('C:\SOME\Imagenes\Productos');
entre USE y TYPE.
Luego coloque justo donde mencionas:
Código Delphi [-]
CargarImagenDeArchivo(MiImagen, RutaImagenesProductos + Tabla.FieldByName('PRODUCTO').AsString + '.JPG')

Aun no logro que la muestre, esta bien por donde voy????

DiegoPucho 27-05-2018 18:11:04

Voy a Expresarme mejor...
 
Hola voy de nuevo... En el form tengo los siguientes componentes: Base de Datos, un Query, un DBGrid y un SImage.
Lo que quiero es visualizar una imagen guardada con el numero de código de un producto. cuando selecciono en el dbgrid me muestre dicha Imagen correspondiente.

duilioisola 27-05-2018 21:09:56

Mañana trataré de hacer un minidemo de eso.
Lo publicaré aquí para que puedas probarlo.
Ahora no tengo un delphi a mano...

DiegoPucho 29-05-2018 04:07:33

Una revisión
 
duilioisola gracias por tu operación y excelentes explicaciones... creo que lo soluciones... explico lo que hice...
donde dice:
Cita:

Le puse en un VAR y nada hasta que se me ocurrió esto:
Código Delphi [-]
const
  RutaImagenesProductos:String = ('C:\Imagenes\Productos');

lo que le faltaba era (\) al final...:)
Código Delphi [-]
const
  RutaImagenesProductos:String = ('C:\Imagenes\Productos\');
Luego coloque todo como me dijiste...
Pero tuve que acomodar las propiedades de la Imagen... y listo ^\||/.
Esta bien lo que hice???

DiegoPucho 29-05-2018 04:12:26

Como guardar una Imagen vinculando con la base de datos?
 
Ahora como guardo una Imagen en el mismo fichero cuando creo un nuevo producto?
hice otro form donde cargo productos a mi base de datos.
y en el fichero donde tengo las Imágenes C:\Imagenes\Productos guardarlas con el mismo código de mi producto...

duilioisola 29-05-2018 08:34:53

Básicamente, debes pedir el fichero que contiene la imagen y luego copiarlo a la carpeta donde las almacenas, con el nombre que le corresponda (COD_PRODUCTO + '.JPG').
Pordrías poner un Botón y en el evento OnClick hacer algo asi:

Código Delphi [-]
var
o, d : TStream;
begin
  // Pregunto por fichero que contiene la imagen a asignar al articulo
  with TOpenDialog.Create(nil) do
  begin
    try
    // Extensiones para filtrar la busqueda
    Filter := _('Imagenes JPG|*.jpg;*.jpeg|Todos los archivos|*.*');
    // Por defecto que esté en la primera (JPG)
    FilterIndex := 1; 
    // Posicion inicial en Mis Documentos (Necesitas el procedimiento GetSpecialFolderPath)
    // InitialDir := GetSpecialFolderPath(CSIDL_PERSONAL, False);
    // Posicion inicial
    InitialDir := '';
    Title := _('Cargar imagen para producto');
    // Si se ejecuta correctamente (Termina con botón Aceptar)
    if (Execute) then
    begin
      // Creo dos Streams. Origen y Destino. Copio en destino lo que haya en origen.
      o := TFileStream.Create(FileName, fmOpenRead);
      try
        d := TFileStream.Create(RutaImagenesProductos + Tabla.FieldByName('PRODUCTO').AsString + '.JPG', fmCreate);
        try
          d.CopyFrom(m, m.Size);
        finally
          d.Free;
        end;
      finally
        o.Free;
      end;
    end;
    finally
      Free;
    end;
  end;
end;

Casimiro Notevi 29-05-2018 09:34:45

Cita:

Empezado por DiegoPucho (Mensaje 526568)
...


Te aconsejo este estupendo libro, es libre y gratis, enfocado a delphi con bases de datos.

DiegoPucho 29-05-2018 20:26:29

Gracias Casimiro consejo tomado y descargando...

DiegoPucho 29-05-2018 20:27:49

Un millón de gracias duilioisola... Saludos...

DiegoPucho 01-06-2018 01:45:09

Una ultima pregunta duilioisola
 
Hola duilioisola, no entiendo esta parte...
Código Delphi [-]
try
        d := TFileStream.Create(RutaImagenesProductos + Tabla.FieldByName('PRODUCTO').AsString + '.JPG', fmCreate);
        try
          d.CopyFrom(m, m.Size);
        finally
          d.Free;
        end;
en
Código Delphi [-]
d.CopyFrom(m, m.Size);
m, m.size??? No entiendo que es m?
No logro que me lo guarde!!! :confused:
Código Delphi [-]
// Posicion inicial en Mis Documentos (Necesitas el procedimiento GetSpecialFolderPath)
    // InitialDir := GetSpecialFolderPath(CSIDL_PERSONAL, False);
    // Posicion inicial
Que es GetSpecialFolderPath???

duilioisola 06-06-2018 09:00:20

Esto debería ser "o". El TStream Origen
Código Delphi [-]
// Destino.CopiarDesde(Origen, Origen.Tamaño)
// Copia en Destino el contenido de Origen, tantos bytes como tenga.
d.CopyFrom(o, o.Size);


La franja horaria es GMT +2. Ahora son las 13:08:55.

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