Mi hanno chiesto come esportare in un file delimitato con Microsoft Access. Come sempre, poche istruzioni VBA e ho aggiunto alla mia cassetta degli attrezzi uno strumento molto utile.
Il codice consente di scegliere il delimitatore e di impostare facilmente che cosa esportare: possiamo esportare una tabella intera, una query, oppure scrivere una istruzione generata dinamicamente al momento dell’esecuzione della procedura.
In primo luogo è necessario aggiungere un riferimento a Microsoft Scripting Runtime:
Ora in un modulo scriviamo:
Sub sExportToFile()
' ! per il funzionamento della procedura, è necessario aggiungere un riferimento a Microsoft Scripting Runtime
Dim rs As DAO.Recordset Dim fld As Field Dim strRiga As String Dim fs As FileSystemObject Dim ts As TextStream
Set fs = New FileSystemObject
Set ts = fs.CreateTextFile("D:\testfile.csv", True) ' creo il file vuoto. con il parametro True, se il file esiste già, lo sovrascrivo ' senza chiedere conferma all'utente
Set rs = CurrentDb.OpenRecordset("SELECT * FROM Order_Details") ' carico nel recordset i dati che voglio esportare
Do While Not rs.EOF ' finché ci sono record strRiga = "" ' all'inizio del Do-Loop svuoto la variabile, altrimenti al secondo record conterrebbe tutta la prima riga
For Each fld In rs.Fields ' per ogni campo presente nel recordset strRiga = strRiga & ";" & fld ' concateno il delimitatore e il valore del campo Next ' quando sono finiti tutti i campi e ho concatenato i valori, devo togliere il delimitatore iniziale ' perché avrò una stringa tipo: ;1;12/03/2023;Tommassini;Luigino strRiga = Mid(strRiga, 2) ' con Mid tengo i dati a partire dal secondo carattere fino all'ultimo: non è necessartio specificare quanti ts.WriteLine strRiga ' ora scrivo la variabile come una nuova riga nel file rs.MoveNext ' passo al record successivo Loop
End Sub
Nel codice ho scelto come delimitatore il punto e virgola, ma potrei scegliere un altro delimitatore, per esempio il pipe, la barra verticale | spesso utilizzata perché è piuttosto raro che sia presente nei dati da esportare.