Ricavare il lunedì dalla settimana

Anonimo
2012-12-03T22:14:09+00:00

Vorrei  creare delle query, una per giorno della settimana (che saranno base per 7 sottomaschere o sottoreport), che prelevino delle date nel database, le

filtrino per settimana corrente, e raggruppino i record restituiti per giorno della settimana.

Ho trovato una funzione che estre i lunedì di una settimana:

Public Function fctKWMon(ArgKW As Byte, Optional ArgJahr)

    ' restituisce il lunedì della settimana di calendario

    ' di Karl Donaubauer

    Dim M As Date

    If IsMissing(ArgJahr) Then ArgJahr = Year(Date)

    M = DateSerial(ArgJahr, 1, 1) + (ArgKW - 1) * 7

    M = M + 1 - WeekDay(M, vbMonday)

    If Format(M, "ww", vbMonday, vbFirstFourDays) <> ArgKW Then M = M + 7

    If (ArgKW = 1 Or ArgKW = 53) And Day(M) > 4 And Day(M) < 8 Then M = M - 7

    fctKWMon = M

End Function

Come devo strutturare tabelle e SQL?

Gianf

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2012-12-05T10:52:42+00:00

Ciao Gianfranco,

potresti inserire nella maschera principale una casella testo in cui andrai a inserire una data di riferimento da cui ricavare la settimana richiesta, poi da questa data si ricavano le 6 date (da lunedì a sabato) per visualizzare le 6 sottomaschere.

se così potrebbe andare comincia ad inserire la casella testo (ad esempio con nome Data_Riferimento)  in cui digitare la data, poi inserisci un'altra casella testo con nome G1 e nella sua origine controllo metti:  =CDate([Data_Riferimento])-(DatePart("w";[Data_Riferimento];2)-1)

La casella testo G1 sarà il campo Master per la prima sottomaschera, quella del lunedì.

Per il martedì inserisci una nuova casella testo di nome G2 e nella sua origine controllo metti = [G1]+1, poi utilizzala come Campo Master della seconda sottomaschera.

Per il Mercoledì inserisci una nuova casella testo di nome G3 e nella sua origine controllo metti = [G2]+1, poi utilizzala come Campo Master della terza sottomaschera.

Così via fino alla casella testo G6.

Imposta per le caselle testo Data_Riferimento, G1, G2, G3, G4, G5, G6 il Formato "Data In Cifre"

Ovviamente le caselle testo da G1 a G6 possono essere invisibile perchè servono solo come campo master per le 6 sottomaschere.

Ciao

Giorgio Rancati

La risposta è stata utile?

0 commenti Nessun commento

15 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2012-12-07T23:35:27+00:00

    Ciao Gianfranco,

    la sintassi è sbagliata, dovrebbe essere

    CREATE INDEX NomeIndice ON NomeTabella (NomeCampo)

     comunque un indice può essere creato solo su un campo fisico di una tabella fisica.

    Access non prevede la creazione di indici sui campi delle query.

    Se la tabella di origine ha un campo ti tipo data/ora da cui viene calcolato il campo Scadenza prova ad inserire l'indice aprendo la tabella in visualizzazione struttura e modificando la proprietà Indicizzato del campo in "Sì (Duplicati ammessi)".

    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2012-12-07T22:18:14+00:00

    Ciao Giorgio,

    ho letto alcune info e vorrei applicare un indice ad un campo non presente nelle tabelle ma

     creato come campo di calcolo nella query, infatti il campo [Scadenza] mi restituisce la data  scadenza dei lavori.

    Ho provato a creare in indice nella query "QryProgramma Avanzato Gestione query", sono andato in definizione dati e ho  digitato " CREATE INDEX DateIndex ON Scadenza (Date) , l'ho così scritto perchè  speravo che dare un indice alla data del campo scadenza, ma un avviso mi dice errore di sintassi.

    Dove sbaglio?

    Ciao Gianfranco

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2012-12-06T22:36:37+00:00

    Ciao Gianfranco,

    ogni campo della tabella può essere indicizzato (senza abusarne), l'indice serve per velocizzare le ricerche nella tabella in base al campo sottoposto a indice.

    Se la tua tabella, con ad esempio 50.000 righe, ha un indice posto sul campo Data, la ricerca delle righe con data di oggi (che saranno poche decine o centinaia) sarà più veloce perchè il motore del database non deve scorrere tutte le 50.000 righe per ricavare i record del 06/12/2012, scorrerà l'indice e poi estrarrà i dati dalla tabella.

    leggi questo articolo:

    Creare e utilizzare un indice per migliorare le prestazioni

    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2012-12-06T22:24:24+00:00

    Ciao Giorgio,

    sei fenomenale!

    con poche e precise indicazioni hai risolto un mio grande problema.

    Grazie!

    ...Scusa cosè un indice posto sul capo data?

    Gianfranco

    La risposta è stata utile?

    0 commenti Nessun commento