Casella di testo non associata con origine controllo basato su di una Query.

Anonimo
2016-11-22T14:27:30+00:00

Buon pomeriggio a tutti, ho letto nello storico delle discussioni di questo forum che :

Non puoi associare ad una casella di testo una query, per visualizzare

in una casella di testo l'unico campo risultato di una query devi

usare la funzione DlookUp. Per cui in origine controllo della casella

di testo metterai:

=Dlookup("NomeCampo", "NomeQuery", "").

Per questo motivo ho creato la seguente Query che mi conta i valori di un campo e che funziona benissimo.

SELECT tblFruitori.Cognome, tblFruitori.Nome, tblFruitori.Grado, tblFruitori.Matricola, tblFruitori.Categoria, tblAnniPrecedenti.PrecedenteUtilizzo, Count(tblAnniPrecedenti.PrecedenteUtilizzo) AS Conteggio

FROM tblFruitori LEFT JOIN tblAnniPrecedenti ON tblFruitori.ID_Fruitore = tblAnniPrecedenti.ID_Parent

GROUP BY tblFruitori.Cognome, tblFruitori.Nome, tblFruitori.Grado, tblFruitori.Matricola, tblFruitori.Categoria, tblAnniPrecedenti.PrecedenteUtilizzo

HAVING (((tblAnniPrecedenti.PrecedenteUtilizzo)="SI"));

Il problema è che quando inserisco questo nella casella di testo, come origine controllo:

=DLookUp("Conteggio";"QueryConta_Turni_precedenti";"conteggio>0")

mi conta sempre il primo valore, non permettendomi di visualizzare il dato ad ogni record diverso per esempio nel mio caso appare sempre il valore 3 e non altri.

Allego le immagini per spiegare meglio la problematica.

Questo è il risultato della query:

Questo è quanto mi indica sempre la casella di testo seppur scorro i vari record sulla maschera, in questo caso dovrebbe indicarmi 1 ( perché il SI è uno solo), invece segna sempre 3, come fare per risolvere questo problema?

Ringrazio come sempre chi mi aiuta in questo.

Ciao Nicola.

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

Risposta accettata dall'autore della domanda

Anonimo
2016-11-23T15:09:26+00:00

=DLookUp("Conteggio";"QueryConta_Turni_precedenti";"tblFruitori.ID_Fruitore**=tblAnniPrecedenti.ID_Parent**" And [tblAnniPrecedenti].[PrecedenteUtilizzo]="SI")

Per prendere la riga giusta devi impostare un ID_Fruitore come variabile :

=DLookUp("Conteggio";"QueryConta_Turni_precedenti";"tblFruitori.ID_Fruitore=" & ID_Fruitore)

pescando dalla query non necessiti della seconda condizione [tblAnniPrecedenti].[PrecedenteUtilizzo]="SI" perché già criterio di filtro nella query.

Ciao Mimmo

P.S. Nella query ripeti due volte il criterio:

SELECT tblFruitori.Cognome, tblFruitori.Nome, tblFruitori.Grado, tblFruitori.Matricola, tblFruitori.Categoria, tblAnniPrecedenti.PrecedenteUtilizzo, Count(tblAnniPrecedenti.PrecedenteUtilizzo) AS Conteggio, tblFruitori.ID_Fruitore, tblAnniPrecedenti.ID_Parent

FROM tblFruitori LEFT JOIN tblAnniPrecedenti ON tblFruitori.ID_Fruitore = tblAnniPrecedenti.ID_Parent

GROUP BY tblFruitori.Cognome, tblFruitori.Nome, tblFruitori.Grado, tblFruitori.Matricola, tblFruitori.Categoria, tblAnniPrecedenti.PrecedenteUtilizzo, tblFruitori.ID_Fruitore, tblAnniPrecedenti.ID_Parent

HAVING (((tblAnniPrecedenti.PrecedenteUtilizzo)="SI") AND ((tblFruitori.ID_Fruitore)=([tblAnniPrecedenti].[ID_Parent])))

ORDER BY tblFruitori.Cognome;

Basta quella scritta nella Left Join.

La risposta è stata utile?

0 commenti Nessun commento

14 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2016-11-23T10:02:44+00:00

    Ciao Nico,

    la query, dovendo raggruppare anche per gli ID non ti può restituire il conteggio. Prova ad eseguire la query e guarda il risultato.

    Io ti consiglio di effettuare il conteggio sulla tabella tblAnniPrecedenti con una DCount :

    =DCount("*";"tblAnniPrecedenti";"ID_Fruitore = " & Id_Fruitore & " And PrecedenteUtilizzo='SI'")

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2016-11-23T08:58:58+00:00

    Buongiorno a tutti, ciao Sandro, ciao Mimmo.

    Seguendo i vostri consigli, ho modificato lo statement sql in questo modo:

    SELECT tblFruitori.Cognome, tblFruitori.Nome, tblFruitori.Grado, tblFruitori.Matricola, tblFruitori.Categoria, tblAnniPrecedenti.PrecedenteUtilizzo, Count(tblAnniPrecedenti.PrecedenteUtilizzo) AS Conteggio, tblFruitori.ID_Fruitore, tblAnniPrecedenti.ID_Parent

    FROM tblFruitori LEFT JOIN tblAnniPrecedenti ON tblFruitori.ID_Fruitore = tblAnniPrecedenti.ID_Parent

    GROUP BY tblFruitori.Cognome, tblFruitori.Nome, tblFruitori.Grado, tblFruitori.Matricola, tblFruitori.Categoria, tblAnniPrecedenti.PrecedenteUtilizzo, tblFruitori.ID_Fruitore, tblAnniPrecedenti.ID_Parent

    HAVING (((tblAnniPrecedenti.PrecedenteUtilizzo)="SI") AND ((tblFruitori.ID_Fruitore)=(tblAnniPrecedenti.ID_Parent)))

    ORDER BY tblFruitori.Cognome;

    e inserito questo nella DlookUp

    =DLookUp("Conteggio";"QueryConta_Turni_precedenti";"tblFruitori.ID_Fruitore=tblAnniPrecedenti.ID_Parent" And [tblAnniPrecedenti].[PrecedenteUtilizzo]="SI")

    ma ottengo nella casella di testo questo tipo di errore: #Nome?

    cosa sbaglio?

    Ciao Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2016-11-22T15:45:11+00:00

    Ciao,

    penso che la DLookUp dovrebbe avere la condizione:

    =DLookUp("Conteggio";"QueryConta_Turni_precedenti";"tblFruitori.ID_Fruitore = " & Me.Id_Fruitore)

    In alternativa potresti anche utilizzare:

    =DCount("*";"tblAnniPrecedenti";"ID_Fruitore = " & Me.Id_Fruitore & " And PrecedenteUtilizzo='SI'")

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2016-11-22T15:03:43+00:00

    ciao Nicola,

    [...]

     ho letto nello storico delle discussioni di questo forum che :

    Non puoi associare ad una casella di testo una query, per visualizzare

    in una casella di testo l'unico campo risultato di una query devi

    usare la funzione DlookUp.

    [...]

    beh, se il controllo è associato alla query si che puoi visualizzare il contenuto del relativo campo, ma creo che il copia incolla mi stia ingannando.

    In ogni caso la Dlookup non è l'unica strada si potrebbe anche aprire un recordset e leggere ed assegnare il valore.

    [...]

    =DLookUp("Conteggio";"QueryConta_Turni_precedenti";"conteggio>0")

    mi conta sempre il primo valore, non permettendomi di visualizzare il dato ad ogni record diverso per esempio nel mio caso appare sempre il valore 3 e non altri.

    [...]

     ho capito cosa intendi, ma la dlookup estrae il primo valore in cui la whereCondition è vera e non il primo valore in senso assoluto, la differenza è sostanziale.

    Secondo me, per visualizzare il conteggio corretto devi modificare la whereCondition della dlookup in modo che essa legga non il conteggio>0, ma la pk associata al quel nome e cognome.

    PK che da come sembra manca nella tua query. Quindi devi modificare anche lo statement sql.

    Quindi allo scorrere dei record eseguirei la dlookup e di conseguenza mostrerai il valore corretto.

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento