Dos dentro MSAccess

di il
16 risposte

Dos dentro MSAccess

Buongiorno a tutti e grazie per la vs. proverbiale pazienza. Mi occorrerebbe realizzare una tabella che in modo dinamico (ad es. premendo un tasto) andasse a leggere l'elenco di files presenti in una directory. Nel mio caso: ho dei file Cakewalk formato *.cwp situati nella directory C:\Onedrive\ProgettiCwk e vorrei che il comando dos dir *. cwp  andasse a scrivere su questa Tabella (che chiamerei per es. T_Cakewalk_files).
Come mi consigliate di fare? Spiegazioni facili che possa capire uno che più che altro è musicista! Grazie, m.

16 Risposte

  • Re: Dos dentro MSAccess

    https://support.microsoft.com/it-it/topic/introduzione-alla-programmazione-in-access-92eb616b-3204-4121-9277-70649e33be4f

    Vorrei suonare il concerto n. 3 di Rachmaninov. Come mi consigli di fare? Spiegazioni facili che possa capire uno che più che altro è programmatore! Grazie, m.

  • Re: Dos dentro MSAccess

    In VBA esiste una funzione che si chiama proprio Dir che, usata in un ciclo, ti permette di elencare tutti i file come vuoi tu e nel ciclo puoi inserirli in una tabella, se vuoi.

    La funzione è documentata in

    https://support.microsoft.com/it-it/topic/funzione-dir-1a1a4275-f92f-4ae4-8b87-41e4513bba2e

    Questo in parole molto semplici, se non lo sono abbastanza, parti dal documento di @migliorabile…

  • Re: Dos dentro MSAccess

    Non so se migliorabile volesse fare dell'ironia o meno. A parte che io sono un compositore e suono solo il pianoforte jazz e dunque sul buon  Rachmaninov avrei poco o nulla da dire. Comunque se vuoi ti inserisco nella mia community musicale dove distribuisco spartiti ed esecuzioni di miei brani. Serve solo un cellulare collegato a WU. Saluti!

  • Re: Dos dentro MSAccess

    Ovviamente era ironico.

    Anche se inserissi me nella community e ti chiedessi di riuscire a suonare un pezzo jazz con il piano, essendo completamente a zero e stonato, non credo sarebbe una buona idea. Ma ti chiederei di farmelo suonare spiegandomi come fare zemplicemente e anche velocemente.

  • Re: Dos dentro MSAccess

    Oregon e Migliorabile, quando vlete sono a Vs. disposizione per lezioni (magari scambiamo jazz piano vs. VBA)…


    Tornando a noi, un primo, grezzissimo tentativo:

    Public Sub showFiles()

    Dim f
    Dim i As Long

    f = Dir("c:\onedrive\documenti\progetti sonar\_jazz\*.cwp")
    Do While (f <> "")
    i = i + 1
    Debug.Print f
    f = Dir
    Loop

    End Sub

    e già mi cola il sudore dalla fronte, e fa anche freddo…

    Domani proseguo, la mia console con 88 tasti /B&W) mi chiama!

  • Re: Dos dentro MSAccess

    1. Anch'io sono musicista…ma non centra nulla con la discussione! 
    2. Intanto, come da regolamento del forum, quando posti codice, abbi cura di selezionarlo, quindi clicca poi sulla 4a icona dell'editor di quando si scrive un messaggio. Il codice apparirà con i tipici caratteri monotype più familiari ai programmatori.
    3. Non credo che il codice che hai postato fa esattamente quello che cerchi. Cosa ottieni a ogni step del ciclo? Dov'è la tabella che deve ospitare i nomefile? Per questo serve aprire un Recordset, sfruttando il metodo DAO, ecc…leggi questo documento
      Leggere scrivere dati nelle tabelle tramite VBA (DAO).docx
  • Re: Dos dentro MSAccess

    Buongiorno Osvaldo, provo a spiegarmi meglio: ho una quattro serie di files su quattro directory e volevo che una 

    Tabella Access recepisse, in modo dinamico, le variazioni (ad es. inserimento di nuovi files, cancellazione degli stessi ecc.).

    Direi che il codice che ho scritto raggiunge lo scopo che mi ero prefissato: infatti a questi file 

    (per te che sei musicista formato cakewalk *.cwp) sono associati degli esercizi di armonia e di scale. 

    Siccome il numero di file stava crescendo, per evitare operazioni del tipo 

    dir *.cwp > listafilescwp.txt 

    e poi importare questa lista in una tabella Access dedicata ho pensato, anche alla luce dei vostri suggerimenti, 

    di operare così.

    Sicuramente esistono soluzioni più eleganti che recepirò con piacere. Un saluto a te e alla community, m.

    Private Sub RDF_CWP_Click()
    Dim rs1 As DAO.Recordset
    Set rs1 = CurrentDb.OpenRecordset("T_Lista_Cakewalk", dbOpenTable)
    DoCmd.RunSQL "delete * FROM T_Lista_Cakewalk"
    Dim f
    Dim i As Long
    i = 0
    f = Dir("c:\onedrive\documenti\progetti sonar\_jazz\*.cwp")
    Do While (f <> "")
    rs1.AddNew
    rs1.Fields("Cakewalk") = f
    rs1.Update
    i = i + 1
    f = Dir
    Loop
    f = Dir("c:\onedrive\documenti\progetti sonar\_JazzVocalSux\*.cwp")
    Do While (f <> "")
    rs1.AddNew
    rs1.Fields("Cakewalk") = f
    rs1.Update
    i = i + 1
    f = Dir
    Loop
    f = Dir("c:\onedrive\documenti\progetti sonar\_MLF\*.cwp")
    Do While (f <> "")
    rs1.AddNew
    rs1.Fields("Cakewalk") = f
    rs1.Update
    i = i + 1
    f = Dir
    Loop
    
    f = Dir("c:\onedrive\documenti\progetti sonar\jAZZSTUDIO\*.cwp")
    Do While (f <> "")
    rs1.AddNew
    rs1.Fields("Cakewalk") = f
    rs1.Update
    i = i + 1
    f = Dir
    Loop
    End Sub
  • Re: Dos dentro MSAccess

    10/03/2024 - Faustinator ha scritto:


    Direi che il codice che ho scritto raggiunge lo scopo che mi ero prefissato

    Adesso è tutto più coerente ed elaborato. OK allora.

  • Re: Dos dentro MSAccess

    Torno alla carica con la funzione DIR in MS Access.

    Nel codice del 10 marzo 2024 (vedi sopra) avevo solo 4 directory e, facendo  il “lavoro della scimmia” ho copiato 4 volte lo stesso codice. Ora debbo fare un'operazione simile con una directory articolata su circa 800 subdirectory (l'albero si ferma qui, non ci sono sub-subdirectory, meno male!).

    Come mi consigliate di agire? Da quanto leggo la funzione Dir non consente di agire anche sulle subdirectory. 
    Come sempre grazie per la collaborazione.

  • Re: Dos dentro MSAccess

    Funzione ricorsiva con FILE SYSTEM OBJECT se hai più di 1 livello… se hai solo 1 livello fai lo scan delle folder ed all'interno del ciclo folder fai lo scan delle subfolder… sono 4righe

  • Re: Dos dentro MSAccess

    In sheet2 ci sono le colonne x ed y tipo

    xy
    Dir("C:\Onedrive\foto\1958\*.*")"C:\Onedrive\foto\1958\" & f
    Sheet2

    con altre 831 righe simile. Il codice si pianta su f=Dir; help!

    Private Sub RDF_foto_Click()
    Dim rs1 As DAO.Recordset
    Set rs1 = CurrentDb.OpenRecordset("T_Lista_foto", dbOpenTable)
    DoCmd.RunSQL "delete * FROM T_Lista_foto"
    Dim rs2 As DAO.Recordset
    Set rs2 = CurrentDb.OpenRecordset("Sheet2", dbOpenTable)
    Dim f
    Dim i As Long
    Dim j As Long
    i = 0
    For j = 1 To 832
    f = rs2.Fields("x")
    Do While (f <> "")
    rs1.AddNew
    rs1.Fields("foto") = rs2.Fields("y")
    rs1.Update
    i = i + 1
    f = Dir
    Loop
    Next
    
    End Sub
  • Re: Dos dentro MSAccess

    Capisci quando ti spiegano… o no…?

  • Re: Dos dentro MSAccess

    Gentile Alex se mi vuol dare  una mano io La ringrazio; tenga presente che se fossi stato bravo, presumo quanto Lei, non l'avrei disturbata. Quindi lascio a Lei la scelta se aiutarmi o meno. Saluti.

  • Re: Dos dentro MSAccess

    Scusami Faustinator ma Alex ti aveva scritto

    con FILE SYSTEM OBJECT

    e tu hai ignorato totalmente il suggerimento.

    Comunque guarda questo link, troverai esempi per una sola cartella e per più cartelle, sia con con la Dir che con il FILE SYSTEM OBJECT 

    https://exceloffthegrid.com/vba-code-loop-files-folder-sub-folders/

Devi accedere o registrarti per scrivere nel forum
16 risposte