Problema aggiornamento automatico path tabelle collegate su file CSV

di il
5 risposte

Problema aggiornamento automatico path tabelle collegate su file CSV

Buongiorno a tutti.
Spero che qualcuno possa darmi un suggerimento/soluzione ad un problema su cui sto sbattendo la testa da 2 settimane.

Ho creato un DB access che con un po' di codice, esegue macro, copia dati su file excel, aggiorna pivot....insomma fa tante belle cosine che se no avrei dovuto fare a manina.

Siccome ora la versione è quasi "definitiva", volevo darla anche ai miei colleghi, senza però vincolarli a salvare il DB in una determinata cartella.
Quindi ho scritto un po' di codice che in automatico all'apertura, confronta la cartella dove si trova attualmente il DB con un percorso che salvo su un file TXT, e, se diverso, aggiorno i path delle tabelle collegate.

Fin qui tutto bello. Peccato che nel DB, per comodità, oltre a delle tabelle Excel per cui il codice va benissimo, ho collegato anche dei file ".csv", che sono in una cartella "input", e che i miei colleghi andranno a sostituire man mano che escono i dati nuovi con dei nuovi csv che chiameranno sempre allo stesso nome.

Di seguito il codice: i primi 2 file che sono .xlsx vanno via che è una meraviglia. Poi ho 5 .csv (di cui vi posto uno solo per comodità), e tutti e 5 mi danno "Errore di run-time '3044': 'C:\percorsogiusto\Fatture_Scadute.csv' non è un percorso valido."
Eppure il percorso è corretto, e testato anche con gli altri file excel che sono stati aggiornati correttamente....

Per favore aiutatemi o cadrò in depressione !

Dim percorso As String
    percorso = CurrentProject.Path
    'Trovo in che cartella è stato copiato il DB
   
    Dim File
    Set oFSO1 = CreateObject("Scripting.FileSystemObject")
    File = percorso & "\utilità\Percorso.txt"
    Set oTXT = oFSO1.OpenTextFile(File, 1, True)
    Line = oTXT.ReadLine
    'Carico il percorso originario del DB
   
    If Line <> percorso Then
        Dim tdf As DAO.TableDef
        Dim Db As DAO.Database
        
        Set Db = CurrentDb()
        
        Set tdf = Db.TableDefs("GiorniMese")
        tdf.Connect = "Excel 12.0 Xml;HDR=NO;IMEX=2;ACCDB=YES;DATABASE=" & percorso & "\utilità\Mese_Giorni.xlsx"
        tdf.RefreshLink
        
        Set tdf = Db.TableDefs("Racc_Rating_Testo")
        tdf.Connect = "Excel 12.0 Xml;HDR=NO;IMEX=2;ACCDB=YES;DATABASE=" & percorso & "\utilità\Raccordo Rating testo.xlsx"
        tdf.RefreshLink
        
        Set tdf = Db.TableDefs("Fatture_Scadute")
        tdf.Connect = "Text;HDR=YES;FMT=TabDelimited;DATABASE=" & percorso & "\input\Fatture_Scadute.csv"
	tdf.RefreshLink

5 Risposte

  • Re: Problema aggiornamento automatico path tabelle collegate su file CSV

    Una verifica dalla finestra immediata
    ? Dir("percorso\completo\e\nomedelfile.cvs")
    Se restituisce il nome del file significa che lo trova.
    Scrivi la stessa cosa immediatamente prima del codice con cui modifichi la proprietà Connect dell'oggetto tdf, imposta un punto di blocco dell'esecuzione e guarda cosa compare sempre nella finestra immediata.

    Passaggio successivo, da fare comunque.
    Su un database con il collegamento ad un file csv funzionante, sulla finestra immediata di VBE scrivi
    ? DBEngine(0)(0).TableDefs("nometabellacollegata").Connect
    Comparirà la stringa completa e giusta. Scrivila anche qui e vediamo se ci sono cose strane su cui puntare l'attenzione
  • Re: Problema aggiornamento automatico path tabelle collegate su file CSV

    Print Dir (percorso & "\input\Fatture_Scadute.csv")
    Fatture_Scadute.csv

    Il nome file me lo restituisce, quindi è corretto

    Print DBEngine(0)(0).TableDefs("Fatture_Scadute").Connect
    Text;DSN=Fatture_Scadute - specifica di collegamento;FMT=Delimited;HDR=NO;IMEX=2;CharacterSet=850;ACCDB=YES;DATABASE=C:\Nuovo QC_DT\Input

    Ho usato l'altro comando sullo stesso DB ma la versione precedente senza gli aggiornamenti automatici delle tabelle collegate.
    Mmmm....le specifiche sono differenti....vuoi dire che con questo risolvo ?

    Ora provo subito....anzi no, ora vado a letto che sono in piedi dalle 6 e comincio a vedere sfocato

    Domattina a lavoro provo e vi faccio sapere !
  • Re: Problema aggiornamento automatico path tabelle collegate su file CSV

    Philcattivocarattere ha scritto:


    Una verifica dalla finestra immediata
    ? Dir("percorso\completo\e\nomedelfile.cvs")
    Se restituisce il nome del file significa che lo trova.
    Scrivi la stessa cosa immediatamente prima del codice con cui modifichi la proprietà Connect dell'oggetto tdf, imposta un punto di blocco dell'esecuzione e guarda cosa compare sempre nella finestra immediata.

    Passaggio successivo, da fare comunque.
    Su un database con il collegamento ad un file csv funzionante, sulla finestra immediata di VBE scrivi
    ? DBEngine(0)(0).TableDefs("nometabellacollegata").Connect
    Comparirà la stringa completa e giusta. Scrivila anche qui e vediamo se ci sono cose strane su cui puntare l'attenzione
    Ce l'ho fatta!
    Grazie!!!

    Alla fine ho risolto usando ció che mi restituivano i 2 comandi che mi hai fatto fare, e facendo

    tdf.Connect = "Text;DSN=Fatture_Scadute - specifica di collegamento;FMT=Delimited;HDR=NO;IMEX=2;CharacterSet=850;ACCDB=YES;DATABASE=" & percorso & "\input"

    non dà errori ed aggiorna il path!

    Yuppiiiiii
  • Re: Problema aggiornamento automatico path tabelle collegate su file CSV

    Tutta questa "cosa" prende il nome di Relink delle LinkedTable... cosa estremamente normale...!
  • Re: Problema aggiornamento automatico path tabelle collegate su file CSV

    @Alex ha scritto:


    Tutta questa "cosa" prende il nome di Relink delle LinkedTable... cosa estremamente normale...!
    Hai ragione, ma da nessuna parte sono riuscito a trovare una spiegazione esaustiva / un indice sui vari parametri da mettere.

    Ad esempio, i file .xlsx che mi aggiornava, avevano dei parametri sballati, quindi mi aggiornava si il percorso, ma poi mi sballava tutti i campi delle query !!!

    In ogni caso questa mattina ho sistemato tutto ed ho cominciato un'altra implementazione, che mi sta creando altri problemi....ora vedo se riesco a risolvere, altrimenti mi toccherò aprire un nuovo thread

    P.S. tieni conto che io ho fatto Visual Basic 3 anni alle superiori, e mi sono diplomato nel 2002, e da allora non ho fatto più nulla, quindi qualche annetto è passato. Diciamo che la "logica" mi è rimasta, ma tutto il resto lo sto testando/copiando/adattando di mio, con discreti risultati direi
Devi accedere o registrarti per scrivere nel forum
5 risposte