ACCESS e VBA: scorrere le righe e le colonne di una tabella?

GraceHawk

Nuovo Utente
17 Set 2018
5
0
1
Gentili utenti, come accennato nel messaggio di presentazione, sto approcciando per la prima volta al mondo dei database e al vba per questioni di "forza maggiore" e da autodidatta.

Ancor prima di entrare nel dettaglio del database di cui mi sto occupando, avrei una domanda da fare:
attraverso VBA è possibile scorrere le righe di una tabella, ovvero i campi della stessa, fissata la colonna (record)?

Per quanto riguarda i record invece, ho trovato già qualche info in merito alla possibilità di scorrerli tutti, ma sarei comunque grata a chi mi potesse, in maniera sintetica, fornire informazioni sulle diverse modalità di "scorrimento" dei record (ciclo for, do until loop, etc...)

Grazie mille :)
 

marino51

Utente Attivo
28 Feb 2013
2.912
162
63
Lombardia
ti riporto un esempio di script VBA usato in excel con accesso ad un db (nel caso specifico oracle)
ma che diventa di tipo generico usando il file udl per la connessione
Codice:
    Set tdb = CreateObject("ADODB.Connection")
    tdb.connectionstring = "file name=" & UdlFile & "NomeDelDatabase.udl;"  'WINDOWS ! ho definito i parametri del db in un file udl
    tdb.Open

    sqlquery = "select col1, col2, ........"

    Set rsuserlist = tdb.Execute(sqlquery)  'esegue la query creando il cursore rsuserlist per la lettura del risultato

    Do While Not rsuserlist.EOF

        col_1 = Trim(rsuserlist(1))  'ma si può usare anche il nome della colonna
        col_2 = Trim(rsuserlist(2))

        Call Element_key

        w1 = w1 + 1

        Cells(w1, 1) = col_1
        Cells(w1, 2) = col_2

        For w2 = 1 To 12
            If LastUpdDateFlg >= w2 Then
                Cells(w1, w2 + 2) = CDbl(rsuserlist(w2 + 2)) / 1000  'la colonna può essere anche "calcolata" vedi w2 + 2
            Else
                Cells(w1, w2 + 2) = 0
            End If
        Next

        rsuserlist.movenext  'avanza di un record
    Loop

    Range("A2").Select
se lavori in ambiente windows,
crea un file con estensione txt (tasto dx del mouse)
poi rinominalo con estensione udl
doppio click su di esso e ti si apre il mondo per la connessione al db con tanto di verifica ….
 
  • Like
Reactions: GraceHawk

GraceHawk

Nuovo Utente
17 Set 2018
5
0
1
ti riporto un esempio di script VBA usato in excel con accesso ad un db (nel caso specifico oracle)
ma che diventa di tipo generico usando il file udl per la connessione
Codice:
    Set tdb = CreateObject("ADODB.Connection")
    tdb.connectionstring = "file name=" & UdlFile & "NomeDelDatabase.udl;"  'WINDOWS ! ho definito i parametri del db in un file udl
    tdb.Open

    sqlquery = "select col1, col2, ........"

    Set rsuserlist = tdb.Execute(sqlquery)  'esegue la query creando il cursore rsuserlist per la lettura del risultato

    Do While Not rsuserlist.EOF

        col_1 = Trim(rsuserlist(1))  'ma si può usare anche il nome della colonna
        col_2 = Trim(rsuserlist(2))

        Call Element_key

        w1 = w1 + 1

        Cells(w1, 1) = col_1
        Cells(w1, 2) = col_2

        For w2 = 1 To 12
            If LastUpdDateFlg >= w2 Then
                Cells(w1, w2 + 2) = CDbl(rsuserlist(w2 + 2)) / 1000  'la colonna può essere anche "calcolata" vedi w2 + 2
            Else
                Cells(w1, w2 + 2) = 0
            End If
        Next

        rsuserlist.movenext  'avanza di un record
    Loop

    Range("A2").Select
se lavori in ambiente windows,
crea un file con estensione txt (tasto dx del mouse)
poi rinominalo con estensione udl
doppio click su di esso e ti si apre il mondo per la connessione al db con tanto di verifica ….
ti riporto un esempio di script VBA usato in excel con accesso ad un db (nel caso specifico oracle)
ma che diventa di tipo generico usando il file udl per la connessione
Codice:
    Set tdb = CreateObject("ADODB.Connection")
    tdb.connectionstring = "file name=" & UdlFile & "NomeDelDatabase.udl;"  'WINDOWS ! ho definito i parametri del db in un file udl
    tdb.Open

    sqlquery = "select col1, col2, ........"

    Set rsuserlist = tdb.Execute(sqlquery)  'esegue la query creando il cursore rsuserlist per la lettura del risultato

    Do While Not rsuserlist.EOF

        col_1 = Trim(rsuserlist(1))  'ma si può usare anche il nome della colonna
        col_2 = Trim(rsuserlist(2))

        Call Element_key

        w1 = w1 + 1

        Cells(w1, 1) = col_1
        Cells(w1, 2) = col_2

        For w2 = 1 To 12
            If LastUpdDateFlg >= w2 Then
                Cells(w1, w2 + 2) = CDbl(rsuserlist(w2 + 2)) / 1000  'la colonna può essere anche "calcolata" vedi w2 + 2
            Else
                Cells(w1, w2 + 2) = 0
            End If
        Next

        rsuserlist.movenext  'avanza di un record
    Loop

    Range("A2").Select
se lavori in ambiente windows,
crea un file con estensione txt (tasto dx del mouse)
poi rinominalo con estensione udl
doppio click su di esso e ti si apre il mondo per la connessione al db con tanto di verifica ….
Grazie per la risposta, ma non riesco a seguire tutti i passaggi :(
Che cosa fa questo codice? Tutta la parte inerente a rinominare con un'altra estensione a che serve?
Perdona l'ignoranza!
 

marino51

Utente Attivo
28 Feb 2013
2.912
162
63
Lombardia
il codice che ti ho postato é un esempio di apertura del data base,
esecuzione di una select
lettura dei record restituiti
all'interno ho lasciato alcune istruzioni per vedere come usare i valori delle colonne restituiti

la parte del file udl, serve, in ambiente windows, a creare un file di collegamento al db, che può essere usato nello script vba
nello script rende immediata la gestione della connessione
Codice:
tdb.connectionstring = "file name=" & UdlFilePath & "NomeDelDatabase.udl;"
tdb.Open
ti invito a provare per capire di cosa si tratta ...
 
  • Like
Reactions: GraceHawk