Condividi tramite

estrazione da un db access e salvataggio in diversi files txt con nomi presi da colonna

Anonimo
2013-05-07T09:02:55+00:00

Buongiorno,

riposto qui la domanda fatta su excel in quanto in realtà l'origine della tabella è da db access, e potendo saltare anche il passaggio excel si rischierebbero possibili errori.

Il problema che dovrei risolvere è il seguente: partendo da una query con tre colonne, del tipo

030003-00.txt 2012.038251 83.437
030003-00.txt 2012.122951 83.227
030003-00.txt 2012.202186 81.877
030003-00.txt 2012.286885 80.777
030003-00.txt 2012.368852 80.617
030004-00.txt 2009.123288 62.09
030004-00.txt 2009.200000 62.46
030004-00.txt 2009.367123 62.39
030004-00.txt 2009.452055 60.83
030004-00.txt 2009.534247 56.38
030004-00.txt 2009.619178 55.83

la prima colonna viene da una tabella "anagrafica"/campo testo "id_nicola", la seconda colonna arriva da una query in cui calcolo la data decimale a partire da data/ora locale mentre la terza proviene da una seconda tabella denominata "t_livello"/ campo numerico "soggiac_da_riferim".

vorrei esportare in automatico tanti file quanti sono i nomi individuati dalla prima colonna (030003-00.txt, 030004-00.txt ecc, sono qualche centinaio in totale..) contenenti solamente la seconda e terza colonna associate ad ogni singolo nome file. I dati dovrebbero essere separati da tabulazione.

per esempio il file 030004-00.txt dovrebbe presentarsi come:

2009.123288 62.09

2009.200000 62.46.

2009.367123 62.39

2009.452055 60.83

ecc

il numero di righe associate ad ogni *.txt è variabile

Grazie, Andrea

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2013-05-10T11:11:30+00:00

Ciao Andrea,

potresti provare ad esempio modificando l'espressione che scrive Dato1 in questo modo:


.....

strTesto = strTesto & Fix(!Dato1*1000000)/1000000 & vbTab & !Dato2 & vbCrLf

....


Attenzione all'uso di Fix in alternativa a Int in quanto in certe condizioni restituiscono valori diversi.

Leggi questo articolo per approfondire il problema: Funzioni Int e Fix (Visual Basic)

David

La risposta è stata utile?

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2013-05-07T09:23:11+00:00

Ciao Andrea,

prova in questo modo:


Sub mSalvaFiles()

    Dim db As DAO.Database

    Dim rst As DAO.Recordset

    Dim col As Collection

    Dim vItem As Variant

    Dim lFileNumber As Long

    Dim strTesto As String

    Set db = CurrentDb

    Set rst = db.OpenRecordset("SELECT DISTINCT NomeFile From qrySalva", dbOpenSnapshot)

    Set col = New Collection

    With rst

        Do While Not .EOF

            col.Add Item:=CStr(!NomeFile)

            .MoveNext

        Loop

    End With

    For Each vItem In col

        strTesto = vbNullString

        Set rst = db.OpenRecordset("SELECT Dato1, Dato2 FROM qrySalva WHERE NomeFile = '" _

            & vItem & "'", dbOpenSnapshot)

        With rst

            Do While Not .EOF

                strTesto = strTesto & !Dato1 & vbTab & !Dato2 & vbCrLf

                .MoveNext

            Loop

        End With

        lFileNumber = FreeFile

        Open CurrentProject.Path & "" & vItem For Output As #lFileNumber

        Print #lFileNumber, strTesto

        Close #lFileNumber

    Next vItem

    rst.Close

    db.Close

    Set rst = Nothing

    Set db = Nothing

End Sub


I nomi degli oggetti sono da adattare. Nel mio esempio la query di chiama qrySalva, il campo contenente il nome del file si chiama "NomeFile", il secondo e terzo campo li ho chiamati Dato1 e Dato2

David

La risposta è stata utile?

0 commenti Nessun commento

2 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2013-05-10T11:34:41+00:00

    non avevo mai pensato a questa soluzione.. moltiplica/tronca/dividi..

    invece di metterla in VBA l'ho implementata nella query dove VBA va a pescare

    ho provato sia fix che int e il risultato è identico

    ancora grazie mille!!

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2013-05-10T09:38:04+00:00

    Ciao David,

    ho provato poco fa la soluzione per access e modificando i nomi funziona perfettamente!

    Ho solo un problema sul numero di decimali della colonna "dato1".. Essendo derivata da calcolo ne porta con se una decina, ma a me servono solo 6 decimali. Proverò ancora a sistemarla.

    Grazie ancora!

    Andrea

    La risposta è stata utile?

    0 commenti Nessun commento