Newsgroup: it.comp.appl.access
Titolo: Riferimento a campo variabile in una query

Buonasera a tutti!
 
 
Ho una query con i seguenti 5 campi:
Peso, Altezza, Età, ParametroDiRiferimento, Risultato
80,   182,     30,  Età
75,   170,     42,  Età
82,   190,     27,  Peso
90,   168,     38,  Età
 
 
Quale formula devo inserire nel campo "Risultato" per ottenere il valore del campo indicato dalla variabile "ParametroDiRiferimento"?
 
Ad esempio se il ParametroDiRiferimento è "Peso" nel campo "Risultato" devo ottenere il valore del campo della query chiamato "Peso".
 
A livello di singolo record in una maschera ho risolto utilizzando la funzione =Forms("NomeMaschera").Controls([NomeControllo])
 
Ma devo ottenere lo stesso risultato all'interno della query. Come posso fare? Esiste una funzione tipo Query.Fields("")?
 
Saluti
Davide

> Ma devo ottenere lo stesso risultato all'interno della query. Come posso fare? Esiste una funzione tipo Query.Fields("")?
 
Premesso che a livello di funzionalita potresti avere dei problemi,
se poi qualcuni ti scrive "Altezza" con una sola z  ......
 
 
Ma la domanda è "stimolante"   bella la soluzione nella maschera  :)
 
 
Nelle query per il momento mi vengono in mente 2 soluzioni
( ma entrambe non mi piacciono,  certamente si puo fare di meglio, comunque le riporto )
 
Tabella di nome T1  Con i campi;
Idx ----- Contatore --- Key
Pes ----- Numerico
Alt ----- Numerico
Eta ----- Numerico
PdR ----- Testo
 
[code]
SELECT 
T1.Idx, 
T1.Pes, 
T1.Alt, 
T1.Eta, 
T1.PdR, 
IIf([T1].[PdR]="Pes",[T1].[Pes]) & IIf([T1].[PdR]="Alt",[T1].[Alt]) & IIf([T1].[PdR]="Eta",[T1].[Eta]) AS Espr1, 
DLookUp("T1.Pes","T1","T1.Idx=" & [Idx]) AS Espr2, 
DLookUp([T1].[PdR],"T1","T1.Idx=" & [Idx]) AS Espr3
FROM 
T1
;
[/code]
 
.
 
 
 

 FROM T1;
 
Grazie ma non posso usare la funzione IIf. Il mio esempio era semplificato, nella realtà ho a che fare con più di 50 ParametriDiRiferimento quindi devo trovare una soluzione alternativa. Ho provato con Eval([NomeVariabile]) ma sembra non funzionare. Probabilmente dovrò creare una funzione personalizzata ma ho bisogno di uno spunto su come scriverla.
 
Qualche idea?
Davide

 Davide
L'unico "spunto" che mi viene in mente ï¿œ quello di non
usare nelle query, come nelle tabelle, campi calcolati.
Potresti fare tutto a livello di Form/Report utilizzando
senza limitazioni le funzionalitï¿œ VBA.
 
Perï¿œ ï¿œ difficile proporre alternative senza conoscere
la finalitï¿œ della query.
 
Bruno

 Bruno
 
Posso provare a descrivere le finalità della query, ma spero di non creare più confusione.
 
Devo creare un listino prezzi per dei prodotti. I prodotti hanno un certo numero di caratteristiche tecniche (Diametro, Spessore, Altezza, Peso, LunghezzaSaldatura, N°Fori, ecc.). Ad ogni prodotto è associato un ciclo di lavorazione (Taglio, Saldatura, Stampaggio, ecc.)
Il prezzo di ogni fase di lavorazione per il singolo prodotto è il risultato di formule che considerano come variabili 4 o 5 caratteristiche tecniche del prodotto. Ad esempio la fase di Saldatura considera le variabili: N°Componenti, LunghezzaSaldatura, Spessore, Materiale, Quantità.
 
Quindi ho Tabella1 con i prodotti e le loro caratteristiche tecniche:
CodProdotto, Quantità, Diametro, Spessore, LunghezzaTaglio, LunghezzaSaldatura
Prodotto1, 5, 1250, 8, 12540, 15530
Prodotto2, 3, 1800, 5, 4570, 2540
...
 
Tabella2 con i cicli di lavorazione:
CodProdotto, CodFase
Prodotto1, Taglio
Prodotto1, Saldatura
Prodotto1, Stampaggio
Prodotto2, Taglio
...
 
Tabella3 con le fasi di lavorazioni:
CodFase, Parametro1, Parametro2, Parametro3, Parametro4, Parametro5
Saldatura, N°Componenti, LunghezzaSaldatura, Spessore, Materiale, Quantità
Taglio, LunghezzaTaglio, Spessore, Materiale, Quantità
...
 
 
La query si presenta invece come segue:
CodProdotto, Quantità, LunghezzaSaldatura, ..., CodFase, Parametro1, Parametro2,..., ValParametro1,...
Prodotto1, 5, 15530, ..., Taglio, LunghezzaTaglio, Spessore, ..., f(x),...
Prodotto1, 5, 15530, ..., Saldatura, N°Componenti, LunghezzaSaldatura, ..., f(x),...
Prodotto1, 5, 15530, ..., Stampaggio, Altezza, Spessore, ..., f(x),...
Prodotto2, 3, 2540, ..., Taglio, LunghezzaTaglio, Spessore, ..., f(x),...
 
 
 
Devo quindi trovare una formula da inserire nel campo ValParametro1 che mi dia come risultato il valore del campo il cui nome corrisponde al valore del campo "Parametro1".
 
Spero di essere stato abbastanza chiaro.
Davide
 
 
 

 Spero di essere stato abbastanza chiaro.
L'analisi a distanza esposta ai non addetti ai lavori
ï¿œ cosa che non aiuta molto.
 
Conoscendo invece la struttura delle tabelle
(tipologia dei campi e relazioni), si potrï¿œ
giudicare, definito un primo campo, se e come ottenere
il contenuto di un secondo campo al primo correlato.
Intendendo per primo e secondo campo anche una
pluralitï¿œ di campi.
 
Bruno

 Bruno
 
 
Grazie Bruno, ma non sono in grado di descriverti meglio la situazione senza aggiungere complessità. Credo che il mio primo post, benchè riporti dei dati semplificati, descriva abbastanza bene la problematica. Certo conoscendo la struttura delle tabelle e le relazioni si potrebbero trovare soluzioni alternative ma volevo capire se esistono delle funzioni standard di Access di cui non conosco perfettamente il funzionamento (es. Eval("NomeCampo") o Fields("NomeCampo").value) da poter inserire direttamente nella query senza fare giri complessi.
Al momento ho risolto utilizzando nella query una Public Function con il seguente codice  DLookup(NomeControllo, TabellaProdotti, "CodProdotto='" & CodProdotto & "'") ma questo rallenta l'esecuzione della query.
 
Davide

> Al momento ho risolto utilizzando nella query una Public Function con il seguente codice  DLookup(NomeControllo, TabellaProdotti, "CodProdotto='" & CodProdotto & "'") ma questo rallenta l'esecuzione della query.
 
 
Al momento non vedo altre soluzioni se non il DLookUp che gia stai usando in una funzione pubblica.
 
Potresti risparmiare qualche secondo se lo metti direttamente nella query
ma forse non sarebbe significativo
Espr4: DLookUp([PdR];"T1";"T1.Idx='" & [Idx] & "'")
 
 
Chiaramente sto pensando solamente a Query, quindi escludo a priori
Tabelle temporanee RecordSet ecc
 
 
Facci sapere
 
.

Ma che versione di Access usi ???
 
Hai pensato a una colonna calcolata sulla stessa tabella ???
( Roba che a me assolutamente NON piace, ma potrebbe essere risolutiva )
 
.

 ...
 
Se esiste un campo univoco (diciamo un PK "Id") puoi usare un 
espressione con DLookUp nella query:
 
DLookup([ParametroDiRiferimento];"NomeTabella";"Id=" & [Id])
 
-- 
Ciao
Karl
*********
Access FAQ:  
http://www.donkarl.com/it
 
Access Lobby: 
http://www.AccessDevelopers.org