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

duilioisola 06-06-2018 09:06:13

GetSpecialFolderPath devuelve carpetas definidas en el sistema.
Por ejemplo:
En Windows 10:
  • "Mis Documentos" -> "C:\Users\NombreUsario\Documents".
  • "Temp" -> "C:\Users\NombreUsario\AppData\Local\Temp"
En Windows XP:
  • "Mis Documentos" -> "C:\Documents and Settings\NombreUsario\Mis documentos".
  • "Temp" -> "C:\WINDOWS\Temp"


Código Delphi [-]
// Constantes utilizadas por GetSpecialFolderPath;
const
  CSIDL_FLAG_CREATE = $8000;
 { Version 5.0. Combine this CSIDL with any of the following CSIDLs 
   to force the creation of the associated folder. }

  CSIDL_ADMINTOOLS = $0030;
 { Version 5.0. The file system directory that is used to store
   administrative tools for an individual user. The Microsoft Management
   Console (MMC) will save customized consoles to this directory, and it
   will roam with the user. }

  CSIDL_ALTSTARTUP = $001d;
 { The file system directory that corresponds to the user's nonlocalized
   Startup program group. }

  CSIDL_APPDATA = $001a;
 { Version 4.71. The file system directory that serves as a common
   repository for application-specific data. A typical path is C:\Documents
   and Settings\username\Application Data. This CSIDL is supported by the
   redistributable Shfolder.dll for systems that do not have the Microsoft
   Internet Explorer 4.0 integrated Shell installed. }

  CSIDL_BITBUCKET = $000a;
  { The virtual folder containing the objects in the user's Recycle Bin. }

  CSIDL_CDBURN_AREA = $003b;
 { Version 6.0. The file system directory acting as a staging area for files
   waiting to be written to CD. A typical path is C:\Documents and Settings\
   username\Local Settings\Application Data\Microsoft\CD Burning. }

  CSIDL_COMMON_ADMINTOOLS = $002f;
 { Version 5.0. The file system directory containing administrative tools
   for all users of the computer. }

  CSIDL_COMMON_ALTSTARTUP = $001e;
 { The file system directory that corresponds to the nonlocalized Startup
   program group for all users. Valid only for Microsoft Windows NT systems. }

  CSIDL_COMMON_APPDATA = $0023;
 { Version 5.0. The file system directory containing application data for
   all users. A typical path is C:\Documents and Settings\All Users\
   Application Data. }

  CSIDL_COMMON_DESKTOPDIRECTORY = $0019;
 { The file system directory that contains files and folders that appear on
   the desktop for all users. A typical path is C:\Documents and Settings\All
   Users\Desktop. Valid only for Windows NT systems. }

  CSIDL_COMMON_DOCUMENTS = $002e;
 { The file system directory that contains documents that are common to all
   users. A typical paths is C:\Documents and Settings\All Users\Documents.
   Valid for Windows NT systems and Microsoft Windows 95 and Windows 98
   systems with Shfolder.dll installed. }

  CSIDL_COMMON_FAVORITES = $001f;
 { The file system directory that serves as a common repository for favorite
   items common to all users. Valid only for Windows NT systems. }

  CSIDL_COMMON_MUSIC = $0035;
 { Version 6.0. The file system directory that serves as a repository for
   music files common to all users. A typical path is C:\Documents and
   Settings\All Users\Documents\My Music. }

  CSIDL_COMMON_PICTURES = $0036;
 { Version 6.0. The file system directory that serves as a repository for
   image files common to all users. A typical path is C:\Documents and
   Settings\All Users\Documents\My Pictures. }

  CSIDL_COMMON_PROGRAMS = $0017;
 { The file system directory that contains the directories for the common
   program groups that appear on the Start menu for all users. A typical
   path is C:\Documents and Settings\All Users\Start Menu\Programs. Valid
   only for Windows NT systems. }

  CSIDL_COMMON_STARTMENU = $0016;
 { The file system directory that contains the programs and folders that
   appear on the Start menu for all users. A typical path is C:\Documents
   and Settings\All Users\Start Menu. Valid only for Windows NT systems. }

  CSIDL_COMMON_STARTUP = $0018;
 { The file system directory that contains the programs that appear in the
   Startup folder for all users. A typical path is C:\Documents and Settings\
   All Users\Start Menu\Programs\Startup. Valid only for Windows NT systems. }

  CSIDL_COMMON_TEMPLATES = $002d;
 { The file system directory that contains the templates that are available
   to all users. A typical path is C:\Documents and Settings\All Users\
   Templates. Valid only for Windows NT systems. }

  CSIDL_COMMON_VIDEO = $0037;
 { Version 6.0. The file system directory that serves as a repository for
   video files common to all users. A typical path is C:\Documents and
   Settings\All Users\Documents\My Videos. }

  CSIDL_COMPUTERSNEARME = $003d;
  { The folder representing other machines in your workgroup. }

  CSIDL_CONNECTIONS = $0031;
 { The virtual folder representing Network Connections, containing network
   and dial-up connections. }

  CSIDL_CONTROLS = $0003;
  { The virtual folder containing icons for the Control Panel applications. }

  CSIDL_COOKIES = $0021;
 { The file system directory that serves as a common repository for
   Internet cookies. A typical path is C:\Documents and Settings\
   username\Cookies. }

  CSIDL_DESKTOP = $0000;
 { The virtual folder representing the Windows desktop, the root
   of the namespace. }

  CSIDL_DESKTOPDIRECTORY = $0010;
 { The file system directory used to physically store file objects on the
   desktop (not to be confused with the desktop folder itself). A typical
   path is C:\Documents and Settings\username\Desktop. }

  CSIDL_DRIVES = $0011;
 { The virtual folder representing My Computer, containing everything on
   the local computer: storage devices, printers, and Control Panel. The
   folder may also contain mapped network drives. }

  CSIDL_FAVORITES = $0006;
 { The file system directory that serves as a common repository for the
   user's favorite items. A typical path is C:\Documents and Settings\
   username\Favorites. }

  CSIDL_FLAG_DONT_UNEXPAND = $2000;
 { Combine with another CSIDL constant to ensure expanding of
   environment variables. }

  CSIDL_FLAG_DONT_VERIFY = $4000;
 { Combine with another CSIDL constant, except for  CSIDL_FLAG_CREATE,
   to return an unverified folder path—with no attempt to create or
   initialize the folder. }

  CSIDL_FONTS = $0014;
  { A virtual folder containing fonts. A typical path is C:\Windows\Fonts. }

  CSIDL_HISTORY = $0022;
 { The file system directory that serves as a common repository for Internet
  history items. }

  CSIDL_INTERNET = $0001;
  { A viritual folder for Internet Explorer (icon on desktop). }

  CSIDL_INTERNET_CACHE = $0020;
 { Version 4.72. The file system directory that serves as a common
   repository for temporary Internet files. A typical path is C:\Documents
   and Settings\username\Local Settings\Temporary Internet Files. }

  CSIDL_LOCAL_APPDATA = $001c;
 { Version 5.0. The file system directory that serves as a data repository
   for local (nonroaming) applications. A typical path is C:\Documents and
   Settings\username\Local Settings\Application Data. }

  CSIDL_MYDOCUMENTS = $000c;
 { Version 6.0. The virtual folder representing the My
   Documents desktop item. }

  CSIDL_MYMUSIC = $000d;
 { The file system directory that serves as a common repository for
   music files. A typical path is C:\Documents and Settings\User\My
   Documents\My Music. }

  CSIDL_MYPICTURES = $0027;
 { Version 5.0. The file system directory that serves as a common
   repository for image files. A typical path is C:\Documents and
   Settings\username\My Documents\My Pictures. }

  CSIDL_MYVIDEO = $000e;
 { Version 6.0. The file system directory that serves as a common
   repository for video files. A typical path is C:\Documents and
   Settings\username\My Documents\My Videos. }

  CSIDL_NETHOOD = $0013;
 { A file system directory containing the link objects that may exist
   in the My Network Places virtual folder. It is not the same as
   CSIDL_NETWORK, which represents the network namespace root. A typical
   path is C:\Documents and Settings\username\NetHood. }

  CSIDL_NETWORK = $0012;
 { A virtual folder representing Network Neighborhood, the root of the
   network namespace hierarchy. }

  CSIDL_PERSONAL = $0005;
 { Version 6.0. The virtual folder representing the My Documents desktop
   item. This is equivalent to  CSIDL_MYDOCUMENTS.
   Previous to Version 6.0. The file system directory used to physically
   store a user's common repository of documents. A typical path is
   C:\Documents and Settings\username\My Documents. This should be
   distinguished from the virtual My Documents folder in the namespace.
   To access that virtual folder, use SHGetFolderLocation, which returns
   the ITEMIDLIST for the virtual location, or refer to the technique
   described in Managing the File System. }

  CSIDL_PHOTOALBUMS = $0045;
 { Windows Vista. The virtual folder used to store photo albums,
   typically username\My Pictures\Photo Albums. }

  CSIDL_PLAYLISTS = $003f;
 { Windows Vista. The virtual folder used to store play albums,
   typically username\My Music\Playlists. }

  CSIDL_PRINTERS = $0004;
  { The virtual folder containing installed printers. }

  CSIDL_PRINTHOOD = $001b;
 { The file system directory that contains the link objects that can
   exist in the Printers virtual folder. A typical path is C:\Documents
   and Settings\username\PrintHood. }

  CSIDL_PROFILE = $0028;
 { Version 5.0. The user's profile folder. A typical path is C:\Documents
   and Settings\username. Applications should not create files or folders
   at this level; they should put their data under the locations referred
   to by  CSIDL_APPDATA or  CSIDL_LOCAL_APPDATA. }

  CSIDL_PROGRAM_FILES = $0026;
 { Version 5.0. The Program Files folder. A typical path is
   C:\Program Files. }

  CSIDL_PROGRAM_FILES_COMMON = $002b;
 { Version 5.0. A folder for components that are shared across
   applications. A typical path is C:\Program Files\Common. Valid
   only for Windows NT, Windows 2000, and Windows XP systems. Not
   valid for Windows Millennium Edition (Windows Me). }

  CSIDL_PROGRAMS = $0002;
 { The file system directory that contains the user's program groups
   (which are themselves file system directories). A typical path is
   C:\Documents and Settings\username\Start Menu\Programs. }

  CSIDL_RECENT = $0008;
 { The file system directory that contains shortcuts to the user's most
   recently used documents. A typical path is C:\Documents and Settings\
   username\My Recent Documents. To create a shortcut in this folder, use
   SHAddToRecentDocs. In addition to creating the shortcut, this function
   updates the Shell's list of recent documents and adds the shortcut to
   the My Recent Documents submenu of the Start menu. }

  CSIDL_RESOURCES = $0038;
 { Windows Vista. The file system directory that contains resource data.
   A typical path is C:\Windows\Resources. }

  CSIDL_SAMPLE_MUSIC = $0040;
 { Windows Vista. The file system directory that contains sample music.
   A typical path is C:\Documents and Settings\username\My Documents\
   My Music\Sample Music. }

  CSIDL_SAMPLE_PLAYLISTS = $0041;
 { Windows Vista. The file system directory that contains sample playlists.
   A typical path is C:\Documents and Settings\username\My Documents\My
   Music\Sample Playlists. }

  CSIDL_SAMPLE_PICTURES = $0042;
 { Windows Vista. The file system directory that contains sample pictures.
   A typical path is C:\Documents and Settings\username\My Documents\My
   Pictures\Sample Pictures. }

  CSIDL_SAMPLE_VIDEOS = $0043;
 { Windows Vista. The file system directory that contains sample videos.
   A typical path is C:\Documents and Settings\username\My Documents\My
   Videos\Sample Videos. }

  CSIDL_SENDTO = $0009;
 { The file system directory that contains Send To menu items. A typical
   path is C:\Documents and Settings\username\SendTo. }

  CSIDL_STARTMENU = $000b;
 { The file system directory containing Start menu items. A typical path
   is C:\Documents and Settings\username\Start Menu. }

  CSIDL_STARTUP = $0007;
 { The file system directory that corresponds to the user's Startup
   program group. The system starts these programs whenever any user
   logs onto Windows NT or starts Windows 95. A typical path is
   C:\Documents and Settings\username\Start Menu\Programs\Startup. }

  CSIDL_SYSTEM = $0025;
 { Version 5.0. The Windows System folder. A typical path is
   C:\Windows\System32. }

  CSIDL_TEMPLATES = $0015;
 { The file system directory that serves as a common repository for
   document templates. A typical path is C:\Documents and
   Settings\username\Templates. }

  CSIDL_WINDOWS = $0024;
 { Version 5.0. The Windows directory or SYSROOT. This corresponds to
   the %windir% or %SYSTEMROOT% environment variables. A typical
   path is C:\Windows. }

function GetSpecialFolderPath(Folder: integer; CanCreate: boolean): string;
var
  FilePath : array [0..MAX_PATH] of char;
begin
  /// Gets path of special system folders
  /// Call this routine as follows:
  /// GetSpecialFolderPath (CSIDL_PERSONAL, false)
  /// returns folder as result
  /// Ejemplo: CSIDL_PERSONAL = 05 = Mis Documentos

  SHGetSpecialFolderPath(0, @FilePath[0], FOLDER, CanCreate);
  Result := FilePath;
end;

DiegoPucho 06-06-2018 20:25:22

Hola y Gracias Duilioisola lo deduje o mejor dicho probé hasta que me salio...:rolleyes: Jeje... Funcionando excelente...
Ahora otra molestia me podrás ver este HILO?: http://www.clubdelphi.com/foros/show...888#post526888

Desde ya mas que agradecido... Saludos...


La franja horaria es GMT +2. Ahora son las 07:45:51.

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