Newsgroup: it.comp.www.asp
Titolo: Come recuperare un valore da un campo che usa "lookup"

Un saluto a tutto il ng,
ho un quesito probabilmente stupido, ma non riesco a trovare
una risposta con google e simili (forse perchè è un po' articolato
da spiegare).
Ho un database con due tabelle: "alunni" e "corsi". Nella tabella
alunni ho solo i campi ID, NOME_ALUNNO, CORSO. Nella tabella corsi ho
invece ID, NOME_CORSO. Chiaramente ho collegato le tabelle per evitare
ripetizione di dati.
Se apro la tabella degli alunnim vedo una cosa come questa:
1 - Mario - 1
2 - Piero - 2
3 - Igor  - 1
4 - Vale  - 1
5 - Paolo - 2
con i valori 1 e 2 presi dagli ID della tabella dei corsi:
1 - fisica tecnica
2 - analisi II
(quindi Mario segue fisica, così come Igor e Vale). Scusate se dico
cose ovvie ma è per arrivare al punto: nella tabella alunni (su Access) il
campo CORSO l'ho impostato come lookup alla tabella corsi. Quindi al posto
dei valori 1 e 2, vedo effettivamente i nomi dei corsi.
Molto comodo. Però se quero il DB ASP, recuperando i valori di "CORSO"
per ogni alunno... mi restituisce 1 e 2, non fisica tecnica e analisi II.
Chiaramente se faccio un JOIN ecc ecc via ASP risolvo. Però vorrei capire
se la cosa è fattibile PRIMA da Access, così aprendo il dB io chiedo i
dati della colonna CORSO e mi sputa fuori i nomi (non gli ID).
È possibile farlo via Access con il lookup, in qualche modo?


Moderatore di it.comp.www.asp - Microsoft .NET MVP
http://www.aspitalia.com/
 Enjoy the .NET community!
http://www.dev2dev.it/
 La rete ha connesso nuove particelle!
http://www.extensible.it
 XML and beyond 

> fai una query che ti restituisca questi valori.
Io adesso apro il db e gli chiedo i valori via query:
--------------------------------------------------------
sql = "select * from tabella_alunni"
[... connessione al db ...]
set rs = conn.execute(sql)
do until rs.EOF
 response.write rs("nome") & ", " & rs("corso") & "<br>"
rs.movenext
loop
--------------------------------------------------------
la risposta però è questa:
---------
ugo, 1
paolo, 2
mario, 2
pietro, 2
igor, 1
---------
e via dicendo. Mentre vorrei poter avere i nomi dei corsi:
---------------
ugo, fisica
paolo, chimica
mario, chimica
pietro, chimica
igor, fisica
---------------
come risposta, sempre usando la stessa query sopra citata che
per rs("corso") mi dovrebbe dare "fisica" e non "1", visto che
l'ho collegata da DB e in effetti da db vedo "fisica". Tu
giustamente mi dici di fare una query, intendi dire che
la soluzione sta nel farla come ho indicato io, oppure una cosa
simile ma con i JOIN ... ON necessari? Io vorrei evitarlo e
recuperare i dati direttamente, se possibile.
Scusa se mi dilungo, ma almeno sono sicuro di dire tutto.

 recuperare i dati direttamente, se possibile.
intendo di salvare una query in Access, che faccia la JOIN implicita o 
esplicita (come ti pare).
a quel punto richiami quella, così puoi evitare di dover ripetere lo stesso 
codice in tutti i punti che ti serve.
ti basterà fare SELECT * FROM miaquery per avere i risultati incrociati.


 SELECT * FROM miaquery per avere i risultati incrociati.
Č vero, non ci avevo neache pensato e per questo suggerimento
ti ringrazio molto. Ne approfitto per un'ultima domanda: in
termini di prestazioni, riferendomi ad Access con un db un
po' corposetto (tabella con 12 campi, ognino dei quali č
legato da una relazione con un'altra tabella), secondo te č
meglio lavorare con una query interna al DB piuttosto che una
esterna (cioč da ASP, come al solito)?

 esterna (cioč da ASP, come al solito)?
in questo articolo trovi un po' di spunti sulla questione:
http://www.15seconds.com/issue/020919.htm


 esterna (cioč da ASP, come al solito)?
in questo caso sarebbe meglio una SP... ma Access non le supporta... la
query ad un'altra query ti semplifica solo un po' il codice SQL... penso che
in termini di prestazioni sia molto simile...
ciao
--
Lino Mari [mod - it.economia.e-commerce]
http://www.ebow.it
 - e-business on web!
http://www.dev2dev.it
 - La rete ha connesso nuove particelle - d2D004
I mercati non vogliono parlare con ciarlatani e venditori ambulanti.
Vogliono partecipare alle conversazioni che si svolgono dietro i
firewall delle aziende.

 
http://www.15seconds.com/issue/020919.htm
Adesso vado a leggere, in realtà stavo già scrivendo una risposta
in merito alle prestazioni, per cui finisco qui. Ho fatto 3 prove
con 3 db di dimensioni e pesi diversi
1) 1000 record
2) 100.000 record
3) 300.000 record
Ogni record ha una dozzina di campi (numerici, date, memo). Ogni
campo "pesca" il valore da un'altra tabella (quindi sono 12 tabelle
relazionate). La query finale è una roba abbastanza lunghetta (la
spezzo in modo che ci stia nel messaggio):
---------------------------------------------------------------------
SELECT 
statistics.id
, 
ip.name
 AS ip, statistics.serverdate AS
serverdate, statistics.servertime AS servertime, 
os.name
 AS os,
color.name
 AS color, 
browser.name
 AS browser, 
screen.name
 AS screen,
page.name
 AS page, 
referrer.name
 AS referrer, 
country.name
 AS country
country.longname AS countrylong FROM page INNER JOIN (ip INNER JOIN
(country INNER JOIN (referrer RIGHT JOIN (os RIGHT JOIN (color RIGHT
JOIN (browser RIGHT JOIN (screen RIGHT JOIN statistics ON 
screen.id
 =
statistics.screen) ON 
browser.id
 = statistics.browser) ON 
color.id
 =
statistics.color) ON 
os.id
 = statistics.os) ON 
referrer.id
 =
statistics.referrer) ON 
country.id
 = statistics.country) ON 
ip.id
 =
statistics.ip) ON 
page.id
 = 
statistics.page
;
---------------------------------------------------------------------
I conti (tempi) li ho fatti con un banale timer piazzato alla prima
riga e confrontato con un timer messo in fondo alla pagina. La stessa
query è stata provata prima da Access (stored) e poi dalla pagina ASP.
I risultati mi hanno incuriosito:
caso 1 > la query su Access è più lenta del 10-12%
caso 2 > la query su Access è più lenta del 6%
caso 3 > la query su Access è più lenta del 2%
Aumentando il volume, in pratica, lavora meglio la procedura su DB (o
per lo meno questo è quello che ho dedotto nel mio specifico caso su
un db Access abbastanza corposo).
Ora vado a leggere il tuo link, vediamo se ho detto delle idiozie o
se qualcosa di fondato.. c'è.