[RESUELTO] Guardar localización de una carpeta

Discute sobre las herramientas de la base de datos
Responder
JuanPana
Mensajes: 8
Registrado: Lun Dic 28, 2020 6:39 pm

[RESUELTO] Guardar localización de una carpeta

Mensaje por JuanPana »

Hola,

Estoy realizando una base de datos sobre los archivos multimedia que tengo en mi NAS. Necesito tener catalogado el material de las grabaciones que realizo con mi cámara (fecha, lugar, formato...), las cuales estas ordenadas por carpetas en función del evento grabado.

Es por ello que me gustaría poder tener un campo que almacene la ubicación de cada carpeta, para posteriormente poder abrirla directamente desde Base.
¿Es posible hacerlo? He visto ejemplos en este mismo foro más complejos con macros para adjuntar documentos, pero no termino de aclararme en cuestión de carpetas.

Espero que podáis darme alguna indicación de por dónde tirar.

Muchas gracias.
Última edición por JuanPana el Vie Mar 26, 2021 9:00 pm, editado 1 vez en total.
OpenOffice 4.1.8 - macOS 11.0.1
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Guardar localización de una carpeta (y poder abrirla lue

Mensaje por RMG »

Hola,

Esta macro en Win te puede valer, en Mac no lo se. La carpeta debe estar alojada donde se encuentre la BD, en caso contrario debes poner toda la ruta.

Código: Seleccionar todo

Sub AbrirCarpeta (Evento)
Dim oForm As Object
Dim Carpeta As String
	oForm = Evento.Source.Model.Parent
	Carpeta= oForm.GetByName("TU_CAMPO_NOMBRE_CARCARPETA").Text
	GlobalScope.BasicLibraries.LoadLibrary("Tools")    
	Shell "explorer "& ConvertToURL(DirectoryNameoutofPath (ThisDatabasedocument.getURL(),"/",0) &"/"& Carpeta & "/"
End Sub
Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
JuanPana
Mensajes: 8
Registrado: Lun Dic 28, 2020 6:39 pm

Re: Guardar localización de una carpeta (y poder abrirla lue

Mensaje por JuanPana »

Estupendo, me pongo a probar desde aquí.

Muchas gracias.
OpenOffice 4.1.8 - macOS 11.0.1
JuanPana
Mensajes: 8
Registrado: Lun Dic 28, 2020 6:39 pm

Re: Guardar localización de una carpeta (y poder abrirla lue

Mensaje por JuanPana »

He estado probando, pero por más vueltas que le doy, no logro solucionar el error:

Imagen Imagen

Por más que busco, me quedo atascado y no paso de ahí.

¿Alguna sugerencia?

Y, por cierto, con esto abro una ubicación introducida a mano. Me gustaría que con otro botón se abriera el explorador de archivos, yo navegara hasta la ruta y esta se quedara almacenada en el campo. Para luego ya con este botón poder abrirla.

Muchas gracias.
OpenOffice 4.1.8 - macOS 11.0.1
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Guardar localización de una carpeta (y poder abrirla lue

Mensaje por RMG »

Hola,

Adjunta un pequeño ejemplo de tu BD para reproducir el problema y acertar mejor con la solución.

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
JuanPana
Mensajes: 8
Registrado: Lun Dic 28, 2020 6:39 pm

Re: Guardar localización de una carpeta (y poder abrirla lue

Mensaje por JuanPana »

RMG escribió: Adjunta un pequeño ejemplo de tu BD para reproducir el problema y acertar mejor con la solución.
Adjunto el archivo con el que estoy haciendo las pruebas.

Gracias!
Adjuntos
Prueba Base Datos Video.odb.zip
Pruebas BBDD Video
(35.91 KiB) Descargado 151 veces
OpenOffice 4.1.8 - macOS 11.0.1
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Guardar localización de una carpeta (y poder abrirla lue

Mensaje por RMG »

Hola,

El error lo tenias en el nombre del control, no es lo mismo "Ubicacion" que "txtUbicacion". Siempre aconsejo poner el mismo nombre del campo al control.
Revisa mi propuesta, no solo guarda la carpeta, sino incluso el nombre del archivo. Después lo abre directamente con el botón, no solo muestra la carpeta. Si no lo quieres así, te dejo como deber hacerlo como prefieras, con lo que te he hecho lo puedes hacer.

Saludos
Adjuntos
Prueba Base Datos Video.zip
(40.9 KiB) Descargado 177 veces
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
JuanPana
Mensajes: 8
Registrado: Lun Dic 28, 2020 6:39 pm

Re: Guardar localización de una carpeta (y poder abrirla lue

Mensaje por JuanPana »

Perfecto!. Vaya error lo de no fijarme en el nombre real. Le voy a dar una vuelta para registrar solo carpetas.

Muchas gracias.
OpenOffice 4.1.8 - macOS 11.0.1
JuanPana
Mensajes: 8
Registrado: Lun Dic 28, 2020 6:39 pm

Re: Guardar localización de una carpeta (y poder abrirla lue

Mensaje por JuanPana »

Hola de nuevo.

Estoy dándole vueltas al ejemplo, pero la macro pide la ubicación de un archivo (sInsertarDoc). Me gustaría que no guardase un archivo concreto, sino solo el directorio donde está, para luego poder abrir esa carpeta (sAbrirDoc). Estoy buscando en la documentación como cambiar esa opción, pero no logro dar con la correcta.

También me atasco en el if que comprueba si el campo está vacío, ya que cuando quiero modificar la ruta (por si se ha introducido una incorrecta) la macro salta y no continúa.

Código: Seleccionar todo

	If oFormD.IsModified Then
		If oFormD.IsNew Then oFormD.InsertRow Else oFormD.UpdateRow
	End If


Muchas gracias por vuestra ayuda.
OpenOffice 4.1.8 - macOS 11.0.1
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Guardar localización de una carpeta (y poder abrirla lue

Mensaje por RMG »

Hola,

Con esto puedes seleccionar un archivo cualquiera de una carpeta y te guarda solo el nombre de esta, después la puedes abrir. Como te dije solo era trastear un poco.

Código: Seleccionar todo

Sub InsertaUnaCarpeta (Evento)' Se debe seleccionar un archivo cualquiera.
Dim oFormD As Object
Dim oDialFP As Object
Dim sURL As String
Dim totalcaracteres As Integer
Dim contador As integer
Dim caracter As String
	oFormD=Evento.Source.Model.Parent
	sURL = ConvertToURL(oFormD.Columns.GetByName("Ubicacion").GetString)
	oDialFP = CreateUnoService ("com.sun.star.ui.dialogs.FilePicker")
	oDialFP.Title = "Elige una carpeta"
	If Dir(sURL)<> "" Then oDialFP.DisplayDirectory = sURL
	If oDialFP.Execute Then
		sURL = oDialFP.Files(0)
		totalcaracteres = Len(sURL)
	Do
    	If Mid(sURL, totalcaracteres - contador, 1) <> "/" Then
    		caracter = Mid(sURL, totalcaracteres - contador,1 )
    	Else
    		caracter = "/" 	
    	End if
    	contador = contador + 1
    	sURL = Left(sURL, totalcaracteres - contador)
    Loop While caracter <> "/"
		oFormD.Columns.GetByName("Ubicacion").UpdateString(sURL)
	End If
	If oFormD.IsModified Then 'con esto se guarda el registro automaticamente
		If oFormD.IsNew Then oFormD.InsertRow Else oFormD.UpdateRow
	End If
End Sub

Sub MuestraUnaCarpeta (Evento)
Dim oForm As Object
Dim Carpeta As String
   oForm = Evento.Source.Model.Parent
   Carpeta= oForm.GetByName("Ubicacion").Text
   GlobalScope.BasicLibraries.LoadLibrary("Tools")    
   Shell "explorer "& Carpeta
End Sub
Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
JuanPana
Mensajes: 8
Registrado: Lun Dic 28, 2020 6:39 pm

Re: Guardar localización de una carpeta (y poder abrirla lue

Mensaje por JuanPana »

Hola de nuevo,
He estado usando este último código, pero me surgen dos problemas que soy incapaz de resolver.
El primero de ellos es que solo me deja guardar una ruta, ya que cuando cambio de registro e introduzco otra, no puedo seleccionarla. El segundo problema es a la hora de abrir la carpeta, ya que muestra un error por el que no encuentra el archivo.

En estos videos se aprecia el comportamiento:
Fallo 1
https://youtu.be/YEVY88Fd70E

Fallo 2
https://youtu.be/wFN6x086hQM

Espero que podáis aclararme por donde puedo tirar.
Muchas gracias.
OpenOffice 4.1.8 - macOS 11.0.1
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Guardar localización de una carpeta (y poder abrirla lue

Mensaje por RMG »

Hola,

Solo he detectado un error, y lo he solucionado ampliando el tamaño del campo "Ubicacion" a 255 caracteres. Quizás también te pueda pasar que no guardes el registro después de efectuar el cambio y antes de cambiar de registro..

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
JuanPana
Mensajes: 8
Registrado: Lun Dic 28, 2020 6:39 pm

Re: Guardar localización de una carpeta (y poder abrirla lue

Mensaje por JuanPana »

Revisando el código de nuevo, me parecía raro que en Mac también se usara "explorer "& Carpeta, busque información especifica para Mac, pero no pude encontrar nada. Probando opciones al azar: Finder, comandos del terminal... al final di con "open "& Carpeta y funciona. Ahora sí abre la ruta almacenada.
Precisamente para guardar la ruta no he encontrado manera de solucionarlo... en OpenOffice, pero sí en LibreOffice. Con el mismo código, sin cambiar nada funciona perfectamente. Supongo que algo debe haber en la versión para Mac que lo impide.

Copio el código que finalmente he usado, por si alguien en el futuro necesita echarle un vistazo:

Código: Seleccionar todo

Sub InsertaUnaCarpeta (Evento)' Se debe seleccionar un archivo cualquiera.
Dim oFormD As Object
Dim oDialFP As Object
Dim sURL As String
Dim totalcaracteres As Integer
Dim contador As Integer
Dim caracter As String
   oFormD=Evento.Source.Model.Parent
   sURL = ConvertToURL(oFormD.Columns.GetByName("Ubicacion").GetString)
   oDialFP = CreateUnoService ("com.sun.star.ui.dialogs.FilePicker")
   oDialFP.Title = "Elige una carpeta"
   If Dir(sURL)<> "" Then oDialFP.DisplayDirectory = sURL
   If oDialFP.Execute Then
      sURL = oDialFP.Files(0)
      totalcaracteres = Len(sURL)
   Do
       If Mid(sURL, totalcaracteres - contador, 1) <> "/" Then
          caracter = Mid(sURL, totalcaracteres - contador,1 )
       Else
          caracter = "/"    
       End if
       contador = contador + 1
       sURL = Left(sURL, totalcaracteres - contador)
    Loop While caracter <> "/"
      oFormD.Columns.GetByName("Ubicacion").UpdateString(sURL)
   End If
   If oFormD.IsModified Then 'con esto se guarda el registro automaticamente
      If oFormD.IsNew Then oFormD.InsertRow Else oFormD.UpdateRow
   End If
End Sub

Sub MuestraUnaCarpeta (Evento)
Dim oForm As Object
Dim Carpeta As String

   oForm = Evento.Source.Model.Parent
   Carpeta= oForm.GetByName("Ubicacion").Text
  
   Shell "open " & Carpeta
End Sub
Muchas gracias RMG por tus vitales indicaciones.
Un saludo.
Última edición por JuanPana el Vie Mar 26, 2021 9:01 pm, editado 1 vez en total.
OpenOffice 4.1.8 - macOS 11.0.1
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Guardar localización de una carpeta (y poder abrirla lue

Mensaje por RMG »

Hola,

Gracias a ti también por tu aporte. Si consideras que esto esta resuelto, recuerda marcarlo como tal, nos ayuda a mantener un foro más organizado.

https://forum.openoffice.org/es/forum/v ... f=3&t=2668

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
Responder