+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: Errore su esportazione File Csv se il file da sovrascrivere è aperto.

  1. #1
    L'avatar di Diego1966
    Diego1966 non è in linea Scolaretto
    Luogo
    Palermo
    Post
    131

    Errore su esportazione File Csv se il file da sovrascrivere è aperto.

    Buongiorno e buona domenica,.

    scusate ancora se rompo, vorrei chiedervi un consiglio.

    come titolo in oggetto, se provo ad esportare in csv (ma l'estensione poteva essere di qualunque genere), ed il file che già esiste, ed è solo da sovrascrivere, è aperto, la routine va a generare un errore, precisamente la dicitura è : Errore di run-time 70 - Autorizzazione negata.

    nell'editor VBA viene evidenziato in giallo questa parte di codice:

    codice:
    Set file = FS.CreateTextFile(completo)
    file.WriteLine (Testo_Campo)
    file.Close
    la routine è la seguente:

    codice:
    Option Compare Database
    Option Explicit
    
    Dim MioDb As As DAO.Database
    
    Sub EsportaTabellaCSV()
    
    Dim Rs As DAO.Recordset
    Dim Nome_File
    Dim Testo_Campo As String
    
    'apertura Tabella
    Set MioDb = CurrentDb
    Set Rs = MioDb.OpenRecordset("QryEsporta")
    
    
    testo_csv = ""
    'Crea l'intestazione con i nomi dei campi
    I = 0
    For I = 0 To Rs.Fields.Count - 1
    Testo_Campo = Testo_Campo & Rs.Fields(I).Name & ";"
    Next
    Testo_Campo = Testo_Campo & vbCrLf
    
    'ora aggiunge il contenuto del recordset
    I = 0
    Do While Not Rs.EOF
    
    For I = 0 To Rs.Fields.Count - 1
    Testo_Campo = Testo_Campo & Rs.Fields(I).Value & ";"
    Next
    
    Testo_Campo = Testo_Campo & vbCrLf
    Rs.MoveNext
    Loop
    
    'ora crea il file csv
    Path = Application.CurrentProject.Path
    NOME = "\Prova.csv"
    completo = Path & NOME
    Dim FS, filespec
    filespec = completo
    Set FS = CreateObject("Scripting.FileSystemObject")
    
    Set file = FS.CreateTextFile(completo)
    file.WriteLine (Testo_Campo)
    file.Close
    
    Set file = Nothing
    Set FS = Nothing
    
    
    'Messaggio
    MsgBox "creato il seguente file:" & Chr(13) & Chr(10) & completo
    
    End Sub
    E qui esporta:

    codice:
    Function EsportaFile()
    On Error GoTo EsportaFile_Err
    
       DoCmd.OutputTo acOutputQuery, "QryEsporta", "MS-DOSText(*.txt)", "D:\Prova.csv", False, "", , acExportQualityPrint
    
    
    EsportaFile_Exit:
        Exit Function
    
    EsportaFile_Err:
        MsgBox Error$
        Resume EsportaFile_Exit
    
    End Function

    Mi chiedevo se, per favore, avreste qualche suggerimento da potermi dare circa la gestione di questo errore, magari un controllo che mi indichi che il file csv è aperto e di chiuderlo prima di esportare e sovrascrivere .

    Grazie.
    Ultima modifica di Diego1966; 21-07-2019 08:26 

  2. #2
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,091
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  3. #3
    L'avatar di Diego1966
    Diego1966 non è in linea Scolaretto
    Luogo
    Palermo
    Post
    131
    Grazie Alessandro, sicuramente le due funzioni che leggo saranno la risoluzione del problema, ora me lo studio per bene.

    Ti ringrazio nuovamente

  4. #4
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,251
    Blogs
    5
    Potevi gestire l'errore 70 senza tanti problemi no?
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  5. #5
    L'avatar di Diego1966
    Diego1966 non è in linea Scolaretto
    Luogo
    Palermo
    Post
    131
    Quote Originariamente inviato da AntonioG Visualizza il messaggio
    Potevi gestire l'errore 70 senza tanti problemi no?
    Beh, scusami ma se avessi saputo come fare non avrei scomodato il forum, prima di scrivere ho fatto ricerche in rete,e sicuramente non avrò fatto una buona ricerca altrimenti avrei trovato l'articolo che Alessandro mi ha linkato, a parte questo articolo della microsoft.https://support.microsoft.com/it-it/...th-office-vba/

    che per'altro spiega di appoggiarsi alle API, ma sopratutto indica l'errore come un problema di aggiornamenti Office, non ho trovato nient'altro che mi indicasse, o suggerisse come gestire l'errore dovuto al file CSV semplicemente lasciato aperto, il suggerimento di Alessandro invece parlava proprio di come evitare che l'applicativo andasse in errore qual'ora si fosse lasciato aperto il file CSV.

    se tu hai un suggerimento ti prego di fornirmelo.

    Grazie.

  6. #6
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,091
    Forse non ha compreso l'aiuto di Antonio e magari sarebbe meglio provare a rifletterci.
    Il mio suggerimento è prettamente formativo utile, ma il suggerimento di Antonio, è concretamente più funzionale.
    Se sai usare in modo adeguato la gestione errori, perché gli errori non sono solo da evitare ma spesso si sfruttano proprio per velocizzare il codice puoi avere un metodo più funzionale.
    Sapendo l'errore restituito in modo chiaro, 70 nel tuo, scrivi il codice necessario nella gestione dell'errore 70... per superarlo.
    Sono 3 righe di codice.

    Sei certo di aver interpretato in questo modo...?
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  7. #7
    L'avatar di Diego1966
    Diego1966 non è in linea Scolaretto
    Luogo
    Palermo
    Post
    131
    no per carità Alex nessun disappunto verso Antonio, non l'ho preso assolutamente come offesa, anzi casomai un incentivo, Il GoTo Error e di seguito if errore =70 lo conosco, ma volevo qualcosa di più performante, ma forse mi sono spiegato male io

    Scusatemi

  8. #8
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,091
    Più performante cosa intendi...? Rispetto a cosa...?
    codice:
    Private Sub/Function Nomesub(....)
       On Error Goto ErrHandler
       .....
    Exit_Here:
       Error.Clear
       Exit Sub/Function
    
    ErrHandler:
       Select case err.Number
          Case 70
              ' fai quello che serve
          Case Else
              MSGBOX err.number & " " & err.description
              Resume Exit_bere
       End select
    End Sub/Function
    Una cosa simile... spesso avere chiaro quale errore venga generato nello specifico è il metodo più performante in assoluto.
    Tu cosa intendi nel concreto...?
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  9. #9
    L'avatar di Diego1966
    Diego1966 non è in linea Scolaretto
    Luogo
    Palermo
    Post
    131
    Quote Originariamente inviato da @Alex Visualizza il messaggio
    Più performante cosa intendi...? Rispetto a cosa...?
    codice:
    Private Sub/Function Nomesub(....)
       On Error Goto ErrHandler
       .....
    Exit_Here:
       Error.Clear
       Exit Sub/Function
    
    ErrHandler:
       Select case err.Number
          Case 70
              ' fai quello che serve
          Case Else
              MSGBOX err.number & " " & err.description
              Resume Exit_bere
       End select
    End Sub/Function
    Una cosa simile... spesso avere chiaro quale errore venga generato nello specifico è il metodo più performante in assoluto.
    Tu cosa intendi nel concreto...?
    Che ti avvisasse e chiudesse automaticamente il file aperto, solo questo, essendo un file con estensione csv, dichiarando l'oggetto come Excel.application temevo che non potesse funzionare

  10. #10
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,251
    Blogs
    5
    Fai un po' di confusione
    Il fatto che un file sia aperto non significa che il tuo processo possa chiuderlo.
    Quindi l'errore è l'unica cosa che puoi avere e l'avviso all'utente l'unica cosa che può succedere. Puoi utilizzare già l'errore 70 come ti ha precisato Alex (so che se ti rivolgi al for111um non sai come fare ma non avevi compreso la mia risposta). E quella è la soluzione più efficiente dove per soluzione NON è anche compresa la chiusura del file se non l'hai aperto tu.
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi