Newsgroup: it.comp.appl.access
Titolo: x M.Borrelli-C.Costarella

("Unbound". Cioe' con i controlli "non associati". )
Si riempivano delle variabili, gestite a totale piacimento del
programmatore ed al termine, si registravano i dati nel database
(file.dbf - Tabella di Access) previa l'aggiunta di un nuovo record vuoto.
Si, ma si era nel 1987..!!!  Oggi, con linguaggi decisamente piu' evoluti,
che ti fanno andare sulla luna...., non e' possibile incontrare simili
asperita'....
Ho osservato anche i file di esempio a corredo di Access. Non ho trovato
una, e dico una, sola maschera di inserimento dati che controlli i
suddetti passaggi.
E' da tenere anche molto presente il fatto che in Access o VB e' da
soli quattro mesi che mi sono avvicinato, quindi la mia Ignoranza
nel capire e gestire questo linguaggio e' notevole.
Grazie della disponibilita'
Spero di aver scritto in modo comprensibile (ho fatto di fretta..)
Buone cose ad entrambi.
Attendo ansioso nuove cose..
Antcim
** Risultati ottenuti usando ....Dirty
In Struttura tabella, Campo1 'Richiesto = Si" :
Se entro nella maschera ed esco, ho sempre il messaggio di errore.
In Struttura Tabella, Campo1 "Richiesto = No" :
Se entro nella maschera e col mouse, erroneamente, vado alla CasTesto
successiva (Controllo2), essa
prende il focus e, se poi inserisco i dati,  il record viene regolarmente
registrato senza avere inserito
il dato obbligatorio nel Controllo1  (per il Campo1)...!!!
(cioe', viene ignorato totalmente il codice  sull'evento
Controllo1_LostFocus()    ->  if Me.Dirty .... )

 ha scritto nel messaggio
news:S6Va9.19764$ub2.3...@news1.tin.it...

Ti rispondo per la parte che mi compete, lasciando a Maurizio la sua.
In Access sono possibili molte strade per raggiungere uno stesso risultato.
Ben presto ti accorgerai che una delle cose più difficili da implementare è
la corretta gestione degli errori e prevedre i possibili comportamenti
dell'utente nell'uso della applicazione realizzata.
Quello che dici è un classico...se l'utente si sposta su di un controllo non
"controllato" tutto salta.
Personalmente agisco così. Alla chiusura della maschera o allo spostamento
su di un record precedente o successivo o all'aggiunta di un nuovo record,
valuto la situazione del record corrente. Se il controllo che mi interessa
ha un valore...allora proseguo...altrimenti...
Esempio:
Private Sub Form_Close()
If IsNull(Me.Campo1) Or Me.Campo1 = "" Then
MsgBox "Il record verrà cancellato perchè manca un valore in Campo1"
'questo messaggio puoi eliminarlo se non ti interessa avvisare
dell'operazione
'ora valuto se l'utente ha scritto comunque qualcosa nella maschera
    If Me.Dirty Then
    Me.Undo
    Else
'lutente non ha scritto nulla ma il record va eliminato lo stesso perchè
'il controllo per me importante è vuoto
    DoCmd.SetWarnings False
'faccio partire una query che ho precedentemente realizzato
'e che ha nei criteri l'identificativo del record corrente
'criterio: Forms!MiaForms!IDCon IndiceUnivoco
    DoCmd.OpenQuery "CancellaRecordNullo"
    DoCmd.SetWarnings True
    End If
End If
Alcuni programmatori per velocizzare la gestione degli errori scrivono la
classica istruzione:
On Error Resume Next all'inizio della routine.
Questa istruzione dice al motore di Access di non considerare l'errore
verificatosi ma di proseguire con l'istruzione successiva.
E' una scappatoia ma spesso si rivela molto utile quando si sà che un
eventuale codice di errore generato è ininfluente per il proseguimento delle
istruzioni.
Sperodi esserti stato d'aiuto.
Ciao, Carlo

Ciao Carlo, buona giornata.
'Raccogliendo i miei cocci...'  posto alla tua attenzione, per un tuo
competente commento,  cio' che, per ora, mi sembra essere un
discreto equilibro tra impegno/risultato.
(sempre tenendo presente quali erano le mie necessita' iniziali)
Con TabellaCampo1 -> Richiesto = No
Private Sub CODICE_LostFocus()
If Me.Dirty Then
     If IsNull(Me.CODICE) Or Me.CODICE = "" Then
          If MsgBox("Il CODICE e' un dato Obbligatorio..! " & _
                     Chr(13) & Chr(13) & "Proseguire ugualmente ?", _
             vbYesNo + vbDefaultButton2) = vbYes Then
               Exit Sub
          End If
     End If
End If
'Nota: il codice seguente non deve stare prima del codice precedente..!
If IsNull(Me.CODICE) Or Me.CODICE = "" Then
[Purtroppo sono costretto a non mettere l'utile messaggio d'avvertimento
(es. MsgBox "Dato Obbligatorio..!") per evitare che diventi fastidioso
in caso di chiusura maschera (compare per ben 3 volte...!)
Se si potesse evitare l'inghippo, sarebbe quasi OTTIMO..!!!!!)]
     Me.RAG_SOC.SetFocus
     Me.CODICE.SetFocus
     Me.Undo
End If
End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Me.Dirty And (IsNull(Me.CODICE) Or Me.CODICE = "") Then
      If MsgBox("CODICE Mancante..!" & Chr(13) & Chr(13) & _
                "Registrare ugualmente ?", _
             vbYesNo + vbDefaultButton2) = vbNo Then
           Me.Undo
      End If
End If
End Sub
Se si potesse mettere quel messaggio prima citato, sarebbe quasi ok...
(Funziona bene anche dopo aver digitato nel Controllo1 e, ritornandoci,
si cancella il contenuto stesso del Controllo1.....)
Cordialita'
Antcim

Scusami Carlo,
prima dimenticavo che CODICE per me e' Campo1 (Controllo1)
e RAG_SOC e'  Campo2 (Controllo2)
Ciao
Antcim

 Ti rispondo per la parte che mi compete, lasciando a Maurizio la sua.
    Grazie, ma andate pure avanti. Vi raggiungo piu' tardi. Intanto vi
leggo.
    :-))
--
Ciao :-)
Maurizio
--------
?SPQR(C)
 X
--------
P.S.: Caro antcim, mi auguro che i tuoi problemi familiari si risolvano
felicemente...

 felicemente...
Ciao Maurizio, buona giornata.
Grazie
Cordialita'
Antcim