Maschera - Origine Record si imposta in base alla scelta fatta in un campo iniziale.

di il
7 risposte

Maschera - Origine Record si imposta in base alla scelta fatta in un campo iniziale.

Ciao a tutti, e come sempre complimenti a tutti. Vediamo se riesco a spiegare in modo semplice questa cosa che dovrei risolvere.
In un DB che gestisce molte cose è presente una maschera per inserire l'Autolettura delle Utenze Enel, Acqua e Gas che vengono scelte nel campo a tendina "Autolettura". Quando scelgo Enel inserisco i valori nei campi data e lettura, in maschera ci sono 2 campi nascosti non associati che cercano nel DB l'ultima data e valore dell'ultima lettura inserita e li copiano in 2 campi nel DB non visualizzati che serviranno poi richiamati dal Report per visualizzare in ogni riga di record il calcolo della differenza e media dei valori inseriti rispetto ai valori della riga record precedente e fin qui tutto ok funziona perfettamente.
Nel DB quindi (errore di sbaglio 1) i campi data lettura e campi calcolati sono tutti in comune con le 3 Autoletture che tramite report separati si visualizzano in base al filtro del campo "autolettura". Il problema è che fin'ora non me ne sono accorto perchè ho inserito solo Enel non avendo altri tipi di autoletture, ma ora che ho inserito Acqua e Gas nei report si è mischiato il calcolo delle medie e ultimo valore perchè come detto i campi colonna sono unici per tutti 3.
Ho pensato quindi di creare 3 Query identiche ma distinte sul campo Autolettura dal criterio "ENEL", "GAS" ecc, ma il problema è come poi richiamarle in base alla iniziale scelta del campo Autolettura. La mia idea era che la maschera si aprirebbe con l'origine su una delle 3 query come default (tanto per aprirsi) ma appena faccio la scelta in Autolettura l'origine record si imposta la query giusta in base alla scelta che è stata fatta. In altre parole apro la maschera e l'origine è per default Enel_query, in Autolettura scelgo Gas e in origine si imposta in automatico gas_query per continuare a impostare i campi, questo servirà poi ai 2 campi nascosti di cercare gli ultimi valori nella query impostata che sono già filtrati per nome Autolettura quindi non si mischieranno mai. Si può fare per voi?
Oppure si potrebbe fare che la maschera parta con origine tabella DB completo, e indicare però nei 2 campi nascosti (magari in vba) su che query delle 3 devono andare poi a cercare i valori in base alla scelta che è stata fatta nel campo "Autolettura"? (vuoi vedere che sta proprio qui la soluzione?)
Io ho comunque prima cercato nel forum, c'è un post similare "maschera con più origini record" ma non capisco se sia il mio caso.
Grazie come sempre per l'aiuto
MaxM

7 Risposte

  • Re: Maschera - Origine Record si imposta in base alla scelta fatta in un campo iniziale.

    Non sono sicuro di aver capito...!
    Inserisci la lettura del GAS e ti restituisce l'ultima dell'ENEL...?

    Prima cosa, non serve fare quello che hai fatto per il Calcolo differenziale, stai SALVANDO un campo che già esiste, dovresti ragionare su come estrarlo eventualmente.
    Seconda cosa è ovvio che possa accadere se non inserisci nella Ricerca il CRITERIO della CAUSALE...!

    Trova Ultima Bolletta ENEL
    Trova Ultima Bolletta GAS

    Questa cosa si fa con DLAST("CampoData", "NomeTabella","Causale=ENEL")

    Quando costruisci il Report, si strutturano i GRUPPI, quindi avrai i Gruppi per CAUSALE e, nella sezione Corpo dove vai a fare le differenze avrai un controllo che nell'origine controllo avrù il DLAST(....) ed andrai a calcolare la differenza.

    Scordati le 3 Queries, quando ti vengono in mente queste soluizioni "strane" devi già sapere che stai sbagliando.

    In linea di massima credo ti manchi qualche approfondimento sul corretto utilizzo dei Report e della struttura di un DB...!
  • Re: Maschera - Origine Record si imposta in base alla scelta fatta in un campo iniziale.

    Ciao @Alex grazie delle tue risposte e dei consigli che mi hai dato. Ragionare e basta idee strane.
    Allora associato al CampoRicerca, DLast restituisce sempre il valore del campo Data dell'ultimo record inserito ignorando il criterio.
    L'ho gestito nel vba dentro il dopoaggiornamento Autolettura (criterio) in questo modo:

    Dim auto As String
    auto = Me!Autolettura (il campo criterio)
    Me!CampoRicerca = DLast("Data", "Autolettura_Query", Autolettura_Query.Autolettura = auto)
    Il campo criterio è messo in Dim sennò dava errore, poi è scritto senza virgolette sennò dava un altro errore di errata compilazione.

    All'esecuzione in maschera, nel campo criterio (Autolettura) scelgo GAS, nel CampoRicerca appare la data dell'ultimo record inserito con ENEL nonostante abbia impostato il criterio del DLast a cercare solo i record inseriti con GAS (che sarebbe la scelta che appena fatta nel campo Autolettura).
    Cosa ho sbagliato perchè non funzioni?
    Grazie ancora @Alex.
  • Re: Maschera - Origine Record si imposta in base alla scelta fatta in un campo iniziale.

    @Alex ti ho risposto adesso modificando la risposta che ti ho dato questa mattina così ne hai una sola. Ciao.
  • Re: Maschera - Origine Record si imposta in base alla scelta fatta in un campo iniziale.

    La funzione DLast vuole una stringa anche per i criteri.
    Dovrebbe essere [CODE]DLast("Data", "Autolettura_Query", "Autolettura_Query.Autolettura = " & auto)
  • Re: Maschera - Origine Record si imposta in base alla scelta fatta in un campo iniziale.

    MaxM ha scritto:


    @Alex ti ho risposto adesso modificando la risposta che ti ho dato questa mattina così ne hai una sola. Ciao.
    Non so cosa sia il Campo AutoLettura, ma non è sufficiente... è la seconda volta che te lo spiego.
    Se metti solo Autolettura prendi l'ULTIMA generica ma non l'ULTIMA specifica di quella CAUSALE.
    Quindi se vuoi l'ultima Autolettura dell'enel devi mettere un criterio che ne tenga conto.... ci siamo...?

    Mi pare tuttavia manchi un pezzo... se hai più ENTI EROGATORI di servizi, dovresti avere una Tabella Anagrafica ENTI EROGATORI, in modo da avere una chiave Esterna alla Tabella dei MOVIMENTI e non una Ragione Sociale "ENEL"...
    Attenzione ai dati da storicizzare... se pensi che possano cambiare gli ENTI EROGATORI del TIPO DI SERVIZIO... la cosa si complica e va ragionata...

    Devi avere una Tabella Servizi, come:
    Fornitura Energia Elettrica
    Fornitura Gas
    Telefonia Mobile
    Ecc..

    Poi una Tabella Anagrafica Fornitori, e relazionarla MOLTI a MOLTI, con le Date di Validità in modo che la Tabella Movimenti possa recuperare nel tempo il Fornitore specifico in corso di validità... così che se nel tempo cambi fornitore per quel servizio potrai monitorare a prescindere le cose mantenendo il legame di TIPOLOGIA.

    Poi commetti errori di sintassi nella costruzione del Criterio.
  • Re: Maschera - Origine Record si imposta in base alla scelta fatta in un campo iniziale.

    Grazie @Alex, verissimo, hai ragione la gestione dei fornitori va costruita logicamente così per impostarci poi la ricerca, vedo di ragionarci su a costruirla come hai detto.
    Comunque, complimenti da sempre per il tuo modo velocissimo di ragionare per costruire qualunque cosa. Invidiabile.
    MM
  • Re: Maschera - Origine Record si imposta in base alla scelta fatta in un campo iniziale.

    Ciao @Alex, alla fine ho fatto con DMax,
    Me!UltimaData = DMax("DataLettura", "Autolettura_Query", "Autolettura_Query.Erogatore = " & CampoMascheraSceltaErogatore)
    Funziona perfettamente come volevo, prende i dati precedenti dall'erogatore giusto (grazie per la & fuori virgolette). I report non li ho toccati e lavorano come prima, record di oggi fa la differenza valori rispetto al record di ieri ecc.
    Grazie comunque avermi consigliato questo tipo di funzione per arrivare a questo.
    Ciao @Alex
Devi accedere o registrarti per scrivere nel forum
7 risposte