Newsgroup: it.comp.appl.access
Titolo: "Impossibile salvare questo oggetto adesso" e annullamento di un evento (A97)

Ho una maschera nella quale sono contenuti due eventi: "Prima di aggiornare"
che esegue il controllo formale dei dati inseriti in una riga e "Su
Scaricamento" che esegue il controllo formale dei dati inseriti in tutto il
recordset.
Singolarmente i due eventi eseguono correttamente il loro compito, ma si
verifica un inconveniente quando vengo eseguiti entrambi.
Supponiamo che un dato obbligatorio di una riga non venga valorizzato e
contemporaneamente ne venga modificato un altro.
Quando l'operatore tenta di chiudere la maschera, viene eseguito
correttamente l'evento "Prima di aggiornare", viene emessa la segnalazione
d'errore del dato mancante (Msgbox), ma dopo l'esecuzione dell'evento Access
emette la segnalazione "Impossibile salvare questo oggetto adesso" con la
possibilità di rispondere "SI" o "NO".
Vorrei intercettare il messaggio, in modo che non venga visualizzato, ma
purtroppo viene emesso dopo l'evento "Prima di aggiornare" e prima
dell'evento "Su Scaricamento".
Rispondendo "SI" al suddetto messaggio viene eseguito l'evento "Su
Scaricamento", che non vorrei venisse eseguito a causa della precedente
segnalazione d'errore, mentre rispondendo "NO" l'evento "Su Scaricamento"
non viene eseguito.
L'emissione del suddetto messaggio è una conseguenza dell'esistenza
dell'evento "Su Scaricamento", perchè senza il messaggio non viene emesso.
Come potrei intercettare l'errore e contemporaneamente evitare l'esecuzione
dell'evento "Su Scaricamento" ?
Grazie
Ciao
Eugenio


Grazie
Ciao
Eugenio


Dopo l'emissione della segnalazione d'errore (msgbox) non attivo Cancel =
true, ma per abitudine preferisco utilizzare Exit sub.
Il problema però non è nell'evento "Prima di aggiornare", che viene
completato correttamente, ma è successivo, probabilmente quando Access tenta
di aggiornare la riga.
La sostanza è che io vorrei intercettare l'errore in modo che l'operatore
non possa scegliere "SI", che provocherà la chiusura della maschera anche
sei dati non sono completi, ma voglio che l'operatore sia costretto a
scegliere tra completare i dati della maschera o cancellare tutte le righe
della maschera.
Per chiarire specifico in dettaglio quello che sto facendo.
Ho due tabelle : FamiglieDT (CodFam, Descr, DescrDatoTecnico), ProdottiDT
(CodProd, DescrDatoTecnico, ValoreDatoTecnico).
Inizialmente avrò definito che una determinata famiglia di prodotti avrà una
serie di dati tecnici (Lunghezza, Peso, Immagine,  oppure Diametro, Peso,
Frequenza, oppure altre combinazioni).
Nella maschera in questione tramite un pulsante importo dalla tabella
FamiglieDTi nella tabella ProdottiDT le descrizioni DescrDatoTecnico che
nella maschera (maschere continue) saranno da considerare delle etichette
(ovviamente sono campi di testo bloccati). Quindi l'operatore deve inserire
il valore del dato tecnico.
Quello che voglio è che nella tabella ogni riga di ProdottiDT se il
DescrDatoTecnico contiene una descrizione, anche ValoreDatoTecnico deve
essere valorizzato.
Grazie
Ciao
Eugenio


*********************************************************************
Private Sub Form_BeforeUpdate(Cancel As Integer)
On Error GoTo Err_Form_BeforeUpdate
    blErrore = False
    DoCmd.Hourglass True
    'Codice Dato Tecnico
    If isnull(Me!CodDatoTecnico) = True Or Me!CodDatoTecnico = "" Then
        MsgBox "Manca il Dato Tecnico", vbCritical, "Inserimento Dati
Tecnici dei Prodotti"
        blErrore = True
        Me!CodDatoTecnico.SetFocus
        GoTo Exit_Form_BeforeUpdate
    End If
    'Descrizione o Valore del Dato Tecnico
    If Me!DescrizioneObbl = True And Me!DatoObbligatorio = True Then
        If isnull(Me!DescrDatoTecnico) = True Then
            MsgBox "Manca il Valore del Dato Tecnico", vbCritical,
"Inserimento Dati Tecnici dei Prodotti"
            blErrore = True
            Me!DescrDatoTecnico.SetFocus
            GoTo Exit_Form_BeforeUpdate
        End If
    End If
    'Percorso del Dato Tecnico
    If Me!PercorsoObbl = True And Me!DatoObbligatorio = True Then
        If isnull(Me!Percorso) = True Then
            MsgBox "Manca il Percorso del Dato Tecnico", vbCritical,
"Inserimento Dati Tecnici dei Prodotti"
            blErrore = True
            Me!cmdPercorso.SetFocus
            GoTo Exit_Form_BeforeUpdate
        End If
    End If
Exit_Form_BeforeUpdate:
    If blErrore = True Then  Cancel = True
    DoCmd.Hourglass False
    Exit Sub
Err_Form_BeforeUpdate:
    MsgBox ERR.number & " - " & ERR.description
    Resume Exit_Form_BeforeUpdate
End Sub
****************************************************************************
****
Grazie
Ciao
Eugenio


In effetti, come dicevo, l'errore si verifica proprio a seguito di una
modifica, ma non so come comportarmi, perchè sicuramente il messaggio viene
emesso anche prima dell'evento "Dopo aggiornamento".
Grazie
Ciao
Eugenio

 Eugenio
-- 
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------