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!

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):
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
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
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.

Re: Ricerca drive USB
Inviato: giovedì 5 dicembre 2013, 12:07
da unlucky83

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!