Newsgroup: it.comp.appl.access
Titolo: immagini collegate e percorsi relativi

purtroppo, sia nel sito comune che in rete non riesco a trovare la 
soluzione (ma forse ho cercato male).
 
access 2007 su Windows7
 
Immagini collegate in maschera e report. Funziona tutto fin quando non 
copio il DB sul portatile del capo (che vuole consultarlo anche fuori 
ufficio);
 
Ho provato a sostituire
 
c:\Users\UtenteIo\Documents\Cartella1\Cartella2\CognomeNome\photo.jpg
con
%USERPROFILE%\Cartella1\Cartella2\CognomeNome\photo.jpg
 
ma già così non funziona più nemmeno sulla mia macchina.
Dove sbaglio? Come procedo?
 
grazie in anticipo
ciao
-- 
Stefano
 


Puoi provare così
Environ("userprofile") & \Cartella1\Cartella2\CognomeNome\photo.jpg

Il 24/05/2017 10:45, scaronic ha scritto:
 
 > Puoi provare così
 > Environ("userprofile") & \Cartella1\Cartella2\CognomeNome\photo.jpg
purtroppo no, il risultato è sempre lo stesso.
Non credo di aver sbagliato sintassi; leggendo in rete mi pare di capire 
che Environ è una funzione che non posso inserire direttamente nel campo 
collegato all'immagine per sostituire un pezzo di percorso (come avevo 
immaginato di fare), ma descrivere da qualche parte per fare in modo che 
operi una variabile.
Corretto?
 
grazie e ciao
-- 
Stefano
 


Ciao.
Io le immagini nei report le gestisco via VBA, in questo modo con Environ puoi costruire il percorso dell'immagine.
La procedura che uso io è:
-inserisci nel report un'immagine non collegata 8alla fine è un oggetto vuoto), immagina di chiamare il controllo "immagine1"
-nella sezione del report in cui è inserita l'immagine (corpo, intestazione) crea un evento VBA su formattazione, ti si apre l'interfaccia VBA dove devi inserire qualche riga di codice, qualcosa tipo:
Private Sub corpo_format(Cancel As Integer, FormatCount As Integer)
me.immagine1.picture=percorso_completo_file_immagine
end sub.
 
dove percorso_completo_file_immagine devi costruirlo tu con environ o funzioni simili. Oppure puoi scrivere direttamente
me.immagine1.picture="C:\users\nomeutente\nomecartella\nomeimmagine.jpg"
Se l'immagine è una sola.
 
Altri più esperti di me sapranno consiglirti meglio, ma a me così funziona.
Ciao

Il 24/05/2017 16:45, oierpa ha scritto:
 
 > Se l'immagine è una sola.
purtroppo no, è una per scheda per più di 700 schede.
Ho usato il metodo dell'oggetto immagine vuoto collegato a un campo in 
tabella. Che non è lontanissimo dal tuo, perchè al posto della tua 
istruzione
 > me.immagine1.picture=percorso_completo_file_immagine
io ho
Me!ControlloImmagine.Picture = Me!PercorsoFoto
dove PercorsoFoto è un campo della tabella Anagrafica in cui è annotato 
il percorso. Che però perde di significato se sostituisco banalmente (mi 
ripeto)
 
*c:\Users\UtenteIo\Documents*
con
*%USERPROFILE%*
o con
*Environ(userprofile)*
 
e qui mi fermo.
grazie
-- 
Stefano
 


mmmh.
Io una volta salvavo il percorso per intero in un campo della tabella, ma non so se è una soluzione che può andarti a genio.
Altrimenti si può costruire il percorso dinamicamente a seconda di alcune condizioni (che però sai tu). Ad esempio se categorizzi le immagini in n tipologie si può costruire con qualche riga di codice la parte a sinistra del nome file completo. Se il percorso è per esempio:
C:\dir1\dir2\dir3\nomefile.jpg p
\\server\cartellaserver\nomefile.jpg
prima dei comandi:
me.controlloimmagine.picture=percorso
 
dim strPath as string
select case tuacondizione
   case 1
     strPath="C:\dir1\dir2\dir3\" & nomefile
   case 2
     strPath="\\server\dirimmagini\" & nomefile
   .....
End select
 
Poi inserirai:
me.controlloimmagine.picture=strPath
 
Si può rendere più sofisticato gestendo i casi in cui il file non lo trova e invece di andare in errore e bloccarsi, inserire un'immagine che ti crei con paint, photoshop o che ne so con scritto "immagine non trovata".
 
Environ o funzioni simili non sono da demonizzare per me, infatti possono aiutarti a creare quella stringa strPath di cui parlavo prima.
Se vuoi conoscere le informazioni utente (ad esempio il nome utente) per costruire strPath, io uso la funzione qui di seguito, recuperata da qualche parte su internet:
Public Function atCNames(UOrC As Integer) As String
'**************************************************
'Purpose:  Returns the User LogOn Name or ComputerName
'Accepts:  UorC; 1=User, anything else = computer
'Returns:  The Windows Networking name of the user or computer
'**************************************************
 
'funzione pubblica usata per estrarre nome utente e macchina.
On Error Resume Next
Dim NBuffer As String
Dim Buffsize As Long
Dim Wok As Long
 
Buffsize = 256
NBuffer = Space$(Buffsize)
 
If UOrC = 1 Then
    Wok = api_GetUserName(NBuffer, Buffsize)
    atCNames = Left$(NBuffer, InStr(NBuffer, Chr(0)) - 1)
Else
    Wok = api_GetComputerName(NBuffer, Buffsize)
    atCNames = Left$(NBuffer, InStr(NBuffer, Chr(0)) - 1)
End If
 
End Function
 
Ovviamente questo metodo sarà migliorabile e chi ha una formazioni più strutturata di me in materia sarà in grado di darti qualche suggerimento più snello ed efficiente, io sono un autodidatta e purtroppo non ho mai seguito corsi di programmazione ....
In bocca al lupo!


Con %USERPROFILE% non arrivi alla cartella Documents, ma solo all'utente
 
%USERPROFILE%\Documents\Cartella1\Cartella2\CognomeNome\photo.jpg
 
ma se hai xp non funziona per esempio

 ma se hai xp non funziona per esempio
ecco, la macchina del capo...
sicchè credo che sia irrisolvibile a meno di non portare, come suggeriva 
oierpa, i dati (o solo le foto) su una macchina terza: questa soluzione 
però porta il problema del messaggio di errore quando si è fuori 
ufficio. Se non c'è modo di farlo come vorrei credo che disabilitare il 
messaggio di errore ed andare avanti senza visualizzare la foto (che è 
solo un accessorio non fondamentale) sia la soluzione migliore.
Grazie.
 
 
ciao
-- 
Stefano
 


A dire il vero ci sono cartelle apposta in Win per la condivisione dei file indipendentemente dall'Utente. una per tutte %AppData%. Ma scusa, non ho letto tutto il post, quando sposti il db sposti anche tutte le immagini? Se si, allora fatti una cartella dentro la dir dove hai il portato il tuo file e la raggiungi semplicemente con Application.CurrentProject.Path & "\CartellaImmagini\......"

 End Function
e questa potrebbe essere invece ciò che risolve definitivamente la 
questione.
Ora faccio qualche prova e vediamo dove arrivo.
Grazie infinite.
 
ciao
-- 
Stefano
 

 A dire il vero ci sono cartelle apposta in Win per la condivisione dei file indipendentemente dall'Utente. una per tutte %AppData%. Ma scusa, non ho letto tutto il post, quando sposti il db sposti anche tutte le immagini? Se si, allora fatti una cartella dentro la dir dove hai il portato il tuo file e la raggiungi semplicemente con Application.CurrentProject.Path & "\CartellaImmagini\......"
Giusto.
proprio venerdi sono riuscito a risolvere grazie a questo tutorial
 
http://www.alfainfo.it/come-creare-un-database-con-microsoft-access/
 
 
Per postare la soluzione, che ovviamente sulla mia macchina funziona, 
volevo essere certo che funzionasse (non ho avuto ancora il tempo per la 
copia ed il trasferimento) ma, anche se so che Murphy è sempre in 
agguato, non mi pare di vedere ragioni per cui debba bloccarsi.
 
Ho spostato le foto dalle cartelle personali in una cartella all'interno 
della cartella che contiene il file mdb
Ecco il codice nella maschera (praticamente uguale a quello che suggerisci):
 
Private Sub Form_Current()
Me!ControlloImmagine.Picture = CurrentProject.Path & "\Foto\" & 
Me!PercorsoFoto
End Sub
 
Private Sub PathFoto_BeforeUpdate(Cancel As Integer)
Me!ControlloImmagine.Picture = CurrentProject.Path & "\Foto\" & 
Me!PercorsoFoto
End Sub
 
questo è il codice nel report
 
Private Sub Corpo_Format(Cancel As Integer, FormatCount As Integer)
 
Me!ControlloImmagine.Picture = CurrentProject.Path & "\Foto\" & 
Me!PercorsoFoto
End Sub
 
Grazie infinite a tutti
ciao
-- 
Stefano
 


una nota:
SE il report ha molte foto metti il codice all'evento Print (Corpo_Print): 
E' MOLTO PIU' PERFORMANTE

 ...
 
Da Access 2007 in poi, di solito è meglio di sostituire questo tipo di 
codice con il percorso nella proprietà "Origine Controllo" del controllo 
imagine:
 
=CurrentProject.Path & "\Foto\" & PercorsoFoto
 
Gioco fatto, sia nelle maschere (anche m. continue) sia nei report.
 
-- 
Ciao
Karl
*********
http://www.AccessDevCon.com
 
Access FAQ: 
http://www.donkarl.com/it
 

Il 29/05/2017 13:57, Karl Donaubauer ha scritto:
 
 >
 > Da Access 2007 in poi, di solito è meglio di sostituire questo tipo di
 > codice con il percorso nella proprietà "Origine Controllo" del controllo
 > imagine:
 >
 > =CurrentProject.Path & "\Foto\" & PercorsoFoto
 >
 > Gioco fatto, sia nelle maschere (anche m. continue) sia nei report.
provo immediatamente, grazie infinite
 
ciao
-- 
Stefano
 

Karl io ho lo stesso problema, putroppo non mi carica i jpg.
E' cambiato qualcosa?


 > Karl io ho lo stesso problema, putroppo non mi carica i jpg.
 > E' cambiato qualcosa?
 
No. Certo mancano tutti dettagli come versioni, bitness, metodi, prove 
con altri formati ecc. p.e. 2,5 anni fa in Access 2016 c'era questo bug:
http://blog.fmsinc.com/microsoft-access-2016-and-invisible-picture-images/
 


 E' cambiato qualcosa?
 
aggiungo un riscontro personale
(che porterebbe a dire: "si fa presto a dire jpg" ...)
 
mi è accaduto questo
(file mde Access 2000 e 2003 con il Runtime 2007,
quindi controlli immagine con origine a path file,
nel tempo PC con SO da Xp a Win 8)
 
foto "jpg" (estensione jpg, JPG, ma anche jpeg)
di capi di abbigliamento fatte dapprima con macchine fotografiche
e poi con i vari "telefonini"
 
ci sono stati un paio di casi in cui le foto di un dispositivo
NON venivano "risolte" da Access (e si vedevano con Windows !)
 
MA,
poiché le devo sempre comunque ridurre 
(per lo scopo utilizzo IrfanView: un suo command line)
a quel punto le immagini ritornavano visibili in Access
 
Quindi, almeno per curiosità, prova una loro "conversione"
con un tool esterno