Pagina 1 di 1

Ricerca drive USB

Inviato: venerdì 5 luglio 2013, 17:51
da LUGIUDANI
Ciao a tutti, eccomi qui con un altro problema che spero mi sappiate risolvere.
Sto utilizzando una chiavetta USB per archiviare dei dati e da un formulario database vorrei aprire questo archivio tramite macro.
La macro per aprirlo l'ho già fatta, solo vorrei creare un'altra macro da collegare all'apertura per l'identificazione automatica del drive dove è inserita la chiavetta.

Siccome all'interno delle macro del database ci sono dei percorsi che deve seguire per l'apertura di determinati file della chiavetta... se non trova il drive non me li apre perchè nella riga di comando ho impostato una lettera diversa.

Non so se mi sono spiegata bene... comunque sono a vostra disposizione per ogni chiarimento.

La macro per l'apertura, ad esempio, della finestra di dialogo del menu è la seguente...

Codice: Seleziona tutto

	Sub AperturaMenu
         MioMenu = LoadDialog("Standard","DlgMenu")
	oDialogModel = MioMenu.Model
	oDialogModel.step = 3
	path = ConvertToURL("E:\Progetto BilancioFamiliare\IMMAGINI\")
	oDialogModel.cmdContanti.ImageURL = ConvertToURL(path + "Contanti.png")
	oDialogModel.cmdFatture.ImageURL = ConvertToURL(path + "Fatture.png")
	oDialogModel.cmdDB.ImageURL = ConvertToURL(path + "Vai database.png")
	oDialogModel.cmdMediateca.ImageURL = ConvertToURL(path + "Vai film.png")
	oDialogModel.cmdPromemoria.ImageURL = ConvertToURL(path + "Promemoria.png")
	oDialogModel.cmdRubrica.ImageURL = ConvertToURL(path + "Rubrica.png")
	oDialogModel.cmdRisparmi.ImageURL = ConvertToURL(path + "Salvadanaio.jpg")
	oDialogModel.cmdNegozio.ImageURL = ConvertToURL(path + "Negozio.jpg")
	oDialogModel.cmdArchivio.ImageURL = ConvertToURL(path + "Archivio.png")
	oDialogModel.cmdChiudiDB.ImageURL = ConvertToURL(path + "Chiudi.png")
	oDialogModel.cmdPrelievi.ImageURL = ConvertToURL(path+"Bancomat.png")
	oDialogModel.cmdPrelievi2.ImageURL = ConvertToURL(path+"Bancomat.png")
	oDialogModel.cmdMovimenti.ImageURL = ConvertToURL(path+"Portafoglio.png")
	oDialogModel.cmdMovimenti2.ImageURL = ConvertToURL(path+"Portafoglio.png")
	oDialogModel.cmdReports.ImageURL = ConvertToURL(path + "Report.png")
	oDialogModel.cmdReports2.ImageURL = ConvertToURL(path + "Report.png")
	MioMenu.getControl("dfDataOdierna").text = Date
	PulsantiContabilitaOFF()
	MioMenu.execute()
End Sub


La riga di comando che vorrei modificare è questa:

path = ConvertToURL("E:\Progetto BilancioFamiliare\IMMAGINI\")

perchè se la chiavetta non è inserita nel drive E non mi inserisce, in questo caso, le immagini sui pulsanti.

Re: Ricerca drive USB

Inviato: mercoledì 10 luglio 2013, 16:26
da vladko
Attenzione, non c'è un buon consiglio di usare una chiavetta usb per file di database ;-)

Re: Ricerca drive USB

Inviato: giovedì 11 luglio 2013, 15:51
da LUGIUDANI
Per quale motivo Vladko? Al momento ci sto lavorando e non ho avuto problemi

Re: Ricerca drive USB

Inviato: venerdì 12 luglio 2013, 21:43
da vladko
file corrotti.
è spesso che qui viene a lamentarsi di peersone che hanno problemi con chiavette.
Il motivo è sopratutto che i file di openoffici è su file compressi e quando i database sono grossi c'è errori sui file.
ti raccomando tanto backup, ci sono script e programmini che fanno tutto dasoli in pochi secondi, ma recuperare un file corrotto può portare tanto lavoro e tante parole cattive :-)

Re: Ricerca drive USB

Inviato: martedì 16 luglio 2013, 9:25
da LUGIUDANI
Grazie vladko del consiglio... come hai già detto tu sto facendo a ogni modifica dei backup per sicurezza e al momento non mi ha portato ancora a dire brutte parole come dici tu! :D Comunque alla mia domanda non c'è macro che risponda?

Re: Ricerca drive USB

Inviato: martedì 19 novembre 2013, 12:37
da LUGIUDANI
 Editato: Modificato da charlie da "tutto maiuscolo" a caratteri normali 
Non c'e' nessuno che puo' aiutarmi a capire come fare una macro che vada a ricercarmi la directory giusta a seconda del nome file da ricercare?

Re: Ricerca drive USB

Inviato: martedì 19 novembre 2013, 14:59
da charlie
Per cortesia non gridare!
Anche i vecchi utenti hanno bisogno di una rispolveratina del regolamento?: viewtopic.php?f=1&t=2#p223

Re: Ricerca drive USB

Inviato: mercoledì 20 novembre 2013, 17:44
da vladko

Re: Ricerca drive USB

Inviato: giovedì 21 novembre 2013, 10:43
da LUGIUDANI
Scusa Charlie ma è da luglio che nessuno mi sapeva dare una dritta e pensavo che la mia richiesta di informazioni era stata messa nel dimenticatoio. La scrittura utilizzata non era di certo un urlo era solo un modo per evidenziare che aspettavo con ansia un aiuto!
Comunque grazie Vladko... ora darò un'occhiata al tuo link... spero di saltarne fuori!

Re: Ricerca drive USB

Inviato: giovedì 21 novembre 2013, 12:39
da LUGIUDANI
Ciao Vladko, ho letto il tuo link e devo ammettere che l'avevo già visionato ma non mi dava nessun aiuto concreto al mio problema.
In pratica io ho inserito un database nel "C:\" denominato MENU nel quale vado a scegliere determinati programmi che dovrebbero aprirsi alla digitazione di un pulsante. Per esempio ho creato un pulsante MEDIATECA che alla digitazione mi va ad aprire un'altro database che però è situato nella porta F:\.
Quello che sto cercando di fare è di creare una macro che mi dia la possibilità di non immettere a "mano" la porta di riferimento ma che mi andasse a fare la ricerca in automatico.

La macro che ho visto nel link che mi hai suggerito è la seguente e ho cercato di adattarla, ma non è corretta. L'errore sta nel oPathSettings perchè mi riporta il percorso del database MENU e non quello dove è situato il database MEDIATECA. Come faccio a modificare il percorso?

Codice: Seleziona tutto

Sub ApriMediateca
oPathSettings = createUnoService("com.sun.star.util.PathSettings")
ConvertFromURL (oPathSettings.Module)
FullPath = ConvertFromURL (oPathSettings.Module)
' esempio: F:\Programmi\OpenOffice\Bin\OpenOffice.org 3\Basis\Program'
CropPath=right(FullPath, 35,2)
' evidenzia le subfolder della directory madre di OOo
' esempio \Bin\OpenOffice.org 3\Basis\Program'
CropPosition = InStr (ConvertFromURL (oPathSettings.Module), CropPath)
' individua la posizione dove interrompere la stringa del
OOoFolder=mid(ConvertFromURL (oPathSettings.Module) , 1,CropPosition)
'F:\Programmi\OpenOffice\
fRelativePathOOo = OOoFolder & "Progetto Mediateca\MEDIATECA.odb"
fRelativePathFile =  OOoFolder & "Progetto Mediateca\MEDIATECAodb"
' insert URL of the file you want to open. That file must be inside main OOo Folder or inside one of its subfolder
Shell(fRelativePathOOo,,fRelativePathFile)
End Sub

Re: Ricerca drive USB

Inviato: giovedì 21 novembre 2013, 19:48
da unlucky83
su un sistema linux saprei come farlo, ma su windows non sò

Re: Ricerca drive USB

Inviato: giovedì 21 novembre 2013, 22:13
da unlucky83
Chi sa usare c++ forse ci capisce qualcosa
http://www.openoffice.org/api/docs/cpp/ ... mation-641

Se riesci a far partire tramite la funzione Shell questo comando ms-dos (quindi per windows):

Codice: Seleziona tutto

mountvol > infodischi.txt 
ti ritrovi nel file infodischi.txt le lettere a cui sono associati i volumi montati.
Ho provato ad eseguire tramite macro:

Codice: Seleziona tutto

test=Shell("C:\Windows\System32\mountvol.exe",10," > C:\Users\[nome utente]\infodischi.txt"
ma il valore di test è sempre 0 :evil:
Comunque se riesci a crearti questo file, aprendolo con un'altra macro puoi andarti a leggere le lettere associate ai dischi. Con un ciclo for controlli in quali di questi dischi si trovano i file che stai cercando.

Re: Ricerca drive USB

Inviato: sabato 23 novembre 2013, 3:25
da unlucky83
Trovata una via grazie a questa pagina:

Codice: Seleziona tutto

https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=14220
Allego un file ods che ha le macro per estrapolare tutti i drive dei dischi, manca solo la macro per controllare se il file esiste in quel drive.
Basta eseguire la macro "Main",badando bene di impostare i percorsi per il Desktop e la cartella sysstem32 di winzoz.
Ho usato windows 7, quindi chi usa questo OS dovrebbe soltanto modificare il nome utente, a meno che non si chiami Barbara come mia sorella a cui sfilo il portatile :lol:

p.s.
con linux i comandi di shell vengono lanciati tranquillamente con la funzione shell di openoffice..con windows invece è un bel impiccio

Re: Ricerca drive USB

Inviato: lunedì 2 dicembre 2013, 14:48
da unlucky83
LUGIUDANI sembrava una cosa urgente e sei sparita...o hai dimenticato questa discussione?

Re: Ricerca drive USB

Inviato: giovedì 5 dicembre 2013, 9:21
da LUGIUDANI
No unlucky83, ma sai si sta avvicinando il Natale e quindi è periodo di preparativi, decorazioni e regali! Comunque, alla fine ho inserito il mio file direttamente nel drive dove avevo gli altri file da richiamare e quindi vado direttamente a ricercare il documento con questa macro, evitando di scrivere il percorso:

Codice: Seleziona tutto

Function FormatURL(Path() As Variant)
	Dim i, szPath$
	For i = LBound(Path()) To (UBound(Path()) - 1)
		szPath$ = szPath$ + Path(i) + "/"
	Next i
	FormatURL = szPath
end Function

Sub vaiProgrammi(Indirizzo)
dim szPath as string
	oDoc = ThisComponent
	szPath = FormatURL(Split(oDoc.Location, "/"))	
	Shell = CreateObject("shell.application")
	Shell.open ConvertToURL(szPath + Indirizzo)
End Sub
Poi trafugando un pò ho trovato anche questa macro, ma sto ancora cercando di capire che voce inserire al posto di sInPath$:

Codice: Seleziona tutto

Function ScegliUnaDirectory(Optional sInPath$) As String
  Dim oDialog As Object
  Dim oSFA As Object
  Dim s As String

  Rem Puoi quindi utilizzare com.sun.star.ui.dialogs.OfficeFolderPicker
  oDialog = CreateUnoService("com.sun.star.ui.dialogs.FolderPicker")
  oSFA = createUnoService("com.sun.star.ucb.SimpleFileAccess")
  
  If IsMissing(sInPath) Then
    oDialog.setDisplayDirectory(GetWorkDir())
  ElseIf oSFA.Exists(sInPath) Then
    oDialog.setDisplayDirectory(sInPath)
  Else
    s = "La Directory '" & sInPath & "' non esiste"
    If MsgBox(s, 33, "Errore") = 2 Then Exit Function
  End If
  
  If oDialog.Execute() = 1 Then
    ChooseADirectory() = oDialog.getDirectory()
  End If
End Function
Ho visto anche la tua macro ma volevo trovare un modo per non inserire il percorso come costante come hai fatto tu. Grazie comunque del suggerimento. :super:

Re: Ricerca drive USB

Inviato: giovedì 5 dicembre 2013, 12:07
da unlucky83
:mrgreen: Giusto, Natale è alle porte

Re: Ricerca drive USB

Inviato: lunedì 31 marzo 2014, 18:57
da LUGIUDANI
Per la ricerca del drive USB alla fine ho risolto in questo modo:

Codice: Seleziona tutto

 
'Funzione che apre un percorso
Function FormatURL(Path() As Variant)
	Dim  i, szPath$
	For i = LBound(Path()) To (UBound(Path()) - 1)
		szPath$ = szPath$ + Path(i) + "/"
	Next i
	FormatURL = szPath
end Function

Sub ApriDialog
dim oDoc, oDialog, oDialogModel as object
dim sdir, szPath as string
	oDialog = LoadDialog("Standard","Dialog1")
        oDialogModel = oDialog.Model
	oDoc = ThisComponent
	szPath  = FormatURL(Split(oDoc.Location,"/"))
	sdir = Left(szPath,11)
       'all'interno della parentesi va scritto il percorso da eseguire per la ricerca di una immagine, omettendo la dicitura: file:///, e la directory 
	oDialogModel.Pulsante.ImageURL = ConvertToURL(sdir + Salva.png) 

Re: Ricerca drive USB

Inviato: mercoledì 2 aprile 2014, 17:07
da patel
Grazie per aver condiviso la soluzione, ma il codice allegato non funziona preso a sé stante

Ricerca drive USB

Inviato: mercoledì 9 aprile 2014, 9:15
da LUGIUDANI
Ciao patel, sì è vero non funziona da sè e proprio ora che ho cambiato la chiavetta su un'altra porta, vedo che neanche la soluzione che avevo trovato è funzionante.
Uff... siccome calc prende i dati da un database, bisogna che il database venga registrato nella porta giusta per azionarlo.
Ci vorrebbe una macro che andasse a modificare anche il driver del database, ma credo sia impossibile!

Re: Ricerca drive USB

Inviato: giovedì 10 aprile 2014, 22:47
da unlucky83
Ciao...la mia soluzione non la preferisci solo per il fatto che devi dare l'url del desktop? Se così fosse, si potrebbero fare un paio di modifiche e dovrebbe andare bene. Se vuoi, sviluppo quella strada

Re: Ricerca drive USB

Inviato: domenica 13 aprile 2014, 10:16
da LUGIUDANI
Ciao...
Si, esatto; aspetto di vedere l'altra soluzione che proponi.

Re: Ricerca drive USB

Inviato: domenica 13 aprile 2014, 17:18
da unlucky83
Ti allego un altro file, provalo.
Devi solo personalizzare una costante

Codice: Seleziona tutto

REM  *****  BASIC  *****
rem mettere il percorso di un file presente nella chiavetta con il drive mancante
Public const percorsotest as string=":\casper\filesystem.manifest"
quindi, facendo riferimento al tuo primo messaggio, potresti mettere:

Codice: Seleziona tutto

Public const percorsotest as string=":\Progetto BilancioFamiliare\IMMAGINI\Contanti.png"
al termine dell'esecuzione della macro "main", il drive trovato è salvato nella variabile globale "drivegiusto"

Re: Ricerca drive USB

Inviato: lunedì 14 aprile 2014, 9:44
da LUGIUDANI
Ok, vedrò di dargli un'occhiata, intanto grazie!