Esportazione dati da Access

Anonimo
2022-03-15T07:38:40+00:00

Ciao a tutti,volevo chiedervi un consiglio.Ho creato una piccola applicazione Access per la gestione di un parco veicoli.Devo ora esportare i veicoli su un sito internet aziendale sviluppato in Wordpress per la pubblicazione. Il sito supporta l’upload dello stock veicoli in formato CSV. A tale scopo ha creato le query di selezione “QS_Estr_xMotorbid_EN” e la “QS_Estr_xMotorbid_IT”. Le query sono due perché il sito è diviso in 2 parti, una in inglese per l’attività B2B e la seconda in italiano per l’attività B2C.Attualmente esporto il risultato di ognuna delle query in “.txt”, che è di fatto un CSV, e poi devo spostare tutti gli equipaggiamenti di ogni veicolo sulla stessa riga separandoli solo con un “$”, perché così richiede il sito. In sostanza ogni veicolo deve contenere tutti i propri attributi in una sola riga.In sostanza il risultato dell’estrazione della query deve coincidere con il CSVQuest’operazione è attualmente eseguita nel CSV in modalità totalmente manuale dopo l’esportazione da Access; l’operazione oltre che essere tediosa richiede molto tempo, a seconda ovviamente del numero di veicoli che devono essere esportati per la pubblicazione.Vorrei trovare il modo di esportare i dati con questa struttura già definita, i.e. in cui tutti gli equipaggiamenti sono su una stessa riga separati dal “$”.Non credo si possa fare nella query ma che sia necessaria qualche operazione in VBA. Oppure devo creare un report e con qualche personalizzazione si riesce a rappresentare il campo in questione nel modo richiesto... Avete qualche suggerimento?

Grazie infinite per l’attenzione.

Condivido qui sotto il DB e i 2 CSV

https://1drv.ms/u/s!AtZa5okJIOVOh58Vs5eR1eJGSJFhCQ?e=exs24J

https://1drv.ms/u/s!AtZa5okJIOVOh58bPRE9v2IiDXo3_g?e=WCveGd https://1drv.ms/u/s!AtZa5okJIOVOh58cvEZkVg8gjPzoKg?e=ps2Ov1

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

14 risposte

Ordina per: Più utili
  1. domenico laurenza 9,900 Punti di reputazione Moderatore volontario
    2022-03-20T18:10:28+00:00

    Ciao,

    ho trovato una possibile soluzione.

    A titolo informativo ti spiego il procedimento che ho seguito ma tu non dovrai riprterlo.

    Ho trasformato una delle due query in query di creazione tabella (selezionando dal menu il tipo di query e assegnando il nome della tabella da creare).

    Una volta eseguita, la query, mi ha creato la tabella tbl_Temp_Export_Csv (un nome di fantasia ).

    Nella struttura della tabella creata, ho cambiato il tipo di campo Equip da testo breve (255 caratteri) a testo lungo ( fino a 1 Gb)

    Quindi ho svuotato la tabella dai records (Aprendo la tabella, in alto a sinistra c'è un triangolino che, se lo clicchi, con il tasto Canc, ti permette di eliminare tutto il contenuto).

    A questo punto ho cambiato le due query in query di accodamento assegnando sempre lo stesso nome tbl_Temp_Export_Csv.

    Il file che ti condivido contiene la tabella temporanea e le due query corrette.

    Questo il LINK

    Tu dovrai solo operare come segue.

    Se fai un doppio click su una delle query la esegui ( in alternativa entra in visualizzazione struttura e dal menu clicca sul punto esclamativo).

    Quindi avrai il risultato nella tabella che potrai esportare.

    Dopo aver svuotata la tabella (come descritto sopra) puoi eseguire l'altra query ed esportare.

    Facci sapere

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. domenico laurenza 9,900 Punti di reputazione Moderatore volontario
    2022-03-17T17:50:00+00:00

    Continuando a provare ho notato che per lo tesso Id ti vengono enne righe proprio per le tabelle in relazione n a n.

    Nelle query elimina le tabelle Equip ed EquipVeh.

    Inoltre ho capito che potresti non avere records per equipaggiamento. Modifica il codice che ti ho postato prima con il seguente:

    Function TrattaEquipaggiamento(myId, myCampo)

    Dim myRst As Recordset 
    
    Set myRst = CurrentDb.OpenRecordset("SELECT " & myCampo & " " & \_ 
    
                                        "FROM Equip INNER JOIN EquipVeh ON Equip.Cod\_Eq = EquipVeh.Cod\_Eq " & \_ 
    
                                        "WHERE EquipVeh.IDGiac = " & myId & " Order By " & myCampo) 
    
    TrattaEquipaggiamento = "" 
    
    **If myRst.RecordCount > 0 Then** 
    
       myRst.movefirst 
    
       Do While Not myRst.EOF 
    
          TrattaEquipaggiamento = TrattaEquipaggiamento & myRst(myCampo) & "$" 
    
          myRst.movenext 
    
       Loop 
    
       TrattaEquipaggiamento = Mid(TrattaEquipaggiamento, 1, Len(TrattaEquipaggiamento) - 1) 
    
    End If 
    
    Set myRst = Nothing 
    

    End Function

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento
  3. domenico laurenza 9,900 Punti di reputazione Moderatore volontario
    2022-03-17T17:24:03+00:00

    Ciao proviamo con :

    Nelle due query QS_Estr_xMotorbid_EN e QS_Estr_xMotorbid_IT al posto dei campi Des_Eq e Des_EqEn imposta il seguente

    Equip: TrattaEquipaggiamento([Giacenza].[Id];"Des_Eq") per la versione Italiana

    Equip: TrattaEquipaggiamento([Giacenza].[Id];"Des_EqEN") per la versione Inglese

    dove Equip lo cambi a piacimento.

    Quindi aggiungi un modulo con il seguente contenuto:

    Option Compare Database

    Option Explicit

    Function TrattaEquipaggiamento(myId, myCampo)

    Dim myRst As Recordset 
    
    Set myRst = CurrentDb.OpenRecordset("SELECT " & myCampo & " " & \_ 
    
                                        "FROM Equip INNER JOIN EquipVeh ON Equip.Cod\_Eq = EquipVeh.Cod\_Eq " & \_ 
    
                                        "WHERE EquipVeh.IDGiac =" & myId & " Order By " & myCampo) 
    
    myRst.movefirst 
    
    TrattaEquipaggiamento = "" 
    
    Do While Not myRst.EOF 
    
       TrattaEquipaggiamento = TrattaEquipaggiamento & myRst(myCampo) & "$" 
    
       myRst.movenext 
    
    Loop 
    
    TrattaEquipaggiamento = Mid(TrattaEquipaggiamento, 1, Len(TrattaEquipaggiamento) - 1) 
    
    Set myRst = Nothing 
    

    End Function

    Infine, rstando sul codice Vba (modulo) dal menu seleziona Strumenti->Riferimenti

    scorri la lista e seleziona la libreria Microsoft Dao XX Object Library.

    Per verifica del codice e delle libreria , sempre dal menu, seleziona Debug->Compila

    Prova ad eseguire le due query.

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento
  4. domenico laurenza 9,900 Punti di reputazione Moderatore volontario
    2022-03-17T16:45:51+00:00

    Ciao,

    forse ho capito, l'unico campo da trattare è EQUIPMENT raggruppando i valori dello stesso Id separando i diversi valori da $.

    Ci lavoro e ti faccio sapere.

    Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento
  5. domenico laurenza 9,900 Punti di reputazione Moderatore volontario
    2022-03-17T16:41:35+00:00

    Ciao Alberto,

    hai condiviso, nel terzo link, gli stessi files dei primi due.

    Servirebbe un esempio del risultato finale (ottenuto manualmente) che devi ottenere per poterlo trattare-

    Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento