Calcolo in una query in funzione di un valore di una cella

di
Anonimizzato14833
il
9 risposte

Calcolo in una query in funzione di un valore di una cella

Ciao a tutti,

ho bisogno di eseguire un calcolo in una query, il calcolo varia in funzione di un valore prezzo definito in una colonna:

piu o meno l'idea è cosi se il prezzo è da 0 a 100 moltiplica la quantita per 1, se è tra 101 e 500 moltiplica per 0.75 ecc...

Per ora ho impostato una formula per stabilire la moltiplicazione da fare:

Calcolo: IIf([01 DB Principale]![Prezzo standard]>[Range prezzo]![Range1];[Range prezzo]![Percentuale1];"altro")

Cosi funziona, ma se aggiungo una seconda condizione:

Calcolo: IIf([01 DB Principale]![Prezzo standard]>[Range prezzo]![Range1];[Range prezzo]![Percentuale1];(IIf([01 DB Principale]![Prezzo standard]>[Range prezzo]![Range2];[Range prezzo]![Percentuale2];"range3")))

non funziona.

Idee su come risolvere il problema? tenete anche presente che sono costretto a fare una query in cui posso modificare e non averli in sola lettura

9 Risposte

  • Re: Calcolo in una query in funzione di un valore di una cella

    Penso che usare IIf su troppe condizioni da controllare/annidare, non sia saggio. Intanto rischi di andare oltre 255 caratteri consentiti dalla lunghezza massima di una espressione. Secondo me, se esponi più dettagliatamente tutto il problema, dovrebbe risolversi con altra strategia.
  • Re: Calcolo in una query in funzione di un valore di una cella

    Ciao,

    ti ringrazio per la risposta, allora:

    ho un elenco di componenti ogniuno dei quali ha un certo costo, ho l'esigenza di creare un qualcosa che mi confronti un certo range di prezzo con una percentuale da offrire in automatico come quantita di ricambio consigliato, ad esempio

    se < di 10 euro tieni il 100%
    se => di 11 euro e < di 100 tieni il 75%
    se => di 101 euro e < di 500 tieni il 50%
    ecc

    il linea di massima avrei battezzato 5 fascie di prezzo, queste fascie sono campi modificabili dall'utente, quello che mi serve è un qualcosa che faccia

    se [prezzo del componente] è < o > [range prezzo] allora [prezzo componente]*[percentuale associata al range]

    non so se sono riuscito ad essere abbastanza chiaro
  • Re: Calcolo in una query in funzione di un valore di una cella

    Ciao,
    se non hai troppi dati in quanto la soluzione proposta potrebbe incidere sulle performance,
    una funzioncina dedicata, potrebbe fare al tuo caso, richiamala nella tua query in un campo calcolato.
    
    Public Function ftcCalcolaprezzo(priceToBeChosen As Currency) As Currency
    
    Select Case priceToBeChosen
        Case 11 To 100
            priceToBeChosen = priceToBeChosen * 0.75
        Case 101 To 500
            priceToBeChosen = priceToBeChosen * 0.5
    End Select
    ftcCalcolaprezzo = priceToBeChosen
    
    End Function
    
    
    ti saluto.
  • Re: Calcolo in una query in funzione di un valore di una cella

    Ciao,

    ho fatto alcune prove e sono emerse altre esigenze, alla fine ho deciso di seguire questo schema:

    Da una maschera premo un pulsante
    si lancia una query di aggiornamento
    la query di aggiornamento scrive in una tabella i valori calcolati (devo poterli poi cambiare a mano)
    si aggiorna la maschera con i valori che ho calcolato

    quindi ho scritto questo codice:
    
    Private Sub Comando76_Click()
    
    Prezzo = Forms![01 compila ore]![Prezzo standard]
    quantita = Forms![01 compila ore]![Quantità]
    punto_virgola = ";"
    Dim Quantita_calcolata As String
    
    If Prezzo <= Forms![01 compila ore]![Range1] Then
    Quantita_calcolata = quantita * Forms![01 compila ore]![Percentuale1]
    GoTo 10
    End If
    
    If Prezzo <= Forms![01 compila ore]![Range2] Then
    Quantita_calcolata = quantita * Forms![01 compila ore]![Percentuale2]
    GoTo 10
    End If
    
    10
    Dim stSQL As String
    stSQL = "UPDATE [01 Distinta Base Appoggio] SET [01 Distinta Base Appoggio].[Quantita offerta] =" & Quantita_calcolata & punto_virgola & ""
    DoCmd.RunSQL stSQL
    
    End Sub
    
    Ho provato anche a ragionare su quello che mi avevi scritto pero ho l'esigenza di personalizzare i valori "range" e percentuale in funzione del cliente

    ora il problema che ho è che esegue il calcolo di "Quantita_calcolata" solo la prima volta invece di farlo valore per valore... probabilmente si tratta di una stupidata ma non riesco a saltarci fuori, come si fa?
  • Re: Calcolo in una query in funzione di un valore di una cella

    Ciao,
    la funzione suggerita è volta al calcolo dello sconto sulla base del prezzo di riferimento, non in base al cliente, questa era la tua domanda iniziale.
    del resto del post non ho capito nulla....
    un saluto.
  • Re: Calcolo in una query in funzione di un valore di una cella

    Goku ha scritto:


    ciao,
    se non hai troppi dati in quanto la soluzione proposta potrebbe incidere sulle performance,
    una funzioncina dedicata, potrebbe fare al tuo caso, richiamala nella tua query in un campo calcolato.
    
    Public Function ftcCalcolaprezzo(priceToBeChosen As Currency) As Currency
    
    Select Case priceToBeChosen
        Case 11 To 100
            priceToBeChosen = priceToBeChosen * 0.75
        Case 101 To 500
            priceToBeChosen = priceToBeChosen * 0.5
    End Select
    ftcCalcolaprezzo = priceToBeChosen
    
    End Function
    
    
    ti saluto.
    La funzione scritta così, mi lascia tecnicamente perplesso (parlo di perfezionismo e mi permetto l'osservazione a te che ne comprenderai il senso).

    In sostanza se omesso il Parametro di una Funzione è ByREF, quindi quello che hai scritto è corretto, nel senso che il Parametro [priceToBeChosen] in ingresso VIENE MODIFICATO... quindi non serve assegnarlo alla Funzione in uscita [ftcCalcolaprezzo]...

    Avrei evitato di modificare il valore in ingresso, per il semplice fatto che(ragionando dal punto di vista TEORICO sul come si dovrebbero gestire) in caso di errori con gestione una volta modificato il dato in ingresso non hai poi modo di ripristinarne il valore in uscita... e ti freghi con le tue mani...!

    E' sempre meglio, salvo non sia voluta, appoggiarsi ad una Variabile interna... e magari passare ByVAL il parametro... in questo caso più che in altri proprio per la modalità di chiamata...

    Faccio un'esempio giusto per chiarire quello che voglio intendere.
    
    Public Function ftcCalcolaprezzo(ByVal priceToBeChosen As Currency) As Currency
    On Error Resume Err_Price
    Dim mpriceToBeChosen as Currency
    mpriceToBeChosen = priceToBeChosen 
    Select Case priceToBeChosen
        Case 11 To 100
            mpriceToBeChosen = priceToBeChosen * 0.75
        Case 101 To 500
            mpriceToBeChosen = priceToBeChosen * 0.5
    End Select
        ftcCalcolaprezzo = mpriceToBeChosen 
    Exit_Here:
    Exit Function
    
    Err_Price:
        ' Ripristino il Valore in ingresso
        ftcCalcolaprezzo = priceToBeChosen
        Resume Exit_Here
    End Function
  • Re: Calcolo in una query in funzione di un valore di una cella

    Ciao scusa ho fatto un po di confusione,

    Provo a spiegarmi meglio:
    da una maschera (che visualizza i dati di una query) voglio lanciare una query di aggiornamento
    la query deve aggiornare i valori conentuti nel campo [Quantita_calcolata] di una tabella

    Il valore da scrivere in [Quantita offerta] è calcolato in questo modo: [quantita] che è un campo contenuto nella maschera che si chiama [01 compila ore] * un valore variabile.

    Il valore variabile è dato da un confornto tra [Prezzo standard] e [Range1], [Range2], [Range3], ecc contenuti sempre nella maschera [01 compila ore], da questo confronto ottengo una percentuale di moltiplicazione

    Se [Prezzo standard] => [range1] allora si prende [percentuale1]
    Se [Prezzo standard] => [range2] allora si prende [percentuale2]


    alla fine ottengo che

    Dim Quantita_calcolata

    Quantita_calcolata = [quantita]*[percentuale1]

    Quindi sempre dalla macro lancio la query di aggiornamento:

    stSQL = "UPDATE [01 Distinta Base Appoggio] SET [01 Distinta Base Appoggio].[Quantita offerta] =" & Quantita_calcolata & punto_virgola & ""
    DoCmd.RunSQL stSQL

    il mio problema è che la macro calcola sul record selezionato la percentuale e la query di aggiornamento aggiorna la tutta la tabella con questo valore mentre io avrei bisogno di fargli eseguire l'operazione su tutti i record, ricalcolando record per record il valore da moltiplicare.
  • Re: Calcolo in una query in funzione di un valore di una cella

    Ciao,
    ho provato a leggere più volte questo tuo ultimo post, ma non ho capito molto cosa stai cercando di fare…per certo per un mio limite…
    potrebbe non essere necessario o comunque non la scelta migliore l’aggiornamento dei dati nella tabella….credo si possa calcolare quanto ti serve ½ una query di selezione ben contemplata…
    Spero che qualche altro partecipante più volonteroso e capace possa aiutarti…
    Sorry….
    Un saluto.
  • Re: Calcolo in una query in funzione di un valore di una cella

    La funzione scritta così, mi lascia tecnicamente perplesso (parlo di perfezionismo e mi permetto l'osservazione a te che ne comprenderai il senso).

    In sostanza se omesso il Parametro di una Funzione è ByREF, quindi quello che hai scritto è corretto, nel senso che il Parametro [priceToBeChosen] in ingresso VIENE MODIFICATO... quindi non serve assegnarlo alla Funzione in uscita [ftcCalcolaprezzo]...
    Sinceramente, visto la semplicità della funzione proposta non ho riflettuto un granchè… sul passaggio del parametro come riferimento o valore…
    Senz’altro la gestione errori va implementata sempre è importante.
    Trovo il tuo intervento ineccepibile dal punto di vista tecnico e concettuale, chiaro ed esaustivo nella forma, nonché il codice molto pulito.
    Ora basta complimenti però;-)
    Ti saluto, ciao.
Devi accedere o registrarti per scrivere nel forum
9 risposte