Condividi tramite

Access VBA: Popolare un recordset DAO con un'istruzione "SELECT..."

Anonimo
2013-11-26T08:57:57+00:00

Buongiorno a tutti, ho il seguente problema: in Access 2010 ho inserito del codice VBA per creare un recordset a cui assegnare i dati provenienti da una tabella chiamata tAnni. Il mio scopo sarebbe quello di popolare il recordset con i dati della tabella che soddisfano un determinato criterio, ma anche volendo includere tutti i record di tAnni l'espressione che uso per definire i dati per qualche motivo non funziona. Mi spiego nel dettaglio.

Il codice che ho inserito è il seguente:

Dim rsAnni As DAO.RecordsetSet rsAnni = CurrentDb.OpenRecordset("SELECT * FROM tAnni")MsgBox ("N° record in tAnni: " & rsAnni.RecordCount)

Indicando l'origine dati come "Select * from tAnni" la finestra in cui chiedo di visualizzare il numero di record visualizza 0 se la tabella tAnni è vuota, se invece è piena, indipendentemente dal numero di record, indica sempre 1.

Se sostituisco la seconda riga di codice precedente con quella indicata qui di seguito, il numero di record contati è corretto.

*Set rsAnni = CurrentDb.OpenRecordset("tAnni")*Mi occorre però far funzionare la prima espressione in quanto, come anticipavo, il mio scopo finale è quello di selezionare dalla tabella tAnni solo i record che soddisfano un determinato criterio, quindi alla fine dovrei avere una cosa del tipo

"Select * from tAnni Where [condizione]"

Cosa sbaglio? Perché indicando l'origine del recordset con l'espressione "Select..." il programma conta sempre 1 record anche se ce ne sono di più?

Grazie mille sin da ora!

Silvia

Microsoft 365 e Office | Accesso | 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
  1. Anonimo
    2013-11-26T09:12:55+00:00

    Ciao Silvia,

    il tipo di recordset dynaset non viene caricato tutto in memoria se non necessario, per conoscere il numero di record bisogna spostarsi in fondo al recordset, esempio


    Dim rsAnni As DAO.RecordsetSet rsAnni = CurrentDb.OpenRecordset("SELECT * FROM tAnni")

    'Se esistono record

    If rsAnni.BOF=False Then

    rsAnni.MoveNext

    rsAnno.Movefirst

    End IF

    MsgBox ("N° record in tAnni: " & rsAnni.RecordCount)


    Al contrario il tipo di recordset "Table" che usi con l'istruzione *Set rsAnni = CurrentDb.OpenRecordset("tAnni")*agisce direttamente sulla tabella ma non è detto che il numero di record sia corretto perché a volte influenzato dalle cancellazioni eseguite.

    Ciao

    Giorgio Rancati

    3 persone hanno trovato utile questa risposta.
    0 commenti Nessun commento

2 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2013-11-26T11:16:02+00:00

    Ciao Silvia,

    sì, scusa l'istruzione giusta era rsAnni.MoveLast non so perché mi e scappato rsAnni.MoveNext , sarà l'età che avanza :-)

    in ogni caso grazie a te per il riscontro.

    Giorgio Rancati

    0 commenti Nessun commento
  2. Anonimo
    2013-11-26T09:59:44+00:00

    Grazie mille Giorgio, finalmente ora funziona!

    Ho solo sostituito, dopo aver specificato le condizioni “WHERE…” nell’origine dati, l’espressione rsAnni.moveNext da lei suggerita con rsAnni.moveLast perché l’altra (che senza l’espressione criterio funzionava benissimo) non calcolava esattamente il numero di record, forse sbagliavo qualcosa io, comunque indicando il codice seguente il calcolo è corretto.

    Set rsAnni = CurrentDb.OpenRecordset("SELECT * FROM tAnni Where [condizione]”)

    If rsAnni.BOF = False Then

    rsAnni.MoveLast

    rsAnni.MoveFirst

    End If

    MsgBox ("N° record in tAnni: " & rsAnni.RecordCount)

    La ringrazio molto, mi ha dato un grandissimo aiuto!

    Silvia

    0 commenti Nessun commento