Controllare la presenza di un file

di il
10 risposte

Controllare la presenza di un file

Buongiorno, 

nella mia applicazione faccio uso di fogli excel esterni tramite tabella collegata.

Prima dell'accesso a tali files tramite query, controllo se il file è presente con il seguente metodo:

    If (Len(Dir(strPathFileNameMagazzino)) > 0) Then
		preparo la query
    Else
		visualizzo un messaggio di errore
    End If

Questo metodo a volte funziona e a volte no.

Per fare i test cancello materialmente il file nella cartella e poi lancio la procedura.

Generalmente il codice sopra funziona correttamente e visualizza il messaggio di errore, a volte invece l'assenza del file non viene riconosciuta, viene preparata la query e al momento di lanciarla ho un errore di runtime (mi pare il 2070 ma non ne sono sicuro e comunque è indifferente) perchè non ci sono dati, non ci sono nemmeno i titoli delle colonne nel foglio excel ai quali la query fa riferimento.

A seguito di questo errore, nella cartella trovo il file excel con il nome corretto e vuoto, non ho ancora controllato se appare prima o dopo il lancio della query.

Quale può essere la ragione di questo comportamento ? Ho pensato ad un problema stile cache da aggiornare, nel senso che il controllo sopra fa riferimento al contenuto “vecchio" della cartella con il file ancora esistente (cancellato pochi secondi prima). 

C'è un metodo più affidabile ? C'è un metodo per assicurare l'accesso ad una lista aggiornata del contenuto della cartella ?

Grazie

Ste

10 Risposte

  • Re: Controllare la presenza di un file

    Dici che hai problemi se la query restituisce 0 record. Potresti creare un ulteriore controllo del tipo

    If DCount("*", “NomeQuery”) = 0 Then
  • Re: Controllare la presenza di un file

    Che tu faccia il controllo rpesenza del file tramite query… sono assai perplesso, quel codice con la query non ha nulla a che fare, se mai, condiziona lui la gestione della Query.

    Chiarisci bene le cose. 

  • Re: Controllare la presenza di un file

    Questo metodo a volte funziona e a volte no.

    No, il metodo funziona sempre. 

    Da dove viene il file excel?

  • Re: Controllare la presenza di un file

    Come generi o come è fatta la stringa Strpathfilenamemagazzino?

  • Re: Controllare la presenza di un file

    13/01/2023 - OsvaldoLaviosa ha scritto:


    Dici che hai problemi se la query restituisce 0 record. Potresti creare un ulteriore controllo del tipo

    If DCount("*", “NomeQuery”) = 0 Then

    Mah, questo lo potrei anche aggiungere, ma il problema è che se il file excel manca non ci deve arrivare alla generazione e al lancio della query…  Il problema è che a volte lo vede presente anche se l'ho cancellato (manualmente, non via vba) e questo accade casualmente, tale da non riuscire ad intercettarlo in debug. 

  • Re: Controllare la presenza di un file

    13/01/2023 - @Alex ha scritto:


    Che tu faccia il controllo rpesenza del file tramite query… sono assai perplesso, quel codice con la query non ha nulla a che fare, se mai, condiziona lui la gestione della Query.

    Chiarisci bene le cose. 

    Ma dove ?

    La query non viene preparata se il file non c'è, il problema è che il controllo mi restituisce il falso e non capisco il motivo

  • Re: Controllare la presenza di un file

    13/01/2023 - oregon ha scritto:


    Questo metodo a volte funziona e a volte no.

    No, il metodo funziona sempre. 

    Da dove viene il file excel?

    Non capisco la domanda dato che il file è CANCELLATO, comunque viene generato da un gestionale aziendale.

    Ma, ripeto, il file lo cancello io a mano prima di avviare la procedura.

    Quando avvio la procedura si apre in automatico una maschera di avvio, questo controllo sta nel codice che viene eseguito all'apertura della maschera.

  • Re: Controllare la presenza di un file

    13/01/2023 - Antony73 ha scritto:


    Come generi o come è fatta la stringa Strpathfilenamemagazzino?

    La stringa è scritta a mano nel codice, attualmente vale 

    Public Const strPathFileNameMagazzino = "C:\Users\Boss\Documents\Progetti\MagazzinoComponenti.xls"

    poi prenderà il path del server dove risiederà il file.

  • Re: Controllare la presenza di un file

    Non capisco la domanda

    Eppure è semplice

     viene generato da un gestional.

    Vedi, la risposta era semplice.

    dato che cancelli il file, subito dopo fai f5 per vedere sulla cartella se ne viene generato un altro e se avviene quando succede   

  • Re: Controllare la presenza di un file

    13/01/2023 - oregon ha scritto:


    Non capisco la domanda

    Eppure è semplice

     viene generato da un gestional.

    Vedi, la risposta era semplice.

    dato che cancelli il file, subito dopo fai f5 per vedere sulla cartella se ne viene generato un altro e se avviene quando succede   

    Perdona l'equivoco, la mia risposta era riferita alla realtà operativa finale.

    Qui sul mio pc non ho il gestionale, i files excel li ripristino io a mano copiandoli dalle copie di sicurezza.

    L'unica possibilità che mi viene in mente è che lo faccia access stesso con qualche funzione che non conosco legata alla gestione delle tabelle collegate, altrimenti non mi spiego in quale altro modo sia possibile (esclusi i fantasmi).

    Dall'ora di pranzo a ora ho provato decine di volte e l'errore non si è mai verificato.

    Grazie

    Ste

    [EDIT] Puntualizzo, questo controllo viene fatto all'avvio della procedura, non c'è ancora niente di aperto fra i recordset, non è ancora stata lanciata alcuna query fra le tante disponibili a meno che non lo faccia Access autonomamente per i suoi turpi scopi. Il codice in questione è sotteso all'evento Su Caricamento della maschera frmAvvio indicata nelle opzioni di Access come maschera da attivare all'avvio.

Devi accedere o registrarti per scrivere nel forum
10 risposte