Nascondere Errore constraint su query accodamento

di il
9 risposte

Nascondere Errore constraint su query accodamento

Ciao,
secondo problema di cui cerco soluzione, ho un problema con una query di accodamento.
Da una tabella prendo 3 campi per polare un altra tabella, i campi sono :
Codice socio, mese, anno
In pratica quando un socio paga una quota viene registrato nella tabelle entrate, ma ho bisogno di una tabella a parte sulla quale fare un riscontro sul pagamento di tutti i mesi.
C'è univocità, cioè un socio può avere un solo record per ogni mese anno, quindi a tal proposito ho creato una query di accodamento, che ovviamente per evitare di duplicare i record va in errore per il constraint.
Voglio nascondere questo errore ma non capisco come, ho controllato diverse discussioni in tal senso ma pare da me non funzioni
Allegati:
29277_7de73fb8cdb36f090fe85b75f4192baf.png
29277_7de73fb8cdb36f090fe85b75f4192baf.png

9 Risposte

  • Re: Nascondere Errore constraint su query accodamento

    gocku ha scritto:


    ho creato una query di accodamento, che ovviamente per evitare di duplicare i record va in errore per il constraint.
    Voglio nascondere questo errore ma non capisco come
    La query di accodamento deve essere lanciata dal metodo Execute di un oggetto Database.
    E' vero che esiste DoCmd.SetWarnings ma perché andare a scegliere un sistema che può creare problemi?
    Leggere: https://www.fmsinc.com/microsoftaccess/query/action-queries/SuppressWarningMessages.htm
    E questo risponde strettamente all'oggetto del thread.
    In pratica quando un socio paga una quota viene registrato nella tabelle entrate, ma ho bisogno di una tabella a parte sulla quale fare un riscontro sul pagamento di tutti i mesi.
    C'è univocità, cioè un socio può avere un solo record per ogni mese anno, quindi a tal proposito ho creato una query di accodamento
    sicuro che quello che stai facendo sia il modo giusto per arrivare al risultato?
  • Re: Nascondere Errore constraint su query accodamento

    gocku ha scritto:


    In pratica quando un socio paga una quota viene registrato nella tabelle entrate, ma ho bisogno di una tabella a parte sulla quale fare un riscontro sul pagamento di tutti i mesi.

    Philcattivocarattere ha scritto:


    sicuro che quello che stai facendo sia il modo giusto per arrivare al risultato?
    Per ottenere il risultato che cerchi devi servirti di una "query di selezione".
  • Re: Nascondere Errore constraint su query accodamento

    Philcattivocarattere ha scritto:


    sicuro che quello che stai facendo sia il modo giusto per arrivare al risultato?
    Per ottenere il risultato che cerchi devi servirti di una "query di selezione".
    [/quote]

    Ci ho provato, ma siccome poi su quella tabella devo farci una left join di altra select non riesco altrimenti.
    Ho provato a fare select unica mettendo una select in join ma non va, in oracle sarebbe andata
    SELECT A.Cognome AS Cognome, A.Nome AS Nome, [Data di nascita], Mese_quota AS Mese_pagato, 
    Anno_quota AS Anno_pagato, IIf(ISNULL(Mese_quota),'NON PAGATO','PAGATO') AS Pagamento
    FROM (SELECT * FROM Elenco_Soci, Calendario_Mese_Anno 
    	WHERE mese=Forms![Inserimento_Variabili_quote]!mese And anno=Forms![Inserimento_Variabili_quote]!anno)  
    	AS A LEFT JOIN (SELECT [Socio o Ente], Mese_quota, Anno_quota
    FROM Entrate GROUP BY [Socio o Ente], Mese_quota, Anno_quota) as B  
    ON A.Anno = B.Anno_quota AND A.Mese = B.Mese_quota
    	AND A.[Numero cliente] = B.Codice_socio);
  • Re: Nascondere Errore constraint su query accodamento

    Ma tu hai 2 tabelle Soci uno-a-molti Pagamenti? Dopo di che cosa vuoi sapere?
    Puoi elencare tutti i campi delle tabelle?
  • Re: Nascondere Errore constraint su query accodamento

    OsvaldoLaviosa ha scritto:


    Ma tu hai 2 tabelle Soci uno-a-molti Pagamenti? Dopo di che cosa vuoi sapere?
    Puoi elencare tutti i campi delle tabelle?
    Allora tabella

    Elenco_Soci
    unica tabella con 1 riga per socio con codice socio, cognome, nome, ecc.

    Calendario_Mese_Anno
    tabella con esplosione di mese ed anno sino a dicembre 2030, es. gennaio(campo mese), 2020 (Campo anno)

    Pagamenti quote
    tabella con i pagamenti delle quote, campi Codice Socio, mese, anno, popolata solo se pagato, quindi registrata sulla tabella Entrate

    con questo codice ottengo l'indicazione se pagato o meno
    Anno_quota AS Anno_pagato, IIf(ISNULL(Mese_quota),'NON PAGATO','PAGATO')

    spero di essermi fatto capire
  • Re: Nascondere Errore constraint su query accodamento

    Se hai una tabella Pagamenti, non ti serve Entrate.
    Non vedo l'utilità della tabella Calendario_Mese_Anno. Al limite io avrei fatto una sola per i 12 mesi.
    Tu vuoi vedere per ogni Socio tutte le MENSILITA'...e là dove qualcuno salta dovrebbe apparire vuoto il corrispondente record Pagamento. Se questa mia analisi è corretta, devi servirti di una query di selezione.
  • Re: Nascondere Errore constraint su query accodamento

    OsvaldoLaviosa ha scritto:


    Se hai una tabella Pagamenti, non ti serve Entrate.
    Non vedo l'utilità della tabella Calendario_Mese_Anno. Al limite io avrei fatto una sola per i 12 mesi.
    Tu vuoi vedere per ogni Socio tutte le MENSILITA'...e là dove qualcuno salta dovrebbe apparire vuoto il corrispondente record Pagamento. Se questa mia analisi è corretta, devi servirti di una query di selezione.
    La tabella pagamenti è quella creata con accodamento, l'originale è Entrata
    L'utilità è che io nella maschera inserisco le variabili mese ed anno ed il sistema mi dice quanti hanno pagato e quanti no, pensala in un utilizzo per una palestra ad esempio, i controlli li fai mese per mese non per tutto l'anno.
    Ok mi serve una query di selezione ma se non posso fare in join una select come faccio? Posso mettere in join una query esterna? Non sono così esperto di access, su sql avrei fatto distinct o group by ed avrei finito
  • Re: Nascondere Errore constraint su query accodamento

    Se hai Entrate di base, non ti serve Pagamenti, la sostanza è non avere 2 tabelle uguali.
    Io traccerei i Pagamenti/Entrate così come avvengono e segnerei il relativo riferimento mese-anno.
    Nelle query puoi manipolare il tipo di join. In visualizzazione struttura query, clicca con il mouse destro sulla linea e vedi le sue Proprietà. Cambiando il tipo di join da 1 a 2 (altrimenti detto LEFT JOIN) rispetto ai mese-anno, puoi vedere tutti i mese-anno e da lì evinci chi manca all'appello.
  • Re: Nascondere Errore constraint su query accodamento

    Alla fine ho rifatto una select unica con incrocio tra le 3 tabelle e va bene uguale, ora non ricordo nemmeno più perchè la prima volta non la feci, spero che i dati tornino..
    grazie a tutti
Devi accedere o registrarti per scrivere nel forum
9 risposte