|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Dec 2001
Messaggi: 452
|
[VBA: ACCESS] Passare valori funzioni
Nel mio database ho la seguente funzione:
Codice:
codice: Function ListinoPrezzi(Forn) As Variant Forn = Val(Forn) End Function Il valore "Forn" è passato alla funzione utilizzando il comando "Call" da una mascherà nella quale, da una casella a discesa, si seleziona il nome di un fornitore che corrisponde ad un numero progressivo della relativa tabella. Quindi per esempio, se si seleziona il fornitore n. 7 ovviamente la variabile "Forn" memorizzerà il valore "7". Ho già verificato ed in effetti il valore viene memorizzato. Il problema si pone quando cerco di utilizzare questa variabile nel campo "Criteri" di una query di selezione. La funzione "ListinoPrezzi" viene visualizzata, ma purtroppo il valore non passa. Dove sbaglio?
__________________
Blog Lago Trasimeno |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
1. Anzitutto perchè usare una funzione, quando si vuole semplicemente assegnare un valore ad una variabile pubblica ? Suppongo Forn sia pubblica e visibile da tutto il progetto... 2. Nella Function il parametro in ingresso Forn ha lo stesso nome della variabile Forn. Questo sarebbe sempre da evitare, soprattutto in VBA dove alcune ambiguità non vengono segnalate, e possono portare ad errori... 3. La Function ritorna un valore Variant, che all'interno della stessa non viene mai assegnato. Se puoi posta il codice della Query che dovrebbe farne uso, e quello che hai messo in "Criteri"... |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Dec 2001
Messaggi: 452
|
Ho usato una funzione perché credevo fosse la strada migliore e perché credo sia l'unico modo per far "vedere" il suo valore all'interno della query, ma se c'è un metodo migliore, ti sarei grato se vorrai spiegarmelo.
Il motivo per cui ho usato una funzione è perché vorrei creare un modulo standard per la ricerca dei dati dal listino prezzi. Il listino prezzi che ho nel database ha la seguente struttura: IDArticolo IDFornitore Codice Descrizione Prezzo .... Siccome utilizzo la stessa tabella per più fornitori, la stessa contiene più listini ed a volte questi possono contenere articoli che hanno lo stesso codice. Un esempio dei miei dati è quello che segue: Codice:
IDArticolo IDFornitore Codice Descrizione 1 1 A1 ART1 2 1 A2 ART2 3 1 A3 ART3 4 2 A1 ART1 5 2 A2 ART2 6 2 A3 ART3 7 3 A1 ART1 8 3 A2 ART2 9 3 A3 ART3 Ora, se io ho una maschera di ricerca, dalla quale voglio, partendo da nome fornitore e codice articolo, ottenere la visualizzazione di descrizione, prezzo etc..., devo fare in modo di filtrare il listino e ovviamente la query dovrebbe ritornare soltanto i valori legati agli articoli di quel particolare fornitore. Sono già riuscito ad ottenere questo inserendo nel campo criteri della query il numero del fornitore proveniente dalla maschera, ma il problema è che per ogni maschera di ricerca, devo creare un'altra query nel cui campo criteri ci sia indicato il nome del campo di ricerca della maschera stessa. Credo che se riuscissi a fare in modo che da ogni maschera di ricerca presente nel database, si possa passare il valore del fornitore ad una funzione o variabile che poi possa essere a sua volta passata alla query, si possa evitare di dover creare tante query per quante sono le maschere di ricerca. Spero d'essere stato chiaro.
__________________
Blog Lago Trasimeno |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Poi, se hai più maschere, ognuna la chiama passando i suoi parametri, ma a livello di DB, la query è sempre una sola... ![]() |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Dec 2001
Messaggi: 452
|
Query parametrica? Cosa diavolo è?
Scusa, ma non sono molto esperto. Potresti illuminarmi? Grazie ancora!
__________________
Blog Lago Trasimeno |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Una Stored Query parametrica in Access è appunto una Query le cui clausole WHERE presuppongono l'input di dati variabili.
Ad es.: Codice:
SELECT * FROM Tabella WHERE id = [parametro]; |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:43.