In una query effettuare una sottrazione.

di il
20 risposte

In una query effettuare una sottrazione.

Ciao a tutti e scusate il linguaggio non professionale, ma non sono un tecnico, anche se mi sto appassionando ad Access.
Il mio problema è semplice: in una Query a un certo punto devo controllare un numero, e se è superiore a 12 gli devo sottrarre 12.
Se fosse in Basic io scriverei:
if Numero > 12 then Numero = Numero - 12
ma come faccio a inserirlo in una query?
Vi ringrazio e vi prego di usare un linguaggio semplice nelle risposte, altrimenti non ci capisco niente.

20 Risposte

  • Re: In una query effettuare una sottrazione.

    Da dove proviene questo numero? Da un campo? Se sì puoi fornire il nome proprio di questo campo?
    Molto probabilmente ti serve la funzione IIf
    https://support.office.com/it-it/article/Funzione-IIf-32436ecf-c629-48a3-9900-647539c764e3
  • Re: In una query effettuare una sottrazione.

    Grazie per l'interessamento.
    Il campo è questo:
    Espr2: Val(Mid$([Rinnovo];4;2))
  • Re: In una query effettuare una sottrazione.

    Between Val(Mid$(Date();4;2)) And (Val(Mid$(Date();4;2)+2))
  • Re: In una query effettuare una sottrazione.

    In pratica la query mi deve restituire i record dei contratti che scadono nel mese in corso e nei due successivi.
  • Re: In una query effettuare una sottrazione.

    Indipendentemente dall'anno.
    Scusa ma ogni volta ci manco una cosa e scrivo di nuovo.
  • Re: In una query effettuare una sottrazione.

    Vi spiego il problema:
    Noi abbiamo dei contratti che durano tre anni, e ogni anno devono essere confermati.
    Così, per esempio, un contratto stipulato oggi deve essere confermato il 7 novembre 2017 e il 7 novembre 2018 e rinnovato il 7 novembre 2019, quindi indipendentemente che debba essere confermato o rinnovato, ogni mese di novembre io devo saperlo.
    Ho creato un report che mi fa vedere i contratti da controllare o rinnovare nel mese in corso e nei due successivi, basato su una query che ha:
    Espr2: Val(Mid$([Rinnovo];4;2))
    e filtro "Between Val(Mid$(Date();4;2)) And (Val(Mid$(Date();4;2)+2))"
    ma adesso, per esempio, non mi fa vedere gennaio, ma solo novembre e dicembre, perché "Val(Mid$(Date();4;2)+2)" è 13!!!
    Come posso dirgli che se supera il 12 deve sottrarre 12???
  • Re: In una query effettuare una sottrazione.

    Osvaldo, non mi abbandonare!
  • Re: In una query effettuare una sottrazione.

    Il forum non è una Chat... e forse ti conviene smettere di aggiunhere pezzi di puzzle inutilmente confusi... generi entropia e poca voglia di risponderti.
    Quindi, se vuoi, fermati un po cerca di leggere e studiare un minimo di nozioni e rifletti meglio perché quello che stai facendo è frutto di troppe idee sovrapposte senza un criterio tecnico.
  • Re: In una query effettuare una sottrazione.

    Ciccio_54 ha scritto:


    Vi spiego il problema:
    Era ora!

    Ciccio_54 ha scritto:


    ma adesso, per esempio, non mi fa vedere gennaio, ma solo novembre e dicembre, perché "Val(Mid$(Date();4;2)+2)" è 13!!!
    Come posso dirgli che se supera il 12 deve sottrarre 12???
    Non devi.
    Quello che invece devi fare è usare la funzione DateAdd() e sarà questa che automaticamente calcola la data correttamente.
    Leggi la guida per i dettagli su tale funzione.
  • Re: In una query effettuare una sottrazione.

    Non ho capito tutto il discorso nei MINIMI DETTAGLi. Più semplicemente, quando ti trovi di fronte a molte espressioni "una sopra l'altra" dai un nome proprio a un nuovo campo nella query. Poi crei una nuova espressione su questo nuovo campo ecc... Ad esempio il campo Espr2 lo ha creato Access automaticamente. Dagli un nome più significativo ad esempio Pippo. Poi fai altri calcoli e/o espressioni su Pippo, ecc...
  • Re: In una query effettuare una sottrazione.

    Ho già scritto queste cose ma non le trovo più, quindi ripeto:
    Mi scuso con Alex per la mia mancanza di tecnicismo (che fra l'altro ho subito ammesso di non possedere) e per l'uso improprio del forum (per inciso odio le chat e non uso neanche WhatsApp). Aborrisco il caos, sebbene da esso proveniamo, e mai vorrei generare entropia, per cui sono veramente mortificato.
    Gibra, ti ringrazio e studierò e proverò la funzione DateAdd(), quindi in maniera molto stringata ti farò sapere i risultati.
  • Re: In una query effettuare una sottrazione.

    Premetto che mettere le mani avanti non è un modo per farsi giustificare ma semmai il contrario... il forum non ha uno scopo di dialogo 1-1.
    Si fanno domande in modo possano essere utili a tutti... di conseguenza le risposte.
    Quindi darai conferma non a chi ti risponde ma a tutti quelli che leggono e che possono trarne beneficio.

    Detto questo... per prendere il mese dalla data usa Month (ccampData)


    Ad esempio
    
    SELECT * FROM Tabella
    WHERE Month(date())= mont(campData ())
    Questa restituisce tutti i contratti con scadenza il mese attuale di qualsiasi anno...

    Giuro tuttavia che non ho proprio capito cosa significa il 12 del primo post...

    Credo tuttavia tu possa avere un errore di base.
    Se un contratto 3AN ha rinnovi manuali 1AN sono informazioni diverse... e dovrebbero risiedere in 2 campi diversi... o forse 2 tabelle diverse se per ogni rinnovo devi tener traccia di documenti e formalità burocratiche.
    Semplifichiano quindi con 2 campi:
    Scadenza
    ProssimoRinnovo
    In questo modo usando il campo ProssimoRinnovo non avresti il problema Anno da gestire..
  • Re: In una query effettuare una sottrazione.

    Risolto!
    =Val(Mid$(Date();4;2)) Or =(Val(Mid$(DateAdd("m";1;Date());4;2))) Or =(Val(Mid$(DateAdd("m";2;Date());4;2)))
    Non ho potuto usare Between perché altrimenti mi dava i risultati fra 1 e 12, e quindi tutti.
    Grazie a tutti e in particolare a Gibra.
    Francesco.
  • Re: In una query effettuare una sottrazione.

    Ciccio_54 ha scritto:


    Risolto!
    =Val(Mid$(Date();4;2)) Or =(Val(Mid$(DateAdd("m";1;Date());4;2))) Or =(Val(Mid$(DateAdd("m";2;Date());4;2)))
    Non ho potuto usare Between perché altrimenti mi dava i risultati fra 1 e 12, e quindi tutti.
    Perché ti complichi la vita sbagliando la 'formula' che è molto più semplice. Ti scrivo il codice 'estes' in modo che sia più comprensibile (poi vedi tu come sistemartelo nella query che non io ho capito com'è fatta...):
    Dim MeseIniz as integer 
    Dim MeseFine as integer
    MeseIniz = Month(Date) ' ricavo il mese di partenza
    MeseFine = DateAdd("m", 2, Date) ' ricavo il mese finale
    
    BETWEEN meseiniz AND MeseFine
Devi accedere o registrarti per scrivere nel forum
20 risposte