Newsgroup: it.comp.appl.access
Titolo: [Forms] Dlookup su domini non rappresentati nella query

Ho una maschera che ha come origine controllo una query di selezione 
su due tabelle, "pratiche" e "utenti". Ho una terza tabella "comuni" 
racchiudente i nomi dei comuni. Nella maschera voglio far comparire  
in un controllo calcolato il nome del comune semplicemente digitando 
l'id dell'utente.
Esempio
Tabella pratiche
pratiche!id_pratica
pratiche!descrizione_pratica
pratiche!id_utente
Tabella utenti
utenti!id_utente
utenti!utente
utenti!id_comune
Tabella comuni
comuni!id_comune
comuni!comune
La query di selezione contiene...
1 pratiche!id_pratica
2 pratiche!descrizione_pratica
3 pratiche!id_utente
4 utenti!utente    <-- richiamati grazie alla relazione uno a molti 
5 utenti!id_comune <-- di utenti con la tabella pratiche (id_utente)
Ho pensato a questa espressione
=Dlookup("[comune]";"comuni";"[id_comune]=[id_comune"])
dove il primo [id_comune] dovrebbe far riferimento al dominio 
"comuni", mentre il secondo al valore corrispondente alla chiave 
dell'utente appena digitato in un controllo precedente. Il problema č 
che Dlookup va a pescare invariabilmente il primo record della 
tabella comuni poiché, IMHO, l'ominimia tra [id_comune] del dominio 
"comuni" e [id_comune] della query lo sta confondendo. Se potessi 
usare una notazione differente in utenti (ad esempio id_comune_res), 
funzionerebbe. Cosa posso fare nel caso in cui: 
a. non voglia far entrare nella query anche la tabella comuni
b. non voglia dare un nome differente a utenti!id_comune
???
Thanks in advance.

 =Dlookup("[comune]";"comuni";"[id_comune]=[id_comune"])
    Semmai avresti dovuto scrivere:
        =Dlookup("[comune]";"comuni";"[id_comune]=[id_comune]")
ma sicuramente e' una svista. Mentre la formula che dovrebbe fare al
caso tuo dovrebbe essere:
        =Dlookup("[comune]";"comuni";"[id_comune]=" & [id_comune])
    (Facci sapere se ed eventualmente come hai risolto. Grazie.)
--
Ciao :o)
Maurizio
--------
?SPQR(C)
 X
--------

     (Facci sapere se ed eventualmente come hai risolto. Grazie.)
Buona la seconda. Tuttavia non ho capito la discriminante tra la
prima e la seconda. Voglio dire, la prima funziona in questo caso: 
=Dlookup("[email]";"studenti";"[matricola]=[matricola]")
Ma non funziona (restituisce sempre e solo Null) in questo
=Dlookup("[telefono res]";"studenti";"[matricola]=[matricola]")
laddove sia [email] che [telefono res] rappresentano campi in
formato testo della stessa tabella "studenti". Dlookup funziona
invece cosě come tu hai suggerito: =Dlookup("[telefono
res]";"studenti";"[matricola]=" & [matricola]) 
Ma c'č poi tutta questa differenza tra queste due espressioni?
=Dlookup("[telefono res]";"studenti";"[matricola]=[matricola]")
=Dlookup("[telefono res]";"studenti";"[matricola]=" & [matricola])
Perdona l'inioranza :-) , ma dove sta l'inghippo?

 Perdona l'inioranza :-) , ma dove sta l'inghippo?
    Fai una bella cosa, sperimenta questo: apri il database di esempio
Northwind e crea una nuova maschera in visualizzazione struttura.
Assegna alla proprieta' Origine record la tabella Clienti e piazza sulla
maschera due caselle di testo trascinando IDCliente e NomeSocietà dalla
finestra Elenco campi, in modo da ottenere due caselle di testo che
abbiano lo stesso nome dei campi in Origine controllo. Poi piazza altre
due caselle di testo, Testo1 e Testo2, e assegna come origine controllo:
=DLookUp("[NomeSocietà]";"Clienti";"[IDCliente]=[IDCliente]")
=DLookUp("[NomeSocietà]";"Clienti";"[IDCliente]='" & [IDCliente] & "'")
quindi sfoglia i record. Cosa noti? Che Testo1 resta bloccata su uno
stesso NomeSocietà mentre Testo2 assume il valore del campo NomeSocietà
del record corrente
    Perche' questo? Perche' nella prima formula viene trovato il
NomeSocietà del record in cui il campo IDCliente e' uguale al valore del
campo IDCliente, cioe' a se stesso. Nella seconda invece ci si riferisce
al campo [IDCliente] del record corrente della maschera.


 della maschera. 
 
Ti ringrazio per la spiegazione, ma rimangono un paio di perplessità. 
Avevo già in parte risolto leggendo con maggior cura la guida alla 
voce "Dlookup". Poi sono stato letteralmente illuminato sulla via di 
Damasco leggendo l'esempio di "Roberto da casa" in questo articolo 
news:9Yn9a.11157$
zo2.3...@news2.tin.it
 dove lascia intendere la 
sintassi delle funzioni di aggregazione su domini nel caso di una 
condizione where complessa (AND trascinato all'interno degli apici mi 
ha risolto un paio di grattacapi ben più complessi del quesito che 
avevo posto inizialmente).
Come scrivevo, rimangono però un paio di perplessità.
La prima è che a parità di sintassi le funzioni di aggregazione su 
domini sembrano funzionare bene su alcuni campi e non su altri. Ad 
esempio, sostituendo xyz
=Dlookup("[xyz]";"studenti";"[matricola]=[matricola]")
riuscivo a estrapolare l'email, ma non il numero di telefono (ed 
erano entrambi campi testo appartenenti al dominio, ma non riportati 
nella query che era la base dei dati della maschera dove [matricola] 
rappresentava sia un controllo che un campo della query).
La seconda perplessità è generata dalla complessità della guida di 
XP. Sono per lo più arrivato a risolvere i miei problemi con 
tentativi o leggendo gli articoli spediti in questo newsgroup. Non ho 
trovato l'argomento della guida citato da Roberto quando ha scritto:
" Per maggiori chiarimenti dai un'occhiata a cosa dice l'help circa
" l'argomento Virgolette nelle stringhe (in modo particolare al 
" paragrafo intitolato Inclusione di una variabile che rappresenta le 
"  virgolette doppie).
In sintesi, ho come l'impressione che i miglioramenti su Access XP 
abbiano anche generato una zona d'ombra, terra di nessuno, frutto dei 
bug dell'applicazione dove per un niubbone, anche non sprovveduto, 
può risultare veramente difficile orientarsi.
Per oggi ho sgroppato abbastanza ;). Grazie per l'aiuto.

 >     Fai una bella cosa, sperimenta questo:
[...]

[...]
    Spero che tu non abbia ancora buttato via la maschera dell'altro mio
post perche' ti proporrei di aggiungerle altri tre controlli Casella di
testo: Testo3, Testo4 e Testo5. Assegna alle rispettive proprieta'
Origine controllo le seguenti formule:
        =[IDCliente]
        =DLookUp("[NomeSocietà]";"Clienti";"[IDCliente]=[Testo3]")
        =DLookUp("[NomeSocietà]";"Clienti";"[IDCliente]='" & [Testo3] &
        "'")
    Come vedi mentre nell'esempio precedente formule differenti davano
differenti esiti, ora formule differenti danno lo stesso
risultato. Cosa e' cambiato? Che ora la funzione non trova [Testo3] ne'
fra i nomi della tabella, ne' fra i nomi dei campi del record
sottostante la maschera, quindi lo cerca fra i nomi dei controlli della
maschera. E lo trova. E lo elabora allo stesso modo nei due casi. Penso
che la questione sia tutta qui.
