Creare condizione sul valore di un record per valutare se eseguire una macro

di il
5 risposte

Creare condizione sul valore di un record per valutare se eseguire una macro

Buongiorno,
da buon principiante non riesco a creare una condizione if che vada a verificare se nel campo "last_Update" dell'unico record della tabella "Data_Di_Aggiornamento" vi sia la data odierna per evitare di ricaricare tramite una serie di DoCmd.OpenQuery tutti I dati ad ogni apertura del db.

Mi potete aiutare?

Grazie
Max

5 Risposte

  • Re: Creare condizione sul valore di un record per valutare se eseguire una macro

    Benvenuto nel forum.
    Non possiamo aiutarti con i pochi indizi che hai fornito. Devi descrivere tutto il tuo contesto, così:
    - di cosa parla il tuo database
    - nomi propri di tutte le tabelle (almeno quelle significative)
    - nomi propri di tutti i campi, con indicazione della chiave primaria
    - le relazioni
    - nomi propri di query, maschere o altro che entrano a far parte del contesto, usando i nomi propri
    - rispiega quello che vuoi fare usando i nomi propri
  • Re: Creare condizione sul valore di un record per valutare se eseguire una macro

    Scusate.
    Ho un db chiamato "Trial" che crea una genealogia di prodotti a cui lega informazioni come, ingegnere di prodotto, impianti di produzione, tempi di produzione etc.

    Dei dati da cui attingo mi interessano solo quelli relativi alla mia divisione e, per ridurre I tempi di esecuzione delle query da qualche minuto a qualche secondo, all'apertura del db creo copie dei record di mio interesse con varie make-table-query sui cui risultati vado poi a costruire tutti I form/report.

    Siccome voglio che queste make-table-query vengano eseguite solamente la prima volta che viene aperto il db, ho pensato che utillizzando una tabella chiamata "Data_Di_Aggiornamento", avente un solo campo chiamato "last_Update" in formato data contenente sempre e solo il giorno dell'ultimo aggiornamento, dato che viene modificato tramite una query di aggiornamento successivamente all'esecuzione delle make-table-query, una condizione if-then che confronti la data odierna con la data dell'unico record "last_Update" eviterebbe di mandare in esecuzione continuamente le make-table-query.

    Lo so che la soluzione piu' semplice, per me che non sono un programmatore, sarebbe un pulsante che l'utente preme per fare questo aggiornamento, ma mi e' stata cassata. Troppa fatica per le dita tartassate di qualcuno...

    Grazie e scusate ancora
    Max
  • Re: Creare condizione sul valore di un record per valutare se eseguire una macro

    OsvaldoLaviosa ha scritto:


    - di cosa parla il tuo database

    maxgrana ha scritto:


    Ho un db chiamato "Trial" che crea una genealogia di prodotti a cui lega informazioni come, ingegnere di prodotto, impianti di produzione, tempi di produzione etc.
    Io non conosco il tuo ambito professionale. Potresti spiegare che cos'è? Poi non hai risposto alle altre richieste

    OsvaldoLaviosa ha scritto:


    - nomi propri di tutte le tabelle (almeno quelle significative)
    - nomi propri di tutti i campi, con indicazione della chiave primaria
    - le relazioni- nomi propri di query, maschere o altro che entrano a far parte del contesto, usando i nomi propri
    - rispiega quello che vuoi fare usando i nomi propri
  • Re: Creare condizione sul valore di un record per valutare se eseguire una macro

    La tabella originaria DivisionPlanner alla quale accedo tramite link e' composta da Code (chiave primaria), Nome, descrizione, StatoAttivita, DataStato, UltimoAggiornamentoStato.
    La tabella originaria Product alla quale accedo tramite link e' composta da CodiceProdotto (Chiave primaria), TipoMateriale, TipoGenealogia, Gruppo, PlanningFamily, Divisione, FamProdotto.
    La tabella originaria GenealogiaProdotto alla quale accedo tramite link e' composta da CodiceCommerciale (Chiave primaria), CodiceProduzione, CodiceLineaGrezza, CodiceTestElettrico.
    La tabella originaria ProductPerPlant alla quale accedo tramite link e' composta da CodiceProdotto (Chiave primaria), Impianto, CodiceProcesso, CodiceImpiantoPrincipale.
    La tabella originaria AreaDiProduzione alla quale accedo tramite link e' composta da Code (chiave primaria), Impianto, Stato, ShippingPlant.
    La tabella Data_Di_Aggiornamento e' composta dal solo campo last_Update (chiave primaria) ed avra' sempre un unico record.

    Il numero di record delle tabelle originarie e' enorme ed il tempo di esecuzione delle query, tipicamente con relazioni molti-a-uno, e' molto elevato.
    Facendo una copia delle tabelle originarie con 5 make-table-query filtrando i soli record relativi alla divisione cui appartengo, quindi sovrascrivendo ogni giorno le tabelle del giorno precedente, il tempo di esecuzione delle query si reduce a qualche secondo.
    Quando faccio eseguire le 5 make-table-query, come ultima azione aggiorno il campo last_Update della tabella Data_Di_Aggiornamento con la data odierna.

    Volendo evitare di fare la copia ridotta delle tabelle originarie ogni volta che si apre il db, volevo fare in modo che le 5 make-table-query andassero in esecuzione solo quando la data odierna ed il valore last_Update della tabella Data_Di_Aggiornamento sono diversi.

    Come faccio a confrontare il valore presente in last_Update con la data odierna?

    Grazie
  • Re: Creare condizione sul valore di un record per valutare se eseguire una macro

    Ho risolto in questo modo:

    Dim DbsTrial As DAO.Database
    Dim RstDataAggiornamento As DAO.Recordset
    Dim DataAggiornamento As Date

    Set DbsTrial = CurrentDb
    Set RstDataAggiornamento = DbsTrial.OpenRecordset("Data_Di_Aggiornamento")

    RstDataAggiornamento.MoveFirst
    DataAggiornamento = RstDataAggiornamento!Last_Update


    If DataAggiornamento <> Date Then

    DoCmd.SetWarnings False
    DoCmd.Hourglass True
    DoCmd.OpenQuery "Copy_Division_Planner", acViewNormal, acEdit
    DoCmd.OpenQuery "Copy_Product_daily", acViewNormal, acEdit
    DoCmd.OpenQuery "Copy_Product_Genealogy_Daily", acViewNormal, acEdit
    DoCmd.OpenQuery "Copy_Product_x_Plant_Daily", acViewNormal, acEdit
    DoCmd.OpenQuery "Copy_Production_Area", acViewNormal, acEdit
    DoCmd.OpenQuery "Qry_data_Aggiornamento", acViewNormal, acEdit
    DoCmd.SetWarnings True

    End If

    Grazie
Devi accedere o registrarti per scrivere nel forum
5 risposte