Query parametrica con Querydef

di il
30 risposte

Query parametrica con Querydef

Ciao a tutti,

ho la seguente query nel mio db chiamata "Jobs user" (ovviamente senza le virgolette):

PARAMETERS [Inserire il nome della user] Text ( 255 );
SELECT u.USER, l.LAYER, p.PROGETTO, s.PERCORSO_DS, s.SEQUENCE, pe.PERIODICITA, s.ORA
FROM SEQUENCES AS s, PROGETTI AS p, PERIODICITA AS pe, USERS AS u, LAYERS AS l
WHERE u.USER Like "*" & [Inserire il nome della user] & "*"
AND p.ID_PROGETTO = s.ID_PROGETTO
AND s.ID_PERIODICITA = pe.ID_PERIODICITA
AND s.ID_USER = u.ID_USER
AND s.ID_LAYER = l.ID_LAYER
ORDER BY UCASE(p.PROGETTO), UCASE(s.SEQUENCE);

Se la eseguo con doppio click, funziona alla grande chiedendomi il parametro.

Se provo col seguente codice VBA mi va in errore di runtime sulla riga di valorizzazione del parametro

Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim rst As DAO.Recordset
Dim SQLText As String

Set db = CurrentDb
Set qfd = db.QueryDefs("Jobs user")

-->> qdf.Parameters(0) = Form_Avvio.TestoRicercaMasterSequence.Value <<--

Set rst = qdf.OpenRecordset()
MsgBox rst.Fields(1).Value

L'errore esatto è:
Variabile oggetto o variabile del blocco with non impostata

Cosa sto sbagliando?

GRAZIE!

30 Risposte

  • Re: Query parametrica con Querydef

    Impara a selezionare il codice VBA e poi cliccare su Code per circoscriverlo e farcelo vedere con i tipici caratteri monotype più familiari ai programmatori.

    Un errore sicuramente sta qui
    Dim qdf As DAO.QueryDef
    Set qfd = db.QueryDefs("Jobs user")
    

    Hai dichiarato una variabile qdf, ma poi hai assegnato qfd.
  • Re: Query parametrica con Querydef

    OsvaldoLaviosa ha scritto:


    Impara a selezionare il codice VBA e poi cliccare su Code per circoscriverlo e farcelo vedere con i tipici caratteri monotype più familiari ai programmatori.

    Un errore sicuramente sta qui
    Dim qdf As DAO.QueryDef
    Set qfd = db.QueryDefs("Jobs user")
    

    Hai dichiarato una variabile qdf, ma poi hai assegnato qfd.
    Punto 1: scusate

    Punto 2: che deficiente che sò!

    Ora l'errore ce l'ho su
    Set rst = qdf.OpenRecordset()
  • Re: Query parametrica con Querydef

    Provando a leggere da qui
    https://www.iprogrammatori.it/forum-programmazione/access/query-parametrica-vba-t25337.html
    Intanto non capisco perché dichiari qdf.Parameters(0). Non serve mettere le parentesi con lo 0.
    Idem scrivi solo qdf.OpenRecordset
  • Re: Query parametrica con Querydef

    OsvaldoLaviosa ha scritto:


    Provando a leggere da qui
    https://www.iprogrammatori.it/forum-programmazione/access/query-parametrica-vba-t25337.html
    Intanto non capisco perché dichiari qdf.Parameters(0). Non serve mettere le parentesi con lo 0.
    Idem scrivi solo qdf.OpenRecordset
    Se tolgo (0) va in errore, e da quello che ricordo quando programmavo in vb, mi sembra corretto così

    Se scrivo solo qdf.OpenRecordset come referenzio poi il recordset?
  • Re: Query parametrica con Querydef

    rinh0wrz ha scritto:


    OsvaldoLaviosa ha scritto:


    Provando a leggere da qui
    https://www.iprogrammatori.it/forum-programmazione/access/query-parametrica-vba-t25337.html
    Intanto non capisco perché dichiari qdf.Parameters(0). Non serve mettere le parentesi con lo 0.
    Idem scrivi solo qdf.OpenRecordset
    Se tolgo (0) va in errore, e da quello che ricordo quando programmavo in vb, mi sembra corretto così

    Se scrivo solo qdf.OpenRecordset come referenzio poi il recordset?
    Apposto! Ho risolto!
  • Re: Query parametrica con Querydef

    Ho fatto bene a segnalarti il link, ma ho commesso qualche pasticcio anch'io. Tuttavia mostra l'intero codice corretto (come previsto da regolamento del forum).
  • Re: Query parametrica con Querydef

    Allora, ci sono quasi.

    Data la seguente query:
    PARAMETERS [Sequence] Text ( 255 );
    SELECT s.ID_SEQUENCE, u.User, l.LAYER, p.PROGETTO, s.PERCORSO_DS, s.SEQUENCE, pe.PERIODICITA, s.ORA
    FROM SEQUENCES AS s, PROGETTI AS p, PERIODICITA AS pe, USERS AS u, LAYERS AS l
    WHERE (((s.SEQUENCE) Like "*" & [Sequence] & "*") And ((p.ID_PROGETTO)=s.ID_PROGETTO) And ((s.ID_PERIODICITA)=pe.ID_PERIODICITA) And ((s.ID_USER)=u.ID_USER) And ((s.ID_LAYER)=l.ID_LAYER))
    ORDER BY UCase(p.PROGETTO), UCase(s.SEQUENCE);
    
    Se la lancio da doppio click, mi chiede il parametro, lo inserisco e funziona aprendomi la griglia coi risultati.

    Se provo da VBA, non so come aprire la griglia.
        Dim db As DAO.Database
        Dim qdf As DAO.QueryDef
        Dim rs As DAO.Recordset
        Dim SQLText As String
        
        Set db = CurrentDb
        Set qdf = db.QueryDefs("Ricerca Master Sequence")
        qdf.ReturnsRecords = True
        qdf.Parameters("Sequence") = Form_Avvio.TestoRicercaMasterSequence.Value
        Set rs = qdf.OpenRecordset(dbOpenSnapshot)
  • Re: Query parametrica con Querydef

    La prossima domanda sarà, una volta aperta la griglia (se mai riuscirò) una volta selezionato il record con un click, portare i valori su una maschera.
    Ma questo lo vedremo dopo...
  • Re: Query parametrica con Querydef

    Leggi e segui bene qui come aprire una query parametrica
    https://docs.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/database-openrecordset-method-dao
    qdf.ReturnsRecords = True
    Non conosco questa istruzione. Sei sicuro che puoi scriverla prima di passargli il parametro e/o aprire il recordset della query?

    Indicaci anche cosa c'è scritto nel messaggio errore.
  • Re: Query parametrica con Querydef

    OsvaldoLaviosa ha scritto:


    Leggi e segui bene qui come aprire una query parametrica
    https://docs.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/database-openrecordset-method-dao

    Purtroppo avevo già letto, ma non ottengo quello che voglio.
    qdf.ReturnsRecords = True
    Non conosco questa istruzione. Sei sicuro che puoi scriverla prima di passargli il parametro e/o aprire il recordset della query?

    No, l'ho scopiazzata girando per google, ma ora la tolgo, tanto non cambia nulla.

    Indicaci anche cosa c'è scritto nel messaggio errore.
    Purtroppo non ho errori, ma non riesco ad aprire la griglia.
    Con un recordset devo per forza avere una maschera mia? Non posso utilizzare la griglia di default?
  • Re: Query parametrica con Querydef

    Di quale griglia stai parlando?
    Quando apri un recordset...questa operazione avviene (come dire) "di nascosto", l'utente non vede nulla sotto i propri occhi, mentre il codice VBA apre e ci lavora sopra.
  • Re: Query parametrica con Querydef

    OsvaldoLaviosa ha scritto:


    Di quale griglia stai parlando?
    Quando apri un recordset...questa operazione avviene (come dire) "di nascosto", l'utente non vede nulla sotto i propri occhi, mentre il codice VBA apre e ci lavora sopra.
    Per griglia intendo la classica griglia come se facessi doppio click su una query dentro access stesso.
  • Re: Query parametrica con Querydef

    Allora ti serve
    DoCmd.OpenQuery "Nome query"
    essendo poi la query parametrica, automaticamente vorrà sapere quale valore ci deve andare dentro il parametro. Tu hai la maschera aperta in quel momento e la query si eseguirà automaticamente mostrandoti il "recordset" (stavolta sotto i tuoi occhi).
  • Re: Query parametrica con Querydef

    OsvaldoLaviosa ha scritto:


    Allora ti serve
    DoCmd.OpenQuery "Nome query"
    essendo poi la query parametrica, automaticamente vorrà sapere quale valore ci deve andare dentro il parametro. Tu hai la maschera aperta in quel momento e la query si eseguirà automaticamente mostrandoti il "recordset" (stavolta sotto i tuoi occhi).
    OK, così andrebbe pure bene.
    Vorrei passargli il parametro da una maschera, senza utilizzare la casella brutta grigia di access, ma mi sa che non ho speranze. Nel senso volevo fare una cosa figa utilizzando il querydef e passando il parametro alla query da codice dopo averlo letto dalla mia maschera.
    Ma credo che questo non sia fattibile, perchè avendo la query un parametro, forse Access, mi proporrebbe comuqneu la sua popup grigia.

    Se non riesco a spiegarmi dimmelo che nel we provo a mettere qualche immagine per essere più chiaro.

    Grazie di tutto per ora!
Devi accedere o registrarti per scrivere nel forum
30 risposte