2486 Impossibile eseguire l'azione adesso

di il
19 risposte

2486 Impossibile eseguire l'azione adesso

Ciao a tutti,
ho una mascera (DDT - continuos) che viene richiamata da altre 2 maschere.
Se viene richiamata da Collaudi funziona tutto regolarmente
Se viene richiamata da RientriParziali, se non sono presenti record nella maschera richiamata (DDT), fallisce almeno il 50% delle volte restituendomi l'errore "2486 Impossibile eseguire l'azione adesso".

Questo è il codice con il quale richiamo DDT da RientriParziali (fallimento frequente):

Private Sub xDDTQta_Click()

If Me.CTIDDDTG > 0 And IsNumeric(Me.CTIDDDTG) Then
Else
Me.CTIDDDTG = 0
End If
If CurrentProject.AllForms("DDT Vendita").IsLoaded Then
On Error Resume Next
DoCmd.Close acForm, "DDT Vendita"
End If
On Error Resume Next
DoEvents
DoCmd.OpenForm "DDT Vendita", , , "DVIDGRUP=" & Me.CTIDDDTG, , , "RP|" & Me.CTIDDDTG & "|" & Me.CTNMCOM & "|" & Me.CTSUBLOT & "|" & Forms![Commessa]!CMCDCLI & "|" & Me.CTDATA & "|" & Forms![Commessa]!CMNMDIS & "|" & Me.CTQTACS

End Sub


Ho provato ad inserire DoEvents, ho anche controllato che TUTTE le variabili che utilizzo nel filtro e nell'OpenArgs siano valorizzate correttamente al momento del fallimento, e lo sono.

Di seguito il codice presente in Collaudi (100% di successo):

Private Sub xDDTNum_Click()
If Me.RCIDDDTG > 0 And IsNumeric(Me.RCIDDDTG) Then
Else
Me.RCIDDDTG = 0
End If
If CurrentProject.AllForms("DDT Vendita").IsLoaded Then
DoCmd.Close acForm, "DDT Vendita"
End If
DoCmd.OpenForm "DDT Vendita", , , "DVIDGRUP=" & Me.RCIDDDTG, , , "CS|" & Me.RCIDDDTG & "|" & Me.RCNMCOM & "|" & Me.RCSUBLOT & "|" & Forms![Commessa]!CMCDCLI & "|" & Me.RCDTCER & "|" & Forms![Commessa]!CMNMDIS & "|" & Me.RCQTACF
End Sub


Se qualcono fosse in grado di aiutarmi .......
grazie

19 Risposte

  • Re: 2486 Impossibile eseguire l'azione adesso

    Ciao Tinto,
    ancora una volta io...

    secondo me, invece di chiudere e riaprire la maschera DDT con diversi openargs, dovresti, in ognuna delle maschere che richiama DDT o prelomeno in quella dove "fallisce", cambiare la proprietà "RecordSource" di DDT per poi eseguire un "requery". (tutto questo da codice)

    La stringa SQL da passare alla proprietà potresti "calcolarla" creandola al volo con lo strumento "crea query di access" e poi incolli la "visualizzazione SQL" nella proprietà.

    Saluti

    ps:
    se non riesci posta la query che regge la maschera DDT ... magari ne ricaviamo qualcosa...
  • Re: 2486 Impossibile eseguire l'azione adesso

    Ciao Angelo, in effetti DDT è un pò più articolata.
    Il filtro seleziona i record da mostrare in DDT, mentre i valori in OpenArgs servono per filtrare il contenuto di una sottomaschera di DDT (anch'essa continuos).
    In Form_Load() di DDT utilizzo tali valori per modificare la select del "RecordSource" della sottomaschera di DDT.
    In questo scenario come è realizzabile il tuo suggerimento?

    grazie
  • Re: 2486 Impossibile eseguire l'azione adesso

    Detto così lo scenario sembra alquanto "criptico"...
    quando in DDT non c'è nessun record (ovvero nella sutuazione che dal luogo all'errore il 50% delle volte), il contenuto visualizzato nella sottomaschera contenuta in DDT è dinamico oppure è sempre lo stesso???
  • Re: 2486 Impossibile eseguire l'azione adesso

    Il contenuto della sottomaschera del DDT è dinamico, spesso è vuota anch'essa.
  • Re: 2486 Impossibile eseguire l'azione adesso

    Così ho pochi elementi per valutare...
    se puoi e vuoi.. posta:
    origine dati di DDT
    origine Dati della sottomaschera* DDT

    *se viene calcolata con la composizione dinamica (.recordsource) posta il codice usato...

    ho bisogno di analizzare il codice insomma...
    saluti
  • Re: 2486 Impossibile eseguire l'azione adesso

    Questo è il codice di DDT che modifica il recorSource della sottomaschera

    Private Sub Form_Load()
    strKeys = Split(Me.OpenArgs, "|")
    Me.xTipo = strKeys(0)
    Me.xIdDdt = strKeys(1)
    Me.xComm = strKeys(2)
    Me.xSubLot = strKeys(3)
    Me.xCdCli = strKeys(4)
    Me.xDtStart = strKeys(5)
    Me.xDIS = strKeys(6)
    Me.xQta = strKeys(7)

    If Not IsNull(Me.DVIDGRUP) Or Me.DVIDGRUP > 0 Then
    xIdGrup = Me.DVIDGRUP
    End If
    xDtStartM = DateAdd("d", -8, Me.xDtStart)
    Form_DDT_Vendita.RecordSource = "SELECT DOC_MAST.MVNUMDOC, DOC_MAST.MVCODCON, DOC_MAST.MVDATDOC, DOC_DETT.MVCODART, DOC_DETT.MVDESART, DOC_DETT.MVUNIMIS, DOC_DETT.MVQTAMOV, DOC_DETT.MVQTAEVA, DOC_MAST.MVTIPDOC, DOC_MAST.MVCLADOC FROM (DOC_MAST RIGHT JOIN DOC_DETT ON DOC_MAST.MVSERIAL = DOC_DETT.MVSERIAL) LEFT JOIN ART_ICOL ON DOC_DETT.MVCODART = ART_ICOL.ARCODART WHERE (((DOC_MAST.MVCODCON)='" & Me.xCdCli & "') AND ((DOC_MAST.MVDATDOC)>=#" & xDtStartM & "#) AND ((DOC_MAST.MVCLADOC)='DT') AND ((DOC_MAST.MVTIPCON)='C') AND ((DOC_MAST.MVFLVEAC)='V') AND ((DOC_DETT.MVTIPRIG)='R'));"
    Form_DDT_Vendita.Requery
    End Sub

    Origine dati di DDT: direttamente la tabella "DdtVend"


    Origine dati sottomaschera:

    SELECT DOC_MAST.MVNUMDOC, DOC_MAST.MVCODCON, DOC_MAST.MVDATDOC, DOC_DETT.MVCODART, DOC_DETT.MVDESART, DOC_DETT.MVUNIMIS, DOC_DETT.MVQTAMOV, DOC_DETT.MVQTAEVA, DOC_MAST.MVTIPDOC, DOC_MAST.MVCLADOC
    FROM (DOC_MAST RIGHT JOIN DOC_DETT ON DOC_MAST.MVSERIAL = DOC_DETT.MVSERIAL) LEFT JOIN ART_ICOL ON DOC_DETT.MVCODART = ART_ICOL.ARCODART
    WHERE (((DOC_MAST.MVCODCON)='SAFT') AND ((DOC_MAST.MVDATDOC)>=#8/1/2014#) AND ((DOC_MAST.MVCLADOC)='DT') AND ((DOC_MAST.MVTIPCON)='C') AND ((DOC_MAST.MVFLVEAC)='V') AND ((DOC_DETT.MVTIPRIG)='R'));

    Spero sia sufficiente; dovesse esserti utile altro fammi sapere.

    ciao
  • Re: 2486 Impossibile eseguire l'azione adesso

    Occorre individuare qual'è la parte di codice che ti da errore... non disponendo dei dati veri posso solo consigliarti di agire cosi:
    Crea una copia della Maschera DDT e cancella la sottomaschera.
    nella form load della copia di DDT lascia solo
    
    strKeys = Split(Me.OpenArgs, "|")
     Me.xTipo = strKeys(0)
     Me.xIdDdt = strKeys(1)
     Me.xComm = strKeys(2)
     Me.xSubLot = strKeys(3)
     Me.xCdCli = strKeys(4)
     Me.xDtStart = strKeys(5)
     Me.xDIS = strKeys(6)
     Me.xQta = strKeys(7)
    
     If Not IsNull(Me.DVIDGRUP) Or Me.DVIDGRUP > 0 Then
     xIdGrup = Me.DVIDGRUP
     End If
     xDtStartM = DateAdd("d", -8, Me.xDtStart)
    di seguito in un altro pulsante di RientriParziali metti questo codice:
    
    If Me.CTIDDDTG > 0 And IsNumeric(Me.CTIDDDTG) Then
     Else
     Me.CTIDDDTG = 0
     End If
    On Error Resume Next
     If CurrentProject.AllForms("nuovamaschera").IsLoaded Then
        DoCmd.Close acForm, "DDT Vendita"
     End If
     DoEvents
     DoCmd.OpenForm "nuovamaschera", , , "DVIDGRUP=" & Me.CTIDDDTG, , , "RP|" & Me.CTIDDDTG & "|" & Me.CTNMCOM & "|" & Me.CTSUBLOT & "|" & Forms![Commessa]!CMCDCLI & "|" & Me.CTDATA & "|" & Forms![Commessa]!CMNMDIS & "|" & Me.CTQTACS
    
    fai un po di prove così ci accertiamo che il problema è li...

    ps:
    x piacere metti il tag code nei post... basta selezionare il codice che hai scritto e premere "Code"

    saluti
  • Re: 2486 Impossibile eseguire l'azione adesso

    Nono ho ancora applicato i tuoi suggerimenti, mi sono però imbattuto in un problema che potrebbe essere connesso a questo sotto analisi.

    Se richiamo le 2 maschere con la data (xDtStart) di oggi mostra i movimenti del 1 febbraio, mentre se le richiamo con una data di Gennaio non mostra nulla (dovrebbe invece mostrare i movimenti di Gennaio + quelli di Febbraio)

    Evidentemente qualcosa mi sfugge qualcosa su come trattare le date di Access.
    Ho provato a dichiarare Date la variabile che utilizzo nella query (ottenuta sottraendo 8 gg al parametro ricevuto) ma non ha sortito alcun effetto.

    Sai aiutarmi in questo? grazie
    Private Sub Form_Load()
        Dim xDtStartM As Date
        strKeys = Split(Me.OpenArgs, "|")
        Me.xTipo = strKeys(0)
        Me.xIdDdt = strKeys(1)
        Me.xComm = strKeys(2)
        Me.xSubLot = strKeys(3)
        Me.xCdCli = strKeys(4)
        Me.xDtStart = strKeys(5)
        Me.xDIS = strKeys(6)
        Me.xQta = strKeys(7)
    
        If Not IsNull(Me.DVIDGRUP) Or Me.DVIDGRUP > 0 Then
            xIdGrup = Me.DVIDGRUP
        End If
        xDtStartM = DateAdd("d", -8, Me.xDtStart)
        Form_DDT_Vendita.RecordSource = "SELECT DOC_MAST.MVNUMDOC, DOC_MAST.MVCODCON, DOC_MAST.MVDATDOC, DOC_DETT.MVCODART, DOC_DETT.MVDESART, DOC_DETT.MVUNIMIS, DOC_DETT.MVQTAMOV, DOC_DETT.MVQTAEVA, DOC_MAST.MVTIPDOC, DOC_MAST.MVCLADOC FROM (DOC_MAST RIGHT JOIN DOC_DETT ON DOC_MAST.MVSERIAL = DOC_DETT.MVSERIAL) LEFT JOIN ART_ICOL ON DOC_DETT.MVCODART = ART_ICOL.ARCODART WHERE (((DOC_MAST.MVCODCON)='" & Me.xCdCli & "') AND ((DOC_MAST.MVDATDOC)>= #" & xDtStartM & "#) AND ((DOC_MAST.MVCLADOC)='DT') AND ((DOC_MAST.MVTIPCON)='C') AND ((DOC_MAST.MVFLVEAC)='V') AND ((DOC_DETT.MVTIPRIG)='R'));"
        Form_DDT_Vendita.Requery
    End Sub
  • Re: 2486 Impossibile eseguire l'azione adesso

    Mostrami un esempio concreto del valore di data che inserisci nella form che richiama ddt.

    es... scrivo 01/02/2014 ... scrivo 01 feb 2014

    presumo tu inserisca le date in un textbox... come hai settato la proprietà formato del controllo?

    il valore del controllo, in openargs, viene esportato come stringa di testo?

    se è si la risposta che valore assume la stringa esportata? puoi farmi qualche esempio scritto concreto?
  • Re: 2486 Impossibile eseguire l'azione adesso

    La data proviene da una tabella, è modificabile attraverso la continuous form dalla quale viene richiamata la form DDT.

    Il Formato del controllo è "Data in cifre"

    Un esempio del contenuto è "13/01/2014"

    Negli openargs non racchiusa fra apici quindi direi non è una stringa di testo
  • Re: 2486 Impossibile eseguire l'azione adesso

    Forse mi sbaglio, ma quando viene elaborata da split forse viene considerata come stringa... prova eventualmente, nel codice che riguarda lo split, a sostituire:
    Me.xDtStart = strKeys(5)
    con
    
    strDate = Split(strKeys(5), "/")
    Me.xDtStart = CDate(DateSerial(CLng(strDate(2)), CLng(strDate(1)), CLng(strDate(0))))
    
    saluti
  • Re: 2486 Impossibile eseguire l'azione adesso

    Incredibile!
    Fra ## bisogna mettere la data in formato americano altrimenti, se ambigua, usa il formato mm/dd/yyyy e non gg/mm/aaaa . Scelta inaccettabile da parte di microsoft!
    Comunque grazie, mi hai dato lo spunto per risolvere questo malfunzinamento.
    Purtroppo non è connesso con il problema dal quale siamo partiti.

    Ho provato qualcosa di più radicale, ho creato una maschera vuota, l'ho chiamata DDT, ho ripetuto il test ed il problema si ripresenta.
    Mi sembra qundi di poter dire che il problema risiede nel chiamante e non nel chiamato concordi?

    ciao
  • Re: 2486 Impossibile eseguire l'azione adesso

    Si concordo... infatti forse sarebbe il caso di provare a non usare il docmd per aprire la mascera DDT ma piuttosto agire in form load della maschera DDT agendo direttamente sul recordsource...

    se la query elaborata all'apertura di DDT prende dati da controlli appartenenti sia a DDT stessa che alla maschera chiamante oppure a funzioni particolari... consiglierei fare una prova come di seguito spiegato:

    1) maschera che chiama DDT: nessuna query all'origine
    2) maschera DDT: nessuna query all'origine
    3) crea dei controlli nella maschera chiamante che ospitino il valore di eventuali funzioni.
    4) avendo tutte e 2 le maschere aperte prova a costruire una query da chiamare al volo per visualizzare i dati allo scopo di verificarne il funzionamento.... almeno così potremo sperare di trovare qualche errore...
  • Re: 2486 Impossibile eseguire l'azione adesso

    Rieccomi.

    ho fatto un'azione radicale.
    Ho lasciato la maschera DDT completamente vuota ed ho modificato il richiamo rimuovendo tutto (parametri e filtri) che è quindi diventato:
    DoCmd.OpenForm "DDT Vendita"
    Il problema permane.

    Ho interpretato correttamente il test che mi hai suggerito?

    ciao
Devi accedere o registrarti per scrivere nel forum
19 risposte