[Risolto] Query da un giorno della settimana specifico

di il
22 risposte

[Risolto] Query da un giorno della settimana specifico

Ciao a tutti,
sono di nuovo a chiedervi aiuto.

Ho un quesito su una query che dovrebbe ricercare i fascicoli validati tra la data corrente e l'ultimo venerdì passato.

La query (attualmente ricerca i dati tra la data corrente e i sette giorni precedenti) è composta dai seguenti campi:
CUAA, DENOMINAZIONE, PAC, tel.aziendale, tel. titolare (dalla tabella Fascicoli Aziendali) - Data Validazione (dalla tabella Validazioni)

La relazione è CUAA-CUAA (come si vede dalla foto seguente) in quanto il CUAA è il codice fiscale delle aziende
Ringrazio in anticipo chiunque mi risponderà

22 Risposte

  • Re: [Risolto] Query da un giorno della settimana specifico

    Forse esiste una soluzione più elegante. Provo lo stesso a immaginarne una. Leggendo qui
    https://support.office.com/it-it/article/funzione-weekday-05d360d7-2c3f-4691-9448-c96ea0351940
    puoi conoscere attraverso un numero Integer il corrispondente giorno della settimana. A seconda di quale giorno della settimana si trova Date(), tu sottrarrai altrettanti giorni necessari per arrivare al "venerdì precedente".
    Io ci vedo una Public Function in un modulo standard che analizza/elabora tutti e 7 i casi settimanali e di conseguenza restituisce i valori da attribuire a Between...and… nel criterio della query. Il criterio della query deve chiamare la Public Function e ricevere i risultati.
  • Re: [Risolto] Query da un giorno della settimana specifico

    Ciao Osvaldo, grazie per l'interessamento.

    Premetto che non voglio la cosidetta "pappa pronta", ma sai per caso come posso costruire la public function? E, inoltre, devo creare quindi un modulo con nome (per esempio "Cerca Fascicoli")?

    Scusa la mia ignoranza
  • Re: [Risolto] Query da un giorno della settimana specifico

    OsvaldoLaviosa ha scritto:


    Forse esiste una soluzione più elegante. Provo lo stesso a immaginarne una. Leggendo qui
    https://support.office.com/it-it/article/funzione-weekday-05d360d7-2c3f-4691-9448-c96ea0351940
    puoi conoscere attraverso un numero Integer il corrispondente giorno della settimana. A seconda di quale giorno della settimana si trova Date(), tu sottrarrai altrettanti giorni necessari per arrivare al "venerdì precedente".
    Io ci vedo una Public Function in un modulo standard che analizza/elabora tutti e 7 i casi settimanali e di conseguenza restituisce i valori da attribuire a Between...and… nel criterio della query. Il criterio della query deve chiamare la Public Function e ricevere i risultati.
    sto provando a scrivere il codice ma non credo di stare andando bene


    Ovviamente, so che devo chiudere db e rstrecords e poi "distruggerli"
  • Re: [Risolto] Query da un giorno della settimana specifico

    Prova a leggere qui

    per avere una idea in generale su come dialogano Public Function e Query. Nei casi trattati da me, nella query la chiamata al NomePublicFunction avviene da un campo calcolato. Non ho mai provato per un Criterio query, ma penso che il ragionamento generale può essere equivalente.

    Nel fare i vari calcoli giorni non ho capito se Date() è Venerdì tu calcoli dal venerdì della settimana prima oppure consideri solo il venerdì di Date().

    Nel tuo codice postato...non credo serva aprire i recordset.
    Le variabili datainizio e datafine ritengo che devono essere di tipo Date.
    Il ragionamento di mettere in campo le If come hai abbozzato è filosoficamente corretta (io l'ho pensata uguale), ma considerando che dovrai osservare 7 casi, invece di usare 7 If, utilizza Select Case.
  • Re: [Risolto] Query da un giorno della settimana specifico

    Io vorrei calcolare i fascicoli validati dal venerdi precedente. Dalla tua domanda, capisco che sicuramente ho sbagliato qualcosa

    Cioè DataInizio dovrebbe essere il venerdi precedente e datafine dovrebbe essere uguale a date() +1 (se metto solo date non mi trova i fascicoli di oggi con +1 sì)

    Spero di aver risposto alla tua domanda
  • Re: [Risolto] Query da un giorno della settimana specifico

    Attento che le Function devono sempre contenere "qualcosa" (variabili) dentro le parentesi tonde che sono appunto i valori di passaggio provenienti dalla query. Se non ci scrivi dentro qualcosa, la Function non sa nemmeno cosa deve elaborare. Leggi bene il mio documento.
  • Re: [Risolto] Query da un giorno della settimana specifico

    OsvaldoLaviosa ha scritto:


    Attento che le Function devono sempre contenere "qualcosa" (variabili) dentro le parentesi tonde che sono appunto i valori di passaggio provenienti dalla query. Se non ci scrivi dentro qualcosa, la Function non sa nemmeno cosa deve elaborare. Leggi bene il mio documento.
    Ovviamente falso... la Function cometa sub possono benissimo non avere alcun parametro ed essere in grado di fare tutto... dipende da.cosa ci scrivi dentro.
  • Re: [Risolto] Query da un giorno della settimana specifico

    Marcdreamer ha scritto:


    Io vorrei calcolare i fascicoli validati dal venerdi precedente. Dalla tua domanda, capisco che sicuramente ho sbagliato qualcosa

    Cioè DataInizio dovrebbe essere il venerdi precedente e datafine dovrebbe essere uguale a date() +1 (se metto solo date non mi trova i fascicoli di oggi con +1 sì)

    Spero di aver risposto alla tua domanda
    Il venerdì precedente ad oggi(giorno qualsiasi)... si può calcolare sapendo che Venerdi ha valore Weekday=5 partendo da lunedì...
    Quindi se oggi fosse lunedì... che ha weekday=1 ti basterebbe fare un Dateadd("d",-3,DataLunedi)
    Se fosse Martedi weekday=2 valore=-4
    Se fosse mercoledì weekday=-3 valore=-5

    Sapendo che i giorni della settimana sono 7 e che venerdi=5...

    5-7-1=-3
    5-7-2=-4
    5-7-3=-5

    Quindi fai un piccolo sforzo e trova la funzione matematica che ti consente di calcolare il valore (-3) dipendente dal weekday del giorno in cui operi... sottraiamo il numero ricavato e troviamo venerdi...

    Mi pare veramente tutto moltoo molto matematico.
  • Re: [Risolto] Query da un giorno della settimana specifico

    @Alex ha scritto:


    OsvaldoLaviosa ha scritto:


    Attento che le Function devono sempre contenere "qualcosa" (variabili) dentro le parentesi tonde che sono appunto i valori di passaggio provenienti dalla query. Se non ci scrivi dentro qualcosa, la Function non sa nemmeno cosa deve elaborare. Leggi bene il mio documento.
    Ovviamente falso... la Function cometa sub possono benissimo non avere alcun parametro ed essere in grado di fare tutto... dipende da.cosa ci scrivi dentro.
    Vera la tua obiezione. Ma (da quello che ci ho capito io sulle Function) se non hanno parametri funzionano né più nè meno come le Sub...per tanto in tale caso implementi una Sub.
    Se esistono casi in cui operare in Function senza "parametri"...io non ne conosco...altrimenti...alzo le mani e abbasso la testa dinanzi al "guru"
  • Re: [Risolto] Query da un giorno della settimana specifico

    OsvaldoLaviosa ha scritto:


    Vera la tua obiezione. Ma (da quello che ci ho capito io sulle Function) se non hanno parametri funzionano né più nè meno come le Sub...per tanto in tale caso implementi una Sub.
    Se esistono casi in cui operare in Function senza "parametri"...io non ne conosco...altrimenti...alzo le mani e abbasso la testa dinanzi al "guru"
    Prenditi sempre 15 secondi prima di rispondere...
    La conosci la differenza tra Sub e Function...?
    Non risiede nei parametri in ingresso... ma nel fatto che solo la Function può restituire un valore/oggetto... la Sub no.

    Quindi anche se non passiamo alcun parametro la function può a prescindere restituire un valore o oggetto...

    Il fatto che ti non conosca Function senza parametri lo dovresti proporzionate alla tua conoscenza del codice... non userei questo come metro... e non si tratta di guru o altro... ma di avere o non avere una conoscenza di ciò di cui si parla discretamente solida.
  • Re: [Risolto] Query da un giorno della settimana specifico

    @Alex ha scritto:


    Marcdreamer ha scritto:


    Io vorrei calcolare i fascicoli validati dal venerdi precedente. Dalla tua domanda, capisco che sicuramente ho sbagliato qualcosa

    Cioè DataInizio dovrebbe essere il venerdi precedente e datafine dovrebbe essere uguale a date() +1 (se metto solo date non mi trova i fascicoli di oggi con +1 sì)

    Spero di aver risposto alla tua domanda

    Il venerdì precedente ad oggi(giorno qualsiasi)... si può calcolare sapendo che Venerdi ha valore Weekday=5 partendo da lunedì...
    Quindi se oggi fosse lunedì... che ha weekday=1 ti basterebbe fare un Dateadd("d",-3,DataLunedi)
    Se fosse Martedi weekday=2 valore=-4
    Se fosse mercoledì weekday=-3 valore=-5

    Sapendo che i giorni della settimana sono 7 e che venerdi=5...

    5-7-1=-3
    5-7-2=-4
    5-7-3=-5

    Quindi fai un piccolo sforzo e trova la funzione matematica che ti consente di calcolare il valore (-3) dipendente dal weekday del giorno in cui operi... sottraiamo il numero ricavato e troviamo venerdi...

    Mi pare veramente tutto moltoo molto matematico.
    Ciao Alex e grazie anche a te.
    Non ho compreso alcuni passaggi.
    Il DateAdd lo devo inserire come criterio o nella funzione che stavo appositamente creando?
    Quando hai scritto
    Quindi se oggi fosse lunedì... che ha weekday=1 ti basterebbe fare un Dateadd("d",-3,DataLunedi)
    DataLunedì è un nuovo campo o altro?
  • Re: [Risolto] Query da un giorno della settimana specifico

    Io ho pensato una cosa del genere. In un modulo standard a cui puoi dare qualsiasi nome
    Public Function fDataInizio(Date()) As Date
    Dim dDataInizio As Date
    Select Case Weekday(Date())
        Case 1 ' domenica
           dDataInizio = Date() - 2
        Case 2 'lunedì
           dDataInizio = Date() - 3
        Case 3 'martedì
           dDataInizio = Date() - 4
        Case 4 'mercoledì
           dDataInizio = Date() - 5
        Case 5 'giovedì
           dDataInizio = Date() - 6
        Case 6 'venerdì
           dDataInizio = Date() - 7
        Case 7 'sabato
           dDataInizio = Date() - 1
    End Select
    fDataInizio = dDataInizio
    End Function
    
    Nel criterio della query ci scriverei
    Between fDataInizio(Date()) And Date()

    Non ho testato nulla...qualcosa non mi convince sulla sintassi fDataInizio(Date())...non so se sia passabile...
  • Re: [Risolto] Query da un giorno della settimana specifico

    Grazie di nuovo Osvaldo, domani mattina appena arrivo in ufficio lo testo e ti dico.
  • Re: [Risolto] Query da un giorno della settimana specifico

    Vi perdete in un bicchiere d'acqua...

    Osvaldo scrive una funzione che dimostra di non aver capito veramente NULLA... funzione assolutamente errata e inutile basta 1 riga di codice scritto BENE.
    il parametro Date() in quel modo è assolutamente ERRATO...
    I parametri devono essere inseribili si chiamano parametri... quella è una Costante che scrivi per bellezza perché poi non puoi usare non essendo un parametro... tant'è che nella funzione ... non potendola usare la richiami in modo diretto Date().... questo è proprio il modo peggiore di scrivere cavolate (avevo scritto XXXXXXXXXXX... ma ho moderato).


    Ovviamente a te serve avere la data del venerdi precedente.
    
    VenerdiPrec=Dateadd("d",-2-weekday(Date(),2), Date())
    
    Fai attenzione a dove la inserisci... sopra SQL, sotto Generatore espressioni Qbe
    
    VenerdiPrec=Dateadd("g";-2-weekday(Date();2); Date())
    
    Quindi in SQL:
    
    Between Dateadd("d",-2-weekday(Date(),2), Date()) And Date()
     
Devi accedere o registrarti per scrivere nel forum
22 risposte