Errore - memoria stack insufficiente per eseguire l'operazione

di il
4 risposte

Errore - memoria stack insufficiente per eseguire l'operazione

Salve,
Ultimamamente access mi da l'errore come da titolo "memoria stack insufficiente per eseguire l'operazione" quando cerco di aprire una maschera. Facendo il debug di VBA l'errore si blocca ad una query abbastanza semplice. La cosa strana è che se apro direttamente la maschera dalla finestra oggetti a sinistra tutto va bene senza alcun errore.
Sotto riporto i codici dove si blocca access:
'------------riassunto delle somme di tutti i costi
Me.RiasNTrials = DCount("IDTRIALPLAN", "TBTRIALPLAN")
Me.RiasPlot = DSum("TOTAL_PLOT", "TBTRIALPLAN")
Me.RiasPlant = DSum("TOTAL_PLANTS", "TBTRIALPLAN")
Me.Riasm2 = DSum("TOTAL_SQM", "TBTRIALPLAN")
Me.Rias€plts = DSum("TOTAL_PLANTS_€", "TBTRIALPLAN")
Me.RiasAltri€ = DSum("OTHER_EXPENCES", "TBTRIALPLAN")
Me.RiasTot€ = DSum("TOTAL_COST", "TBTRIALPLAN")
Me.RiasOre = DSum("HOURS", "TBTRIALPLAN")
Me.RiasFTE = DSum("FTE", "TBTRIALPLAN")
'----------------------------------------------------
La tabella "TBTRIALPLAN" ha solo 3 righe di records quindi non riesco proprio a capire come mai venga generato l'errore. Inoltre controllando taskmanager l'assorbimento di memoria è poco e non tale da causare picchi tali da andare in crush.

Qui sotto invece il comando che apre la form (solo quando lo apro così da errore):
DoCmd.OpenForm "TBTRIALPLAN", acNormal, , "IDTRIALPLAN=" & Me.IDTREQUEST
Ho già provato a ricompattare il DB ma il problema persiste...
Qualche consiglio?

Grazie

Aggiungo un commento: provando a ricontrollare l'errore ho spuntato la prima riga (quella dell'ID) e magicamente l'errore non appare più...come mai? qualcuno sa darmi una spiegazione?

4 Risposte

  • Re: Errore - memoria stack insufficiente per eseguire l'operazione

    Dal momento che la Tabella da cui estrai i dati è sempre la stessa [TBTRIALPLAN], effettuare N(9) DlookUp è estremamente sconveniente in termini di prestazioni, senza poi andare a cercare di capire come tu possa avere in una Tabella dei TOTALI a meno di Popolarla appositamente in modo Temporaneo...
    Cosa poi stranissima è che dici che la Tabella [TBTRIALPLAN] contiene solo 3 RIGHE... credo tu intenda RECORDS...?
    Se così fosse, quelle DLOOKUP non vanno assolutamente bene... in quanto NON individuano il Record specifico... ma a caso il primo in base all'ordine o alla presenza di una PK... insomma qualche cosa di poco limpido è evidente.

    In ogni caso quello che ti espongo NON è detto sia la soluzione, di norma l'errore che lamenti avviene quando si scrive codice Ricorsivo e non si rilasciano le risorse... tuttavia il codice che esponi ora è sicuramente parziale e non sufficiente a capire il vero problema, quindi ti proporrei(chiariti i dubbi di cui sopra) una cosa che di sicuro OTTIMIZZA quello che fai, poi provi a fare una analisi più approfondita con Debug mirati magari scopriamo qualche altro inghippo.

    Quando ci avrai chiarito come mai effettui un DlookUp su una Tabella MultiRecords, senza un Criterio... allora possiamo anche pensare di OTTIMIZZARE il metodo di estrazione dei Dati evitando le DlooKup.
  • Re: Errore - memoria stack insufficiente per eseguire l'operazione

    Innanzitutto grazie.
    Forse non mi sono spiegato oppure sono io che ho gravi carenze in materia access. comunque:
    Se così fosse, quelle DLOOKUP non vanno assolutamente bene... in quanto NON individuano il Record specifico... ma a caso il primo in base all'ordine o alla presenza di una PK... insomma qualche cosa di poco limpido è evidente.
    io non sto cercando un record specifico....io sto solo facendo: una somma (Dsum) e il conteggio (Dcount) in alcune colonne di una tabella. non mi interessa quindi l'ordine o altro. (la tabella ha 3 righe=3 id. Parlavo di righe e non records in quanto può capitare che in una colonna vi siano 3 dati e in un'altra 1 o 2).

    Grazie
  • Re: Errore - memoria stack insufficiente per eseguire l'operazione

    deko ha scritto:


    Innanzitutto grazie.
    Forse non mi sono spiegato oppure sono io che ho gravi carenze in materia access. comunque:
    Se così fosse, quelle DLOOKUP non vanno assolutamente bene... in quanto NON individuano il Record specifico... ma a caso il primo in base all'ordine o alla presenza di una PK... insomma qualche cosa di poco limpido è evidente.
    io non sto cercando un record specifico....io sto solo facendo: una somma (Dsum) e il conteggio (Dcount) in alcune colonne di una tabella. non mi interessa quindi l'ordine o altro. (la tabella ha 3 righe=3 id. Parlavo di righe e non records in quanto può capitare che in una colonna vi siano 3 dati e in un'altra 1 o 2).

    Grazie
    Ho parzialmente confuso il concetto... ma il risultato non cambia...!
    Non si eseguono 9 funzioni di aggregazione(Dcount/DSum)... dovresti fare una Query Raggruppata in cui metti in SOMMA i Campi di cui vuoi la somma e Conteggio del campo di cui vuoi il conteggio.
    Questa Query viene eseguita 1 Volta, e non 9 volte come le 9 Dcount/DSum... quindi apri un Recordset che in un solo colpo LEGGE tutti i campi Calcolati(Somma/conteggio) risultanti e li assegni ai Controlli.
    Questo è il metodo che Tecnicamente deve essere considerato corretto...

    Parti da quello, anche se, come ti ho esposto, non credo che l'errore dipenda da questo... tuttavia questo è un campanello di allarme abbastanza evidente.
  • Re: Errore - memoria stack insufficiente per eseguire l'operazione

    Perfetto!!!!
    ora funziona alla grande. Facendo come hai suggerito tu, con 1 query che ingloba tutte e 9 le funzioni, ne risulta maggior velocità e nessun errore!!!
    ti ringrazio ancora!!! sei stato molto utile!
Devi accedere o registrarti per scrivere nel forum
4 risposte