Newsgroup: it.comp.appl.access
Titolo: Routine per salvare in locale immagini internet

Ciao a tutti,
    Vi pongo un quesito che magari è molto banale ma sui cui è un po'
che sto riflettendo. Ho una tabella con 2 colonne nella prima c'è il
codice di un articolo, nella seconda un url esterno che punta ad una
immagine (del tipo 
http://www.domino.it/immagine1.jpg
).
Mi chiedevo se era possibile  creare una routine affinché riuscissi ad
effettuare il download di tutte le immagini della seconda colonna su
di una specifica cartella in locale.
Avete qualche idea?
Grazie in anticipo per l'aiuto.
Paolo
Vicenza

 Vicenza
Direi di si è decisamente fattibile.
Quì trovi la soluzione:
http://vbnet.mvps.org/code/internet/urldownloadtofile.htm
@Alex


Do subito un'occhiata.
Grazie mille


Ciao, vedo se potete darmi ancora una mano, ho riportato qui sotto il
codice che ho modificato per le mie esigenze. Probabilmente m'è
sfuggito qualcosa con l'inglese, ma sebbene la routine "giri", non mi
scarica nessuna immagine.
Mi sapreste aiutare?
ciao e grazie comunque
Option Explicit
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Copyright ©1996-2006 VBnet, Randy Birch, All Rights Reserved.
' Some pages may also contain other copyrights by the author.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Distribution: You can freely use this code in your own
'               applications, but you may not reproduce
'               or publish this code on any web site,
'               online service, or distribute as source
'               on any media without express permission.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Declare Function URLDownloadToFile Lib "urlmon" _
   Alias "URLDownloadToFileA" _
  (ByVal pCaller As Long, _
   ByVal szURL As String, _
   ByVal szFileName As String, _
   ByVal dwReserved As Long, _
   ByVal lpfnCB As Long) As Long
Private Const ERROR_SUCCESS As Long = 0
Private Const BINDF_GETNEWESTVERSION As Long = &H10
Private Const INTERNET_FLAG_RELOAD As Long = &H80000000
Private Sub Comando0_Click()
    On Error GoTo Command0_Click_error
    Dim sSourceUrl As String
    Dim sLocalFile As String
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("SELECT Codice, img1, img1L FROM
tabElencoImmagini WHERE img1 <> ''")
    With rs
        .MoveFirst
        While Not .EOF
            sSourceUrl = !img1
            sLocalFile = !img1L
            DownloadFile sSourceUrl, sLocalFile
            .MoveNext
        Wend
    .Close
    End With
Command0_Click_error:
    MsgBox Err.Number & " " & Err.Description
End Sub
Public Function DownloadFile(sSourceUrl As String, _
                             sLocalFile As String) As Boolean
  'Download the file. BINDF_GETNEWESTVERSION forces
  'the API to download from the specified source.
  'Passing 0& as dwReserved causes the locally-cached
  'copy to be downloaded, if available. If the API
  'returns ERROR_SUCCESS (0), DownloadFile returns True.
   DownloadFile = URLDownloadToFile(0&, _
                                    sSourceUrl, _
                                    sLocalFile, _
                                    BINDF_GETNEWESTVERSION, _
                                    0&) = ERROR_SUCCESS
End Function


Prova ad eseguire una chiamata SINGOLA... sei certo che possa andare
in modo Sincrono...?
@Alex


in effetti se faccio la chiamata ad una singola immagine riesco ad
effettuare il download, non appena che provo a fare un loop no.
non mi viene però in mente come fare altrimenti
grazie comuque


Scusami l'ignoranza senza confini Alex, ma cosa intendi con "sei certo



Visto che l'azione SINGOLA funziona, l'avevo provato anch'io... mi è
venuto il dubbio che il problema fosse proprio nel Ciclo...!
Ora non ho controllato il tuo codice, ma prova a mettere un DoEvents
dopo la chiamata al DownLoad... se non funziona la vedo dura... dovrai
provare ad aprire un processo e settarlo in modo da attendere fino
alla fine e renderlo così Sincrono...!
@Alex


Ciao Alex,
  ok con il DoEvents.
Alla fine il codice funzionante è quello che riporto qui sotto, ho
creato un passaggio su due etichette al fine di verificare che il
programma sta di fatto lavorando e non sia bloccato.
Grazie moltissime per l'aiuto
Option Compare Database
Option Explicit
Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
"URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, _
ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As
_
Long) As Long
Public Function DownloadFile(URL As String, LocalFilename As String)
As Boolean
    Dim lngRetVal As Long
    lngRetVal = URLDownloadToFile(0, URL, LocalFilename, 0, 0)
    If lngRetVal = 0 Then DownloadFile = True
End Function
Private Sub Comando0_Click()
    On Error GoTo Command0_Click_error
    Dim sSourceUrl As String
    Dim sLocalFile As String
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("tabElencoImmagini")
    With rs
        .MoveFirst
        While Not .EOF
            Me!lblSorgente.Caption = !Img1      'img1 è il campo in
cui c'è l'indirizzo remoto
            Me!lblDestinazione.Caption = !img1L   'campo in cui
specifico il percorso in cui deve essere salvata l'immagine.
            sSourceUrl = Me!lblSorgente.Caption
            sLocalFile = Me!lblDestinazione.Caption
            DownloadFile sSourceUrl, sLocalFile
            DoEvents
