Newsgroup: it.comp.appl.access
Titolo: Immagini.JPG da allegare

Ho un DB in Access 2000 xp che ho creato per l'archiviazione di una collana
di fumetti di cui sono un collezionista distratto (lo compro quando mi
ricordo).
Ho riprodotto le immagini delle copertine e le ho sistemate in una cartella
denominata "Cover".
Le immagini sono circa 400 e le ho nominate progressivamente partendo da
0001.jpg, 0002.jpg ecc. ecc.
Il mio problema è:
1) Se esiste un metodo per poterle allegare ad una tabella, ma in automatico
senza doverle allegare una alla volta;
2) quale impostazione del campo (tipo dati) è più corretto per lasciare il
DB il più "snello" possibile ma tale da poterle visualizzare in una maschera
a tale scopo preposta.
Grazie a chi ha avuto la pazienza di leggere ed in particolar modo a chi
vorrà aiutarmi.

 a tale scopo preposta.
In questi ultimi giorni ho avuto modo di fare un po' di esperienza su questo
argomento, dal momento che ho dovuto realizzare una cosa molto simile. Ho
chiesto aiuto su icaa e con un sofferto thread, con pesci che volavano
dappertutto (capirai se leggi il thread), alla fine una persona gentile e
competente (Carlo Costarella) mi ha dato un'imbeccata (dai un'occhiata al
thread "Aggiornare un campo OLE").
Questo sistema perň non calza per il tuo secondo punto. Infatti ho scoperto con
disappunto che Access incorpora le immagini sempre come bmp, anche se
originariamente erano jpg o gif. Questo comporterebbe nel tuo caso un database
di dimensioni enormi. In questo caso secondo me il metodo migliore č crearti
una tabella con un campo contenente il nome dell'immagine (p.e. 0001, 0002,
etc), crearti una maschera con questo campo, aggiungere alla maschera un
controllo immagine senza farlo puntare a nulla, e associare all'evento "Su
corrente" ("Current()") un semplice codice tipo questo:
Private Sub Form_Current()
strPath = CurrentDb().Name
CurrentDbPath = Left$(strPath, Len(strPath) - Len(Dir$(strPath)))
Immagine2.Picture = CurrentDbPath + "Cover\" + Codice + ".jpg"
End Sub
In questo modo, ogni volta che cambi record, il controllo Immagine2 viene
riempito con l'immagine relativa.
Un neo č che durante l'aggiornamento, per un brevissimo periodo si verifica uno
"sfarfallio" dello schermo, perchč viene visualizzato un messaggio relativo al
caricamento dell'immagine. Se qualcuno sapesse dirmi come evitarlo, mi farebbe
cosa gradita... :-) Probabilmente c'č qualche property da settare per farlo
lavorare "silente".
Io invece avevo un'esigenza piů complessa, in cui dovevo anche filtrare i
record provenienti dalla tabella, e creare un report di etichette contenenti le
immagini di cui sopra. Inoltre le etichette dovevano contenere un numero
variabile di immagini (record), ma sempre della stessa dimensione... Se fossi
interessato posso darti ulteriori dettagli.
Ciao. Claudio.

 Ciao. Claudio.
Ti ringrazio, Claudio, ed approfitto della tua disponibilità.
Premetto che mi sono avvicinato da poco al mondo Access e per diletto.
La mia, analizzando veramente i fatti, è una sfida tra me e la macchina,
così come avviene d'altronde nella vita reale.
Scusa ho divagato.
Ora ci provo
Ciao, Gabriele

 corrente" ("Current()") un semplice codice tipo questo:
la tabella si chiama                         "Collana"
il nome campo che ho creato è       "NCover"
la maschera si chiama                     "MascheraCollana"
controllo immagine                          "Immagini215"
nome campo sulla maschera            "NCover"
l'indirizzo delle immagini                    "D\Biblioteca\Collana\Cover\"
Scusa ma non sono riuscito ad inserire le voci al posto giusto
Potresti aiutarmi tu?
e se non chiedo troppo analizzare i vari codici così da comprenderne il
significato
Io li ho sostituiti in questa maniera -MA NON RIDERE!!!!
Private Sub Form_Current()
strPath = CurrentDb().Name
CurrentDbPath = Left$(strPath, Len(strPath) - Len(Dir$(strPath)))
Immagini215.Picture = CurrentDbPath + "D\Biblioteca\Collana\Cover\" +
NCover+ ".jpg"
End Sub
Ad onor del vero e per avere completo il quadro ti informo che alla maschera
e associata all'evento "su apertura"
ha questa routine evento che mi permette di andare subito all'ultimo Record
che è vuoto (spiegazione superflua per te)
Private Sub Form_Open(Cancel As Integer)
    On Error GoTo Err_Aggiungi_Record_Click
    DoCmd.GoToRecord , , acNewRec
    CasellaCombinata110 = ""
    CasellaCombinata110.SetFocus
Exit_Aggiungi_Record_Click:
    Exit Sub
Err_Aggiungi_Record_Click:
    MsgBox Err.Description
    Resume Exit_Aggiungi_Record_Click
End Sub
Ciao e grazie, Gabriele

 End Sub
Beh, tutto il faticoso lavoro che ho fatto con l'estrazione del path corrente
viene buttato via se già conosci il path completo ai file...
Però in questo modo se sposti il database in un'altra directory ovviamente il
tutto non funziona più. Inoltre immagino ci sia un errore nel path (forse
intendevi scrivere "D:\Biblioteca\Collana\Cover\").
Insomma, il tuo codice potrebbe essere corretto con:
Private Sub Form_Current()
Immagini215.Picture = "D:\Biblioteca\Collana\Cover\" + NCover + ".jpg"
End Sub
o meglio con:
Private Sub Form_Current()
strPath = CurrentDb().Name
CurrentDbPath = Left$(strPath, Len(strPath) - Len(Dir$(strPath)))
Immagini215.Picture = CurrentDbPath + "Cover\" + NCover + ".jpg"
End Sub
che funziona a patto di creare una directory Cover nella directory dove risiede
il database, nella quale inserire i jpg.
Infine bisognerebbe creare una piccola routine di gestione dell'errore nel caso
in cui non esista il file.
Ciao. Claudio.

 ha scritto nel messaggio
news:aiJi9.139914$pX1.4...@news2.tin.it...

Se vuoi meglio approfondire i concetti di Claudio, anche con degli esempi,
vai sul Sito Comune (link qui sotto) e nella Sezione General dai uno sgardo
a queste tre FAQ:
1) Come implementare correttamente un archivio di immagini di Stefano
Bettini
2) Implementare un archivio di immagini di Silvio Savoldi
3) Archiviazione immagini di Franco Cappellaro
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 Ciao. Claudio.


 Filters\Import\JPEG\Options
Direi proprio di sě... funziona alla grande. L'unica cosa da aggiungere č che
l'entry si chiama ShowProgressDialog, nella chiave da te indicata.
Grazie. Claudio.

 ha scritto nel messaggio
news:R0Yi9.68212$Hc7.4...@twister1.libero.it...

Grazie, Gabriele


Ti assicuro che il tuo tempo non è stato impegnato in vano, solo non avevo
capito che il codice riportava all'indirizzo voluto.
Avevo fatto alcuni errori dando per scontato che Immagini??? fosse corretto
ed invece era Immagine???
Per quanto riguarda la condizione e precisamente se il valore del campo =
nulla, dopo vari tentativi ho trovato la soluzione con
If IsNull(copertina) Then
Private Sub Form_Current()
   strPath = CurrentDb().Name
    CurrentDbPath = Left$(strPath, Len(strPath) - Len(Dir$(strPath)))
    If IsNull(copertina) Then
         Immagine117.Picture = Immagine119.Picture
    Else
    Immagine117.Picture = CurrentDbPath + "Cover\" + copertina + ".jpg"
End If
End Sub
ma c'è un'altra condizione per la quale mi restituisce un errore e cioè se
nella directory manca fisicamente il file (caso in cui non dovessi avere
quel dato fumetto).
Non ci sono riuscito
Qual è il codice giusto.
Grazie ancora, Gabriele

 Qual è il codice giusto.
Potresti aggiungere un "On Error GoTo ErrorHandler" all'inizio della routine, e
mettere in fondo una cosa di questo tipo:
ErrorHandler:
    Select Case Err.Number
        Case 2220
            If Dir$(CurrentDbPath + "Cover\Missing.jpg") = "" Then
                Immagine117.Picture = ""
            Else
                Immagine117.Picture = CurrentDbPath + "Cover\Missing.jpg"
                End If
            Resume Next
        Case Else
            Resume
    End Select
In questo modo avresti la possibilità di creare un file chiamato Missing.jpg
che verrebbe visualizzato tutte le volte che manca il file relativo. Per essere
proprio sicuro ho anche gestito la mancanza del file "Missing.jpg" (per evitare
il loop)! Più di così...
Ciao. Claudio.


Perché a me non riesce?
la barra di progressione la vedo comunque.
ciao, Gabriele

 Ciao. Claudio.
Scusa ma mi si blocca tutto.
Dimmi, per favore, dove sbaglio. e da un pò che ci provo:
Private Sub Form_Current()
On Error GoTo ErrorHandler
    strPath = CurrentDb().Name
    CurrentDbPath = Left$(strPath, Len(strPath) - Len(Dir$(strPath)))
    If IsNull(copertina) Then
        Immagine117.Picture = CurrentDbPath + "Cover\Missing.jpg"
    Else
    Immagine117.Picture = CurrentDbPath + "Cover\" + copertina + ".jpg"
    End If
ErrorHandler:
     Select Case Err.Number
         Case 2220
             If Dir$(CurrentDbPath + "Cover\Missing.jpg") = "" Then
               Immagine117.Picture = ""
             Else
               Immagine117.Picture = CurrentDbPath + "Cover\Missing.jpg"
                 End If
             Resume Next
         Case Else
             Resume
     End Select
End Sub
grazie, Gabriele

 End Sub
La prima modifica è necessaria, la seconda lo è diventata. Però potevi capirlo
da solo, anche semplicemente tracciando il programma...
Claudio.


Hai tutte le ragioni ma come si fa a tracciare il programma?...........
Basterebbe una pillola di sapere, si risparmierebbe un casino di tempo.
FUNZIONA sei stato gentilissimo e credimi ce la sto mettendo tutta per
cercare di capire ma evidentemente da autodidatta mi riesce difficile ma col
tempo chissà..........
Forse un giorno potrò essere utile a qualche sprovveduto di turno
(certamente non a te su questo argomento) .
Ciao e grazie ancora, Gabriele