Hipervínculo

Antes de nada agradecerte tu tiempo y tu ayuda.
Tengo una base de datos donde quisiera poner en un campo un texto que me lo relacione con un archivo, y que al clicar en él me lo abra. Este archivo puede ser de sonido, de texto, de imagen. Como ejemplo:
"Currículum", y que al clicar se abra el documento
¿Cómo puedo hacerlo? ¿Qué tipo de campo necesito?
1

1 respuesta

Respuesta
1
Si estableces que el cuadro de texto es hipervínculo, puedes utilizar FollowHyperlink:
Application. FollowHyperlink Me! ElCuadroDeTexto
Un saludo
http://www.aesoft-databases.com
Hola Llodax.
Soy inexperto en programación, todo lo poco que se de access es a través de macros. Podrías decirme en que apartado he de poner esa función: "¿Application.FollowHyperlink Me!elCuadroDeTexto"?
Un saludo y gracias de nuevo.
Guille
Yo añadiría un botón para seguir el vinculo y, en el evento click de ese botón, añadiría el código.
Hola otra vez.
Si no he entendido mal, a la función le estas diciendo el nombre del archivo, ¿no?
Mi siguiente pregunta sería, ¿dónde y cómo le tengo que decir que vaya a buscarlo para abrirlo?
Gracias y perdona mi ignorancia.
Paso a paso.
Tu tienes un cuadro de texto dónde pegas una dirección a un documento.
Lo que quieres es tener una forma de abrir ese documento. Por eso te siguero que añadas un botón y que, en el código asociado al evento click, pongas lo que te he puesto yo.
La acción FollowHyperlink hace justamente eso: seguir el vinculo. El 'cómo' sabe que programa debe utilizar es algo que queda en manos de Windows, puesto que es la extensión del archivo la que indica que tipo de archivo es. Windows tiene una tabla interna con las asociaciones entre extensiones y programas. Access solo se 'apoya' en ella.
Vamos al caso práctico.
Tengo un cuadro de texto con el nombre de Anexos. Aquí le pongo el nombre del documento: Hola.doc, el cual está en el directorio raíz.
He creado un botón, y en el evento "Al hacer click" le he puesto tu instrucción como procedimiento de evento: Application.FollowHyperlink Me!Anexos. Y funciona! Primeras gracias.
Otra duda, si ese documento lo tengo en una carpeta, ¿he de poner la dirección de la carpeta en el campo Anexos? p.e. c:\Hola\Hola.doc.
Gracias.
Si, debes poner la ruta completa.
Un truco. Si TODOS los documentos van a 'colgar' de la carpeta donde esté corriendo la aplicación, puedes utilizar rutas relativas.
Imaginate que tienes la base de datos corriendo desde la carpeta C:\MiAplicacion y el documento que quieres abrir está en C:\MiAplicacion\Documentos. Pero eso es en tu ordenador; en el mio lo he instalado en D:. En ese caso no me funcionaria el FollowHyperlink, porque el documento no estaría en C:
¿Cómo soluciono eso? Fácil. En lugar de guardar la ruta completa, guarda solo la ruta sin la ubicación actual (\Documentos\nombredoc.ext)
La ubicación actual de la aplicación la puedes recuperar con CurrentProject. Path
De esa forma puedes concatenar ambos 'valores' para conseguir la ruta completa:
Application. FollowHyperlink CurrentProject.Path & Me! Anexos
Es solo un truco, pero muy útil.
Correctísimo. Segundas gracias.
Te lo pongo más complicado, aunque no lo creo.
Mi base de datos consiste en una relación de personas y los documentos que me entregan. Tengo hecho un formulario principal con los nombres de las personas y un subformulario con el nombre de los documentos que me entrega cada una, relacionados con un IdPersona.
Los documentos los tengo guardados en carpetas con los nombres de la personas, ¿se puede hacer que ese evento habrá el documento del campo Anexos correspondiente de esa persona?
Ejemplo:
Carpeta Lolo, con el documento "Buenos días.doc"
Carpeta Pepe, con el documento "Buenos días.doc"
Quisiera abrir el de Pepe.
¿Se podría hacer?
Muchas gracias y disculpas otra vez.
Es parecido a lo indicado anteriormente.
Debemos pensar en la ruta como en tres partes diferentes:
Ruta común - persona - nombre archivo
La ruta común puede ser el truco que te he dicho antes (si puede variar entre ordenadores) o un texto 'fijo'. En el caso del texto fijo, puedes utilizarlo directamente en el código.
El nombre de la persona. Fácil; se supone que la tienes en el formulario
El nombre del archivo. En el cuadro de texto.
En este caso, ya no debes almacenar la ruta completa: te basta con el nombre del archivo y la extensión
El código quedaría más o menos así:
Private Sub cmdAbrir_Click()
  ' ya que estamos... vamos a validar que exista algo escrito en el campo anexo...
  If Trim(Nz(Me!Anexo, "")) = "" Then
    MsgBox "No hay ningun documento en el campo Anexo", vbCritical, "AVISO"
    Exit Sub
  End If
  Dim strRutaCompleta As String
  ' Opcion 1: cuelga del directorio actual
  strRutaCompleta = CurrentProject.Path
  ' Opcion2: es fija y la sabemos
  strRutaCompleta = "C:\Documentos
  ' vamos por el usuario
  strRutaCompleta = strRutaCompleta & "\" & Me!txtNombrePersona
  ' y ahora por el documento
  strRutaCompleta = strRutaCompleta & "\" & Me!Anexo
  ' ya que lo hacemos bien, veamos si el archivo existe y/o podemos acceder a él
  If Len(Dir(strRutaCompleta, vbArchive)) = 0 Then
    MsgBox "El archivo no existe o no es accesible al usuario.", vbCritical, "AVISO"
    Exit Sub
  End If
  ' Si estamos aquí es que el archivo existe: abramoslo pues
  Application. FollowHyperlink strRuraCompleta
End Sub
Escrito del tirón. Revísalo
Xavi, el NombrePersona lo tengo en un formulario principal y el botón en el formulario, ¿Cómo hago para decirle que el NombrePersona está en ese formulario? , con la línea "strRutaCompleta = strRutaCompleta & "\" & Me!txtNombrePersona" me sale el error de que no encuentra el campo nombrepersona.
Gracias.
Haz referencia al control anteponiendo el Parent para indicar que se trata de un control situado en el formulario padre.
srRutaCompleta = strRutaCompleta & "\" & Me.Parent.Controls("txtNombrePersona")
En la linea: If Len(Dir(strRutaCompleta, vbArchive)) = 0 Then, me sale un mensaje de error núm 52: Nombre o numero de archivo incorrecto.
Pues... no tienes acceso al archivo. Es decir: existe, pero no tienes acceso a él.
Dado que es posible que no sea necesario ese permiso para abrirlo, quita ese bloque If..End If a ver que tal se comporta
Si quieres leer algo sobre el uso de la funcion Dir, mira este hilo superinstructivo: http://groups.google.com.mx/group/microsoft.public.es.vb/browse_frm/thread/cd6128e195f689e4/f01819bb5c828238?hl=es&q=dir+emilio+leonardo+microsoft.public.es.vb
Xavi, le he quitado el bloque If.End If y he cambiado la carpeta de c:\Documentos a c:\ y no hace nada.
Si el archivo está en Documentos, lo abre con la primera instrucción (Application.FollowHyperlink Me! Anexos), ningún problema, pero deja de funcionar en le momento en que lo pongo en la carpeta Pepe.
¿Puede ser problema de permisos en la carpeta? ¿Sabes cómo los puedo deshabilitar o autorizar permiso?
Gracias
Los permisos son cosa de Windows, Access no puede intervenir en ellos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas