Utilizzare Query come recordset VBA

Anonimo
2017-10-06T17:08:36+00:00

Salve, mi è capitato spesso utilizzando Vba con access di utilizzare tabelle come recordset con la seguente sintassi

dim recordset as dao.recordset

set recordset = currentdb.openrecordset("Nome_Tabella")

e vari comandi tra cui recordset.movenext o recordset.fields("nome_del_campo")

avrei la necessità di utilizzare una query come recordset,

ho tentato di fare la medesima cosa con la query:

dim recordset as dao.recordset

set recordset = currentdb.openrecordset("Nome_Query")

Ma mi ha dato errore.. qualcuno conosce la sintassi per effettuare questa operazione anche tramite una query?

Grazie in anticipo per la disponibilità!

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

8 risposte

Ordina per: Più utili
  1. Anonimo
    2017-10-06T21:40:08+00:00

    Ciao,

    prova a cambiare:

    dim recordset as dao.recordset

    set recordset = currentdb.openrecordset("Select * from Nome_Query")

    Ciao Mimmo

    La risposta è stata utile?

    2 persone hanno trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2017-10-07T14:55:26+00:00

    Ciao, ho provato e da il seguente errore:

    il codice è il seguente , il debug evidenzia la riga sottolineata:

    Private Sub FiltroOrd_Change()

        'calcolo totale ordine corrente

        Dim qord As DAO.Recordset

        Set qord = CurrentDb.OpenRecordset("Select * from QOrdini")

        If (qord.EOF = False) Then

            qord.MoveFirst

        End If

        While (qord.EOF = False)

            Forms!MainBoard!optot = Forms!MainBoard!optot + qord.Fields("Totale")

            qord.MoveNext

        Wend

        'fine calcolo totale ordine corrente

        Me.Refresh

    End Sub

    in pratica dovrebbe leggere il valore del campo ("Totale") dalla query e sommarlo in un campo della form (optot), per poi passare al record successivo della query e ripetere l'operazione

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  3. Anonimo
    2017-10-06T17:46:21+00:00

    ciao Ivan,

    la sintassi che mostri è corretta, quale errore ricevi....? Devi essere più preciso, altrimenti dobbiamo tirare ad indovinare.

    Posta tutto il codice che stati tentando di impostare.

    Ciao, Sandro.

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  4. Anonimo
    2017-10-07T18:35:38+00:00

    ciao Ivan,

    hai un parametro della query (?) QOrdini ?

    L'errore è dovuto al fatto che il dbEngine (Jet/Ace) non riesce e risolvere il riferimento della query (?) QOrdini, la soluzione più semplice è avvolgere il parametro con la funzione Eval("[forms!nomeForm!nomeControllo]")

    Per il resto, non tanto bello il codice che mostri, prima di chiudere la sub sempre meglio chiudere il recordset e distruggere la variabile oggetto:

    rst.close

    set rst=nothing

    ed il loop sarebbe meglio gestirlo con

    do while not rst.eof

         ...

         rst.movenext

    loop

    In ogni caso, ciclare un recordset per il problema che poni non è la soluzione migliore, se la form è associata di basta inserire nell'origine dati del controllo, magari posto a pie pagina della form il calcolo :

    =somma(totale)+optot

    Se la form è una subForm ed il controllo da sommare è posto nella main form è necessario rivedere il codice impostando i riferimenti diversamente.

    Mancano un po' troppi dettagli per dare un suggerimento preciso.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2017-10-07T17:28:08+00:00

    Ciao,

    se l'obiettivo e sommare ad un controllo della maschera [optot] il totale del campo [totale] della query QOrdini ti basta:

    Forms!MainBoard!optot = Forms!MainBoard!optot + DSum("Totale","QOrdini")

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento