GENERAZIONE RECORD VUOTO IN SOTTOMASCHERA

di il
17 risposte

GENERAZIONE RECORD VUOTO IN SOTTOMASCHERA

Buonasera a tutti. Da tanto vi seguo e tanti spunti preziosi (da totale autodidatta, senza esperienza alcuna) ho potuto attingerli da questo prezioso forum. Prima di decidere di scrivere in questa sezione ho cercato ovunque, ma il problema è che nemmeno so di preciso con che termini cercare...
Quindi, sperando di non urtare gli animi più sensibili - visto il mio dizionario poco evoluto in materia informatica - , devo chiedere un aiuto a qualcuno, confidando nella benevolenza di qualche esperto.
Ebbene, ho un db con una maschera singola all'interno della quale una sottomaschera in formato tabella che presenta quattro campi:
1)id (contatore) ,
2)idnome (che è in relazione con il campo IDNOME della maschera "madre") ;
3) data (con formato AAAA/AA),
4)campo numerico (dove vengono segnate ore di frequenza a dei corsi. Tale dato serve poi per il calcolo di punteggio assegnato).
Una query somma i campi numerici ed in base al risultato viene assegnato un punteggio relativo ad ogni IDNOME. Purtroppo, però , la query conta solo i record "attivi". Nel senso che se non ci sono record (in quanto quel IDNOME non ha svolto alcuna ora di frequenza e quindi non viene compilata alcuna riga nella tabella) la query non "vede" proprio quell'ID (che poi è legato al nominativo) e pertanto non mi restituisce il valore "0" che dovrei vedere. Ho cercato di bypassare attivando di volta in volta il primo record nella tabella scrivendo l'anno e poi cancellandolo.
La domanda è : si potrebbe in qualche modo far attivare automaticamente il primo record della tabella nella sottomaschera "CORSI" affinché la query poi rilevi tale campo assegnando il valore "0" in quanto vuoto?
Se possibile io allegherei anche il file, ammesso si possa fare...
Ringrazio chi vorrà darmi una mando, saluti elbrodek

17 Risposte

  • Re: GENERAZIONE RECORD VUOTO IN SOTTOMASCHERA

    Per me c'è qualche denominazione di campi poco "standard"...il che rende la comprensione del tutto poco chiara. Quello che credo di intuire è che dovresti pensare a una query che coinvolga entrambe le tabelle Nomi e Frequenze (spero si chiamino così). Il tipo di join che le lega deve essere di tipo 2 (LEFT). In questo modo la query mostrerà tutti i Nomi, compresi quelli che non hanno valori corrispondenti in Frequenze.
  • Re: GENERAZIONE RECORD VUOTO IN SOTTOMASCHERA

    Grazie OsvaldoLaviosa per la celere risposta. Sì, purtroppo ammetto che capire cosa io intenda è lavoro più di intuito... e purtroppo mi è difficile capire se la soluzione proposta faccia al caso mio perché non riesco a dare il giusto significato ad alcuni termini (left , join tipo 2...).
    Proverei nuovamente riportando, se riesco, le immagini del db
    La scheda 1 , è quella dove è inserita la sottomaschera (etichetta linguetta Attività).
    La tabella base mostra che i nominativi inseriti in totale (un nominativo per ogni scheda 1)
    Le altre due immagini sono relative all'uso che ne faccio nelle query, dove mi dovrebbe formare una graduatoria compresi quelli a "zero" che però la query non li rileva...
    Ho cercato di esporre al meglio la cosa... confido nel tuo/vostro intuito. E disponibilità.
    Grazie ancora, saluti
    Allegati:
    29983_60f525a50966ffc5367d1e916b355067.jpg
    29983_60f525a50966ffc5367d1e916b355067.jpg

    29983_9085d8999ab5bb220b8463e0c0651397.jpg
    29983_9085d8999ab5bb220b8463e0c0651397.jpg
  • Re: GENERAZIONE RECORD VUOTO IN SOTTOMASCHERA

    Ps: ho applicato la relazione "tipo join" selezionando la 2... ahimè, risultato invariato. La query mi da sempre i risultati limitatamente ai record compilati nella tabella-sottomaschera.
  • Re: GENERAZIONE RECORD VUOTO IN SOTTOMASCHERA

    Le immagini che hai postato non sono nitide.
    Perchè chiami Base la tabella che raccoglie i nominativi delle Persone? Io la chiamerei Persone o Nominativi.
    Gradirei vedere la Finestra Relazioni.
  • Re: GENERAZIONE RECORD VUOTO IN SOTTOMASCHERA

    elbrodek ha scritto:


    Ps: ho applicato la relazione "tipo join" selezionando la 2... ahimè, risultato invariato. La query mi da sempre i risultati limitatamente ai record compilati nella tabella-sottomaschera.
    Hai un campo sul quale hai fatto la sommatoria. Per i record della tabella principale che non hanno corrispondenti record nella tabella "secondaria" non riesci ad ottenere la somma perché dovresti sommare dei Null.
    Utilizza la funzione Nz() oppure una IIf per attribuire uno 0 invece del Null e su quel campo calcolato esegui la somma.
    Mostra la SQL della query che adesso NON funziona e ti dico nello specifico dove agire.
  • Re: GENERAZIONE RECORD VUOTO IN SOTTOMASCHERA

    OsvaldoLaviosa ha scritto:


    Le immagini che hai postato non sono nitide.
    Perchè chiami Base la tabella che raccoglie i nominativi delle Persone? Io la chiamerei Persone o Nominativi.
    Gradirei vedere la Finestra Relazioni.
    Buongiorno OsvaldoLaviosa.
    Innanzitutto grazie per l'interessamento. Purtroppo non riesco ad ingrandire senza perdere in qualità le immagini. Sì, in effetti sarebbe stato più corretto chiamare la tabella in altro modo.
    Ecco la relazione impostata.
    relazioni.jpg
    relazioni.jpg

  • Re: GENERAZIONE RECORD VUOTO IN SOTTOMASCHERA

    Nella Finestra Relazioni lascia la relazione "standard" di Tipo 1.
    Nella query modifica la relazione in Tipo 2.
    Poi...credo che Philcattivocarattere ti stia aprendo la strada giusta (modifica da Null in Nz...).
  • Re: GENERAZIONE RECORD VUOTO IN SOTTOMASCHERA

    Philcattivocarattere ha scritto:


    elbrodek ha scritto:


    Ps: ho applicato la relazione "tipo join" selezionando la 2... ahimè, risultato invariato. La query mi da sempre i risultati limitatamente ai record compilati nella tabella-sottomaschera.
    Hai un campo sul quale hai fatto la sommatoria. Per i record della tabella principale che non hanno corrispondenti record nella tabella "secondaria" non riesci ad ottenere la somma perché dovresti sommare dei Null.
    Utilizza la funzione Nz() oppure una IIf per attribuire uno 0 invece del Null e su quel campo calcolato esegui la somma.
    Mostra la SQL della query che adesso NON funziona e ti dico nello specifico dove agire.
    Buongiorno Philcattivocarattere , e grazie per l'intervento. Sì, credo tu abbia utilizzato la terminologia corretta nell'inquadrare il problema: dovrei sommare dei "null". Ho estratto la videata che mi hai indicato che riporto in immagine sotto il cui testo è il seguente:

    SELECT [TABELLA ATTIVITA_CampiIncrociati].IDNOME, [TABELLA ATTIVITA_CampiIncrociati].[COGNOME NOME], [TABELLA ATTIVITA_CampiIncrociati].[Totale di ORE], Sum(IIf([Totale di ORE]>=300,"20",IIf([Totale di ORE]>=200,"15",IIf([Totale di ORE]>=100,"10",IIf([Totale di ORE]>=20,"5","0"))))) AS Espr1
    FROM [TABELLA ATTIVITA_CampiIncrociati]
    GROUP BY [TABELLA ATTIVITA_CampiIncrociati].IDNOME, [TABELLA ATTIVITA_CampiIncrociati].[COGNOME NOME], [TABELLA ATTIVITA_CampiIncrociati].[Totale di ORE]
    ORDER BY Sum(IIf([Totale di ORE]>=300,"20",IIf([Totale di ORE]>=200,"15",IIf([Totale di ORE]>=100,"10",IIf([Totale di ORE]>=20,"5","0")))));

    Nel frattempo passo anche a ringraziare OsvaldoLaviosa che ha supportato la tua formula. Intanto grazissime ad entrambi!
  • Re: GENERAZIONE RECORD VUOTO IN SOTTOMASCHERA

    OsvaldoLaviosa ha scritto:


    Nella Finestra Relazioni lascia la relazione "standard" di Tipo 1.
    Nella query modifica la relazione in Tipo 2.
    Poi...credo che Philcattivocarattere ti stia aprendo la strada giusta (modifica da Null in Nz...).
    OsvaldoLaviosa. Grazie ancora. Ho modificato la relazione nella query, ma, ancora mi "vede" solo quelli attivi...
    Nel frattempo, su binario parallelo, seguo anche le indicazioni di Philcattivocarattere... o almeno ci provo.
  • Re: GENERAZIONE RECORD VUOTO IN SOTTOMASCHERA

    OsvaldoLaviosa in parte funziona.
    Dopo aver appurato che la query su cui avevo apportato la prima modifica alla relazione, in realtà attingeva da un'altra query, modificando la relazione come hai detto tu funziona. Però... nella somma finale, non so perché , lo "zero" che a questo punto viene rilevato, ora non viene preso come tale e pertanto la colonna dedicata al totale (punteggio ore + punteggio corsi) rimane vuota nonostante l'attribuzione corretta nell'apposita query del punteggio corsi
    Allegati:
    29983_b39d8193f4d6eb530dca519319605888.jpg
    29983_b39d8193f4d6eb530dca519319605888.jpg
  • Re: GENERAZIONE RECORD VUOTO IN SOTTOMASCHERA

    elbrodek ha scritto:


    Dopo aver appurato che la query su cui avevo apportato la prima modifica alla relazione, in realtà attingeva da un'altra query, modificando la relazione come hai detto tu funziona. Però... nella somma finale, non so perché , lo "zero" che a questo punto viene rilevato, ...
    Le immagini sono utilissime ma devono sempre essere accompagnate dalla SQL della query, da racchiudere tra i tag CODE e che nella barra sopra il messaggio sono rappresentate dalle parentesi angolari con all'interno una barra
    (quota questo mio messaggio per vedere come si usano) [CODE]SELECT * FROM NOMETABELLA WHERE NOMECAMPO = 'VALORE' Immagini (eventualmente) ed SQL, sempre.
  • Re: GENERAZIONE RECORD VUOTO IN SOTTOMASCHERA

    Ciao Philcattivocarattere.
    Premessa: dove/come posso quotare i messaggi che ricevo?
    ciò premesso: il codice sql della query "SOMME" (cioè quella in cui appunto "tiro le somme" é il seguente:
    SELECT [TABELLA ATTIVITA_CampiIncrociati Query].IDNOME, [TABELLA ATTIVITA_CampiIncrociati Query].[COGNOME NOME], [TABELLA ATTIVITA_CampiIncrociati Query].Espr1, [conteggio corsi].ConteggioDicorsi_Value, Sum([Espr1]+[ConteggioDicorsi_Value]) AS punteggio
    FROM ([TABELLA ATTIVITA_CampiIncrociati Query] LEFT JOIN [tabella base] ON [TABELLA ATTIVITA_CampiIncrociati Query].IDNOME = [tabella base].IDNOME) LEFT JOIN [conteggio corsi] ON [tabella base].IDNOME = [conteggio corsi].IDNOME
    GROUP BY [TABELLA ATTIVITA_CampiIncrociati Query].IDNOME, [TABELLA ATTIVITA_CampiIncrociati Query].[COGNOME NOME], [TABELLA ATTIVITA_CampiIncrociati Query].Espr1, [conteggio corsi].ConteggioDicorsi_Value;
    ed è relativo alla query di cui mando le due videate
  • Re: GENERAZIONE RECORD VUOTO IN SOTTOMASCHERA

    elbrodek ha scritto:


    Ciao Philcattivocarattere.
    Premessa: dove/come posso quotare i messaggi che ricevo?
    Per quotare un post devi usare il simbolo del doppio apice che si trova nell'angolo a destra del post che vuoi quotare. Durante la redazione puoi trovarlo anche vicino al simbolo che hai usato per i tag code, nella barra per la formattazione del testo.
    1) Cambiare immediatamente il nome della query [TABELLA ATTIVITA_CampiIncrociati Query] che, oltre ad essere di una lunghezza spropositata e con spazi, inizia con [TABELLA], cosa che rende difficile orientarsi (lo so, l'ha già detto Osvaldo ma... avresti potuto metterci una pezza già nel corso del thread) ;
    2) Usare Alias significativi: [NomeQuery].Espr1 per un campo calcolato è da cambiare immediatamente. Ad eccezione della visualizzazione tabellare della query che cosa si capisce del significato/contenuto di quel campo?
    3) Trattare tutti i campi che possono essere Null con la funzione Nz o IIf. Sul loro uso nelle query ti rinvio ai suggerimenti presenti qui:
    https://www.fmsinc.com/microsoftaccess/query/sort/multiple-dates.htm
    In soldoni, meglio usare IIf (anche se la sintassi è un po' più articolata) perché è la via più performante ed è meno legata "all'ambiente Access"
    Il tutto fatto sia nella parte SELECT, sia dove fai i raggruppamenti. Per non correggere direttamente la tua query (divieto di pappa pronta) ti faccio un esempio, perché l'importante è capire il principio, poi lo si applica al caso concreto.
    SELECT ...,  IIF([CampoForseNull] is Null, 0, [CampoForseNull]) As AliasSignificativo 
    FROM ... 
    GROUP BY IIF([CampoForseNull] is Null, 0, [CampoForseNull]), ... 
    L'uso deve essere fatto nella prima query utile dove vuoi che i Null non siano tali. In questo modo poi ti porti il beneficio a cascata in tutte le altre query che derivano da quella.
  • Re: GENERAZIONE RECORD VUOTO IN SOTTOMASCHERA

    Philcattivocarattere ha scritto:


    elbrodek ha scritto:


    Ciao Philcattivocarattere.
    Premessa: dove/come posso quotare i messaggi che ricevo?
    Per quotare un post devi usare il simbolo del doppio apice che si trova nell'angolo a destra del post che vuoi quotare. Durante la redazione puoi trovarlo anche vicino al simbolo che hai usato per i tag code, nella barra per la formattazione del testo.
    1) Cambiare immediatamente il nome della query [TABELLA ATTIVITA_CampiIncrociati Query] che, oltre ad essere di una lunghezza spropositata e con spazi, inizia con [TABELLA], cosa che rende difficile orientarsi (lo so, l'ha già detto Osvaldo ma... avresti potuto metterci una pezza già nel corso del thread) ;
    2) Usare Alias significativi: [NomeQuery].Espr1 per un campo calcolato è da cambiare immediatamente. Ad eccezione della visualizzazione tabellare della query che cosa si capisce del significato/contenuto di quel campo?
    3) Trattare tutti i campi che possono essere Null con la funzione Nz o IIf. Sul loro uso nelle query ti rinvio ai suggerimenti presenti qui:
    https://www.fmsinc.com/microsoftaccess/query/sort/multiple-dates.htm
    In soldoni, meglio usare IIf (anche se la sintassi è un po' più articolata) perché è la via più performante ed è meno legata "all'ambiente Access"
    Il tutto fatto sia nella parte SELECT, sia dove fai i raggruppamenti. Per non correggere direttamente la tua query (divieto di pappa pronta) ti faccio un esempio, perché l'importante è capire il principio, poi lo si applica al caso concreto.
    SELECT ...,  IIF([CampoForseNull] is Null, 0, [CampoForseNull]) As AliasSignificativo 
    FROM ... 
    GROUP BY IIF([CampoForseNull] is Null, 0, [CampoForseNull]), ... 
    L'uso deve essere fatto nella prima query utile dove vuoi che i Null non siano tali. In questo modo poi ti porti il beneficio a cascata in tutte le altre query che derivano da quella.

    Philcattivocarattere ha scritto:


    elbrodek ha scritto:


    Ciao Philcattivocarattere.
    Premessa: dove/come posso quotare i messaggi che ricevo?
    Per quotare un post devi usare il simbolo del doppio apice che si trova nell'angolo a destra del post che vuoi quotare. Durante la redazione puoi trovarlo anche vicino al simbolo che hai usato per i tag code, nella barra per la formattazione del testo.
    1) Cambiare immediatamente il nome della query [TABELLA ATTIVITA_CampiIncrociati Query] che, oltre ad essere di una lunghezza spropositata e con spazi, inizia con [TABELLA], cosa che rende difficile orientarsi (lo so, l'ha già detto Osvaldo ma... avresti potuto metterci una pezza già nel corso del thread) ;
    2) Usare Alias significativi: [NomeQuery].Espr1 per un campo calcolato è da cambiare immediatamente. Ad eccezione della visualizzazione tabellare della query che cosa si capisce del significato/contenuto di quel campo?
    3) Trattare tutti i campi che possono essere Null con la funzione Nz o IIf. Sul loro uso nelle query ti rinvio ai suggerimenti presenti qui:
    https://www.fmsinc.com/microsoftaccess/query/sort/multiple-dates.htm
    In soldoni, meglio usare IIf (anche se la sintassi è un po' più articolata) perché è la via più performante ed è meno legata "all'ambiente Access"
    Il tutto fatto sia nella parte SELECT, sia dove fai i raggruppamenti. Per non correggere direttamente la tua query (divieto di pappa pronta) ti faccio un esempio, perché l'importante è capire il principio, poi lo si applica al caso concreto.
    SELECT ...,  IIF([CampoForseNull] is Null, 0, [CampoForseNull]) As AliasSignificativo 
    FROM ... 
    GROUP BY IIF([CampoForseNull] is Null, 0, [CampoForseNull]), ... 
    L'uso deve essere fatto nella prima query utile dove vuoi che i Null non siano tali. In questo modo poi ti porti il beneficio a cascata in tutte le altre query che derivano da quella.
Devi accedere o registrarti per scrivere nel forum
17 risposte