Alternativa a query non aggiornabile

di il
8 risposte

Alternativa a query non aggiornabile

Buongiorno, sono un principiante che si è costruito un database (su input di un amico) che da diversi anni, bene o male, mi fa quello che mi serve anche se probabilmente è zeppo di errori di impostazione.
In questi giorni sto cercando di aggiungere una verifica sul pagamento delle fatture ma sono arrivato ad un punto fermo.
Per semplificare ho creato un semplice database dove provo a realizzare la stessa cosa:
TblMacchine
TblVerifiche
TblFatture
Le relazioni sono uno a molti tra macchine e verifiche e uno a molti fra fatture e verifiche, con integrità referenziale.
Ad ogni macchina sono associate più fatture (tante quante sono le verifiche che si ripetono nell tempo).
Io vorrei creare una query nella quale ogni record contiene l'id della macchina e il relativo controllo (fatture regolarmente pagate o no).
Riesco a farlo con una query di raggruppamento ma questo mi crea il problema che la query non è più aggiornabile e non posso modificare o aggiungere nuovi record:

IdMacchina | MaxDipagata
1 ------------ | 0
2 ------------ | -1
3 ------------ | -1
4 ------------ | 0
5 ------------ | 0

dove "-1" indica che quella macchina ha tutte le fatture regolarmente pagate e "0" il contrario.

Questo è il codice SQL della query.
SELECT TblMacchine.IdMacchina, Max(TblFatture.pagata) AS MaxDipagata
FROM TblMacchine INNER JOIN (TblFatture INNER JOIN TblVerifiche ON TblFatture.IdFattura=TblVerifiche.IdFattura) ON TblMacchine.IdMacchina=TblVerifiche.IdMacchina
GROUP BY TblMacchine.IdMacchina;
Non c'è un modo diverso per risolvere il mio problema?
Grazie a chiunque abbia tempo e/o pazienza di aiutarmi
Gianni

8 Risposte

  • Re: Alternativa a query non aggiornabile

    Scusa come puoi pensare che una Query RAGGRUPPATA possa essere aggiornabile...?
    Di solito si usano le Query di questo tipo SOLO per VISUALIZZAZIONE, poi si apre una Maschera dedicata per l'editing basata sulla Tabella o Query NON RAGGRUPPATA.
  • Re: Alternativa a query non aggiornabile

    Intanto ti ringrazio per aver preso in esame il mio post.
    Mi è chiaro che su una query di raggruppamento non si possa effettuare alcuna modifica ed avevo realizzato una maschera solo per il controllo.
    La mia domanda è se esiste la possibilità per avere sulla stessa maschera sia il controllo sullo stato delle fatture per ogni macchina che la possibilità di poterla editare.

    Per esempio mi chiedevo se c'è un modo per riscrivere tutti i valori uguali per ciascun idmacchina nel campo MaxDiPagata in modo da avere una corrispondenza biunivoca per ciascun record.
    Una cosa del tipo:
    IdMacchina | MaxDiPagata
    1 ------------| 0
    1 ------------| 0
    1 ------------| 0
    2 ------------| -1
    2 ------------| -1
    2 ------------| -1
    etc
    tante volte quante sono le verifiche per ciascuna macchina.
    (se questo esempio è una cavolata...vi prego di passare oltre!)

    Qualsiasi altra alternativa è benvenuta.

    Grazie
    Gianni
  • Re: Alternativa a query non aggiornabile

    Certo che è complicato partire da un assunto e cercare di volerlo BYPASSARE....!
    Allora il tuo campo [Max(TblFatture.pagata) AS MaxDipagata] è un calcolato... e tu vuoi MODIFICARLO...?
    Quello si può modificare SOLO se vai ad editare i SINGOLI CAMPI [TblFatture.pagata], che ovviamente puoi fare ma NON da una Maschera associata, ma con una Query UPDATE... esempio:
    
    UPDATE TblFatture SET pagata=True WHERE IdMacchina=1
    Poi fai il REQUERY della tua Maschera e vedrai che il campo CALCOLATO sarà allineato.
  • Re: Alternativa a query non aggiornabile

    Sono desolato ma non ho capito come impostare la query di aggiornamento. Mettendo questo codice mi imposta a True tutti i pagamenti della macchina 1 (che invece ha una fattura non pagata e quindi dovrebbe impostarli tutti a False). E le altre macchine?
    Grazie
    Gianni
  • Re: Alternativa a query non aggiornabile

    Era un ESEMPIO, io nello specifico non so cosa e come gestisci i dati, cerco di darti la possibilità di CAPIRE LA LOGICA, ma se non ne comprendi l'aspetto tecnico la vedo dura...!

    Ora faccio una osservazione decisamente BANALE, ma se usando la mia Query di Esempio ottieni il risultato OPPOSTO... non è che se al posto di [pagata=True] metti [pagata=false] va bene...?
  • Re: Alternativa a query non aggiornabile

    Scusa ma che esempio è se mi aggiorna a TRUE (o anche fosse FALSE sarebbe la stessa cosa) TUTTI i record del campo "pagata" relativi alla macchina con quell'id?
    A me occorre impostare a TRUE o a FALSE tutti i record relativi al campo "pagata" per la macchina che ha, rispettivamente, tutte le fatture pagate o almeno UNA fattura non pagata. E solamente in questo caso.
    Probabilmente non mi sono spiegato io.
    Chiedo scusa.
    Grazie lo stesso.
  • Re: Alternativa a query non aggiornabile

    Beh sarai capace di scrivere un predicato che possa soddisfare quello che hai detto... o no..?
    Ti ho spiegato la logica con cui farlo... ora fallo.
  • Re: Alternativa a query non aggiornabile

    Buonasera, alla fine ho risolto (probabilmente non in modo ortodosso, ma funziona per i miei scopi) con una query di creazione di tabella (dalla query di raggruppamento). A quel punto con una query di aggiornamento mi sono potuto aggiornare i campi della tabella di partenza (partendo dalla tabella creata dalla query).
    Poi nella maschera che mi interessava ho messo nell'evento "su apertura" il codice per creare la tabella e in seguito aggiornare i campi che mi interessavano nella tabella di partenza.
    Gianni
Devi accedere o registrarti per scrivere nel forum
8 risposte