Newsgroup: it.comp.appl.access
Titolo: Opload fallito

Ogni notte un file mdb Access2003 viene uppato in uno spazio web Altervista usando la funzione Api FtpPutFile.
Tutto bene fino a una decina di giorni fa quando ha cominciato (random, non sempre) a scrivere il file, ma il contenuto 
è vuoto o incompleto, quidi illegibile.
 
Siccome immagino che il problema sia più lato web, qualcuno ci è gia passato e come ha risolto? Usanfo un'altra 
funzione o un programmino già pronto da lanciare all'ora x? Grazie per ogni info
 
 
 
 
Public Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" _
(ByVal hFtpSession As Long, ByVal lpszLocalFile As String, _
      ByVal lpszRemoteFile As String, _
      ByVal dwFlags As Long, ByVal dwContext As Long) As Boolean
 
-- 
Greg

Diciamo che se usi solo la chiamata che hai esposto... sicuramente risparmi codice... ma...
Ad esempio la connessione la presenza della connessione ad Internet la Verifichi...?
La connessione al Server FTP la verifichi...?
 
Perchè non usi una funzione più strutturata...?
 
Guarda questa:
 
https://analystcave.com/vba-downloading-files-from-ftp-using-vba/
 
 
ma ancora meglio questo metodo che consente la gestione SINCRONA del pacchetto...
 
https://www.experts-exchange.com/questions/21591651/Finally-FTP-Wininet-Async-Callback-BUT.html
 
 
oppure questo:
https://stackoverflow.com/questions/3026308/how-can-i-upload-data-using-ftp-http-or-a-socket-from-a-spreadsheet-with-vba-f
 
 
@Alex

 
https://stackoverflow.com/questions/3026308/how-can-i-upload-data-using-ftp-http-or-a-socket-from-a-spreadsheet-with-vba-f
 
 
e questa è identica a quella che uso, anche se wrappata in modo diverso:
Public Sub PutFile(LocalFilename As String, RemoteFilename As String)
    If FtpPutFile(m_hFtp, LocalFilename, RemoteFilename, FTP_TRANSFER_TYPE_BINARY, 0) = 0 Then
        Err.Raise vbObjectError + 1, , LastError
    End If
End Sub
 
io la uso cosi ma cambia poco:
 
x= FtpPutFile(m_hFtp, LocalFilename, RemoteFilename, FTP_TRANSFER_TYPE_BINARY, 0)
if x= 0 then
 ..........
 else
  .........
end if
 
-- 
Greg

Greg sei frettoloso... il link che dici essere per il download in realtà basta scorrere la pagina e trovi l'upload.
 
@Alex

 @Alex
 
Si scusa, la fretta, l'ansia...
Comuque vedo meglio adesso, ma mi pare che, con costrutti diversi, viene sempre usata la medesima funzione 
FtpPutFile().
 
Oggi pomeriggio, non avendo ancora risolto, ho fatto varie prove, da cui si evince che la funzione va ache bene, ma non 
in tutti i casi.
Ho messo di fila 3 funzioni identiche: la prima uppa un file di testo di 1K e va tutto bene, la seconda carica un mdb 
da 400k e fallisce(dopo aver caricato per il 25% circa), la terza uppa un mdb da 10 MB e fallisce (dopo aver caricato 
per l'80% circa). E quindi non saprei che conclusioni trarre.
 
 r1 = FtpPutFile(hConnection, App.Path & "\LogFile.txt", fDest, dwType, 0) 'file di 1k  ok
 r2 = FtpPutFile(hConnection, xDB, fDest3, dwType, 0)   ' fallisce dopo 100k su 400
 r3 = FtpPutFile(hConnection, xDB2, fDest4, dwType, 0)  ' fallisce dopo 7-8 mega su 10
 
dwType su Binary o ascii non cambia nulla
 
-- 
Greg


La funzione API per l'invio FILE FTP è quella... altrimenti devi cambiare completamente metodo...
Un'altro metodo è usare un BAT per lanciare il comando FTP, trovi quì il codice...(leggi bene tutto però)
 
https://www.ozgrid.com/forum/forum/help-forums/excel-general/38607-ftp-from-within-excel-vba?t=47625
 
 
Oppure questo:
https://www.reddit.com/r/excel/comments/6ye0m7/upload_xlsx_file_to_ftpserver/
 
 
Un'altro modo è usare SHELL:
http://www.riolab.org/index.php?option=com_content&view=article&id=209&Itemid=69
 
 
Altra possibilità è usare il componente INET... da istanziare ovviamente...
 
Sub Get_File_From_FTP()
    'Variable Declarion Section
    Dim FTP As Inet
 
    'Assign Host URL, Source and Destination File path
    HostURL = ThisWorkbook.Sheets(1).Cells(1, 1)
    FileSource = ThisWorkbook.Sheets(1).Cells(1, 2)
    FileDestination = ThisWorkbook.Sheets(1).Cells(2, 2)
 
    'Create New instance of Object and Assign the Parameters
    Set FTP = New Inet
    With FTP
        .URL = HostURL
        .Protocol = icFTP
        'Replace with your Login and Password Below. Many FTP servers allow Anonymous access with below credentials
        .UserName = "anonymous"
        .Password = "
ma...@gmail.com
"
        .AccessType = icUseDefault
        'Use "Get" to Download and "Put" Option to Upload File to FTP Server
        .Execute .URL, "Get " & FileSource & " " & FileDestination
    End With
    Do While FTP.StillExecuting
        DoEvents
    Loop
 
    'Status of FTP through Voice Message
    Application.Speech.Speak "Process Completed;" & FTP.ResponseInfo
 
    If FTP.ResponseCode = 0 Then
        'SomeTime FTP steps will execute successfully, but file will not be there in Destination path
        'Search for the file in the Path mentioned in this Message Box
        MsgBox "File is Copied to :" & VBA.CurDir
    End If
    Set FTP = Nothing
End Sub
 
Io usavo il Socket direttamente con il componente Activex WINSOCK ma da quanto non è più fruibile meglio INET...
 
Vedio tu...
@Alex

 @Alex
 
Grazie Alex, vedrò di riprendere in mano e l'oggetto INET che a suo tempo avevo scartato in favore dell'Api, in quanto 
un oggetto in meno da portarsi dietro.
Ciao
 
-- 
Greg

 Siccome immagino che il problema sia più lato web, qualcuno ci è gia passato e come ha risolto? 
 
mi sembra (MI SEMBRA ...) che in precedenza un quesito simile abbia avuto una auto-risposta:
 
che in Altervista era cambiata la policy di accettazione file e che si doveva espressamente indicare un file mdb (anche zippato ?) come file "accettabile"

Il 02/03/19 12:51:00 GiorgioDaPrato ha scritto:

Ciao Giorgio,
hai buona memoria, se ti riferisci al mio 3d dello scorso settembre:
https://groups.google.com/forum/#!searchin/it.comp.appl.access/altervista%7Csort:date/it.comp.appl.access/41ooURS3k0g/8C4_5-IzCQAJ
 
 
Allora, si avevo risolto cambiando un flag nell'api, ma stavolta non saprei cosa fare.
Ieri sera sembrava risolto perchè per qualche ora andava tutto bene, ma da stamattina di nuovo tutto bloccato.
I files viengono uppati ma sono a zero bytes
 
-- 
Greg

 I files viengono uppati ma sono a zero bytes
 
allora posso aggiungere un' altra possibilità di upload via FTP
a me funziona da qualche anno su uno spazio FTP aziendale
(è una routine in cui ho copiato pari pari istruzioni vbscript,
ricordo di averla testata proprio su Altervista, ma NON di recente)
 
Sub invioFtp(pathFile) 'pathFile: percorso completo del file
On Error GoTo erore
Set oShell = CreateObject("Shell.Application")
Set objFSO = CreateObject("Scripting.FileSystemObject")
'Const copyType = 16 '-->16: lo indico direttamente quando necessario
FTPUser = "stringaUser"
FTPPass = "stringaPassword"
FTPHost = "stringaHost" 'qui, per me è proprio il nome del sito
FTPDir = "stringaDirectory" 'qui, per me, ci sono slash INIZIALE E FINALE
 
strFTP = "ftp://" & FTPUser & ":" & FTPPass & "@" & FTPHost & FTPDir
Set objFTP = oShell.NameSpace(strFTP)
 
'Upload single file
Set objFile = objFSO.GetFile(pathFile)
strParent = objFile.ParentFolder
Set objFolder = oShell.NameSpace(strParent)
 
Set objItem = objFolder.ParseName(objFile.Name)
objFTP.CopyHere objItem, 16
 
Set oShell = Nothing
Set objFSO = Nothing
Set objFTP = Nothing
Set objFile = Nothing
Set objFolder = Nothing
Set objItem = Nothing
 
Exit Sub
 
erore:
 
MsgBox Err.Number & " " & Err.Description, vbCritical
End Sub
 

 un oggetto in meno da portarsi dietro.
 
 
 
Potresti provare anche Ftp.exe che è preinstallato su windows.
In rete trovi parecchi esempi.
 
Saluti
 

Speriamo non sia uno dei suggerimenti che avevo dato prima... ;-) e che bastava leggere... questo come l'altro...
 
Vabbè...
 
@Alex

 Speriamo non sia uno dei suggerimenti che avevo dato prima... ;-) e che bastava leggere... questo come l'altro...
 
 
Non ci giurerei, ma se anche fosse sopravviveremo!
 
Saluti

Prova a leggere bene... ma ovviamente io ceno ugualmente oggi ed anche domani...
 
@Alex

 @Alex
 
Scusami Alex, lo so che sono andato troppo veloce a leggere il tuo pos, ma mi avevi suggerito pure ftp.exe? Ma devo 
essere orbo, non lo vedo ancora :(
Dovrei pure rinnovare la patente il mese prossimo, speriamo bene!
 
-- 
Greg

 In rete trovi parecchi esempi.
 
Grazie del suggerimento, in rete ho trovato poco, perchè sono tutti post molto vecchi e il link spesso risulta non 
funzionante.
Ad ogni modo ne ho trovato uno per un as400, l'ho adattato, sono riuscito a connettermi, e files risultano caricati e 
scaricati parzialmente, in fase di upload ha pure segnalato l'errore, in fase di download no, ma il file è incopleto lo 
stesso.
 
Questi i comandi inviati:
open xxxx
user xxx
put C:\dati.mdb aaaa.mdb
get test.txt c:\test.txt
close
quit
 
Queste le risposte:
ftp> Connesso a ftp.xxxx
open xxxx
220---------- AlterVista FTP ----------
220-Sei l'utente numero 14 di 256 consentiti
220-L'ora locale è 19:41. Porta del server: 21.
220-Questo è un sistema privato - Nessun login anonimo
220 Sarai disconnesso dopo 5 minuti di inattività.
ftp> user xxxx
331 Utente xxxx OK. Richiesta password
230-La velocità di download via FTP è limitata, usa il browser se devi fare il download di files molto grandi
230 OK. La directory limitata corrente è /
ftp> put C:\dati.mdb aaaa.mdb
200 Comando PORT eseguito con successo
150 Mi sto collegando alla porta 33392
226-Errore durante la scrittura sul file  <- QUI ERRORE
226-Trasferimento annullato
226 0.222 secondi (misurati qui)
ftp: 65536 bytes sent in secondi Kbyte/sec)
ftp> 0,27241,83get test.txt c:\test.txt
200 Comando PORT eseguito con successo
150-Mi sto collegando alla porta 33393
150 11.8 kbytes da downloadare
226-File trasferito con successo         <- NON è VERO, FILE INCOMPLETO
226 0.067 secondi (misurati qui)
ftp: 12213 bytes received in secondi Kbyte/sec)
ftp> 0,06190,83close
221-Arrivederci. Hai uploadato 76 e downloadato 12 kbytes.
221 Logout.
ftp> quit
 
Ho notato che i comandi sono quelli che usa Filezilla, che va bene, tuttavia Filezilla ne usa molti di piu, ma non 
saprei come valorizzarli, ag ogni modo li elenco sotto:
 
syst
feat
typeI
pasv
mlsd
 
-- 
Greg

Si in generale come già ti dissi all'inizio hai espresso una discreta fretta nella lettura...
 
https://www.ozgrid.com/forum/forum/help-forums/excel-general/38607-ftp-from-within-excel-vba?t=47625
 
 
La riga di comando che leggi secondo me usa... ftp.exe che essendo un exe supporta l'omissione dell'estensione...
 
Anche quanto suggerito da Giorgio è presente in un'altro link...
 
In ogni caso... farai un po come ti pare... 
 
@Alex

 226-File trasferito con successo         <- NON è VERO, FILE INCOMPLETO
 
Correggo: l'errore sul download non c'è, il file ha le stesse dimensini.
C'è un solo errore, sull'upload di un file di circa 300k
 
-- 
Greg

 Prova a leggere bene... ma ovviamente io ceno ugualmente oggi ed anche domani...
 
 
Troppa fatica leggere tutta quella roba, soprattutto dopo mesi di FT Xml.
Ma, come dicevo, se pure avessi replicato cose già scritte, il mondo non crollerà.
 
Saluti

Nutro grande passione pure io per la F.E. finalmente un argomento interessante... e purtroppo pare, che nemmeno per questo ottimo spunto di innovazione tecnica si fermi il mondo...
 
Buona domenica.
@Alex

Il 02/03/19 20:57:20 @Alex ha scritto:

Allora oggi pomeriggio ho fatto qualche prova con Ftp.exe.
Si connette, comincia a caricare e poi si verifica un errore.
Però per scrupolo ho voluto provare su un altri spazi web, sia altervista che non, e l'Ftp.exe funziona smepre bene, 
sempre con il medesimo file di test.
 
A questo punto non è piu nel codice, ma mi chiedo cosa potrebbe essere e non ho idea
 
Un grazie a tutti e due
Buona domenica, quello che resta :)
 
-- 
Greg

 Nutro grande passione pure io per la F.E. finalmente un argomento interessante... e purtroppo pare, che nemmeno per questo ottimo spunto di innovazione tecnica si fermi il mondo...
 
 
Dici?
Il mondo magari non si fermerà per la F.E., ma l'Italia ci sta andando vicino!
 
Saluti

Secondo il Sole24ore è in forte aumento il nero
 
-- 
Greg

Il 03/03/19 18:55:19 
simoca...@gmail.com
 ha scritto:

Secondo IlSole24Ore è in forte aumento il nero
 
-- 
Greg

 
ricontrolla le regole di fruizione del servizio Altervista,
avevo (ho ancora, ma poco usata) una iscrizione free
e ho ricevuto, anche di recente, comunicazioni a riguardo con variazioni "unilaterali" (come è da aspettarsi)
 
In particolare per le utenze free, SE è il tuo caso,
NON è possibile usare il loro spazio come mero "deposito cloud".
In altre parole: un download NON può essere privo di link 
evidente in una delle pagine pubblicate 
(e pagine "davvero" pubbliche:
perchè credo possano riuscire a distinguere chi scarica gli upload  ...)

Il 04/03/19 10:40:10 GiorgioDaPrato ha scritto:

Per questo  non ci sono problemi, i download hanno un link sulla pagina pubblica, ma io parlavo di Upload
 
-- 
Greg

Il 04/03/19 11:51:54 Greg ha scritto:

Il tuo post mi ha fatto venire però un altro dubbio: che ci fosse unq aulche limitazione allo spazio?
Ed era proprio quallo il problema, bastare ripulire roba vecchia e inutile e tutto è tornato normale.
 
Il guaio è che gestendo molti siti con Filezilla perchè è piu comodo, invece di accedere con l'interfaccia dell'host, 
si perdono i messaggi come questo: spazio esaurito!
 
Si impara sempre.
Un grazie a tutti
 
-- 
Greg