Newsgroup: it.comp.appl.access
Titolo: intercettare l'errore 3022

Ciao a tutti
credo che sia una domanda molto comune
e la risposta sia semplice, ma non la trovo nei post
precedenti o sul sito comune.
devo intercettare l'errore 3022 (DuplicateKey
chiave primaria duplicata), la cosa è semplice
nel passaggio da un record all'altro (sull'evento on
error della maschera), o addirittura se l'utente
complila i campi e salva il dato con un clik sul selettore del record.
ma vorrei intercettare l'errore in automatico prima che l'utente
complili tutta la serie di campi della maschera
di una anagrafe.
quindi in uscita da uno dei campi chiave
(che è un campo data)
sull'evento "Su uscita" imposto il salvataggio del record.
(così:
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
o così
DoCmd.RunCommand acCmdSave)
ma non ottengo lo stesso risultato cioè non risesco
ad intercettare l'errore. Come si fa?
grazie 

Controlla su evento BeforeUpdate del Controllo associato al campo
PK con una funzione di Aggregazione sui Domini:
DCount oppure DLookUp
Verifichi la presenza del Duplicato e nel caso dirotti come meglio
ritieni corretto...!
@Alex

 ha scritto nel messaggio 
news:1144937341.0...@z34g2000cwc.googlegroups.com...

Grazie per la tempestiva risposta
mi cimento,
anche se farò un po di fatica
con quelle funzioni
ma come mai la funzione di salvataggio
da codice non dà lo stesso effetto del
salvataggio con un click o con il menù?
grazie molte
ciao

 ad intercettare l'errore. Come si fa?
www.donkarl.com/it
 FAQ 4.25 Evitare duplicati
-- 
HTH
Karl
*********
Access FAQ: 
www.donkarl.com/it
 

 ha scritto nel messaggio 
news:4a7bkvF...@individual.net...

Grazie molto certamente con questa dritta posso
affrontare il problema e risolverlo a dire il vero la cosa
è complicata dal fatto che il controllo deve essere
effettuato su una combinazione di due campi
(nell'anagrafe vado a controllare un campo "nome e cognome" un campo
"data di nascita"). Suppongo che dovrò creare una query  che "alleghi"
i due campi e interrogare quel recordset, sono sulla strada giusta?

 i due campi e interrogare quel recordset, sono sulla strada giusta?
No. Se ti riferisci alla variante 2 del articolo basta aggiungere più
criteri (con " And ..." ) nella funzione Dlookup. Se non riuscirei nella
sintassi puoi postare qui i tuoi tentativi per facilitare la correzione.


 sintassi puoi postare qui i tuoi tentativi per facilitare la correzione.
[cut]
Prima di tutto grazie ancora
ho potuto fare veramente quello che volevo
utilizzando il criterio con AND
(per la verità funzionava anche con la query)
sull'altra nota che mi fai, a dire il vero,
ho proprio un campo [cognome e nome]
ma non capisco bene quale è il problema.
Me lo spieghi?
grazie

 Me lo spieghi?
Beh, col mio italiano... meglio solo alcune frasi invece del
romanzo che sarebbe necessario:
C'è un sistema e processo per la creazione corretta di database
relazionali che si chiama Normalizzazione. Già per arrivare al
primo grado di Normalizzazione (Prima Maschera Normale) la
regola principale è che si deve solo salvare dati atomici in un
campo non dati moleculari = composti.
Nel caso di "nome e cognome" è chiaro che si tratta di dati
composti. Si deve spesso cercare, ordinare, cambiare parti
del campo, lavorare con il cognome, qualche volta anche solo
con il nome.
Una delle conseguenze di questo errore nella costruzione è
che per questi lavori è necessario di prima sempre separare
il contenuto del campo (v.a. 
www.donkarl.com
 FAQ 2.20).
Questa separazione spesso non è facile, è inesatto e costa tempo,
lavoro, prestazione.
Finora non ho trovato siti o testi buoni sulla normalizzazione in
italiano. Purtroppo i testi della Microsoft che trovi con i link della
FAQ 1.31 Normalizzazione e teoria sui database
non sono molto esatti.


 il contenuto del campo (v.a. 
www.donkarl.com
 FAQ 2.20)...
o in italiano ;-): 
www.donkarl.com/it
 FAQ 2.20 

 grazie
ciao

ciao
Grazie a tutti e due,  non conoscevo tutte le regole di normalizzazione
e devo dire che molte le ho già scoperte e le uso (spesso la scoperta mi è 
costata
fatica) ma avevo intuito da solo la necessità di atomizzare i dati e di 
fatto
ho sempre tenuto separato nome e cognome in due campi diversi.
L'esempio più efficace che mi viene in mente è un parallelo
con la biologia dove l'organismo è sempre individuato dal nome del genere
e dal nome della specie, ma le due informazioni vanno sempre tenute
distinte.
La stessa guida in linea di Access 2002 dice:
"Memorizzare le informazioni suddividendole al massimo dal punto di vista 
logico.
Ad esempio, i nomi dei dipendenti vengono spesso divisi
in due campi, Nome e Cognome, in modo da agevolare
l'ordinamento dei dati in base al cognome."
Ma questo DB è stato fatto nel "lontano" 1998
importando i dati da un foglione di excel
dove erano stati buttati
oramai la cosa è fatta...fino ad ora non è capitato
di avere la necessità di dividerli. Quando capiterà
stramaledirò quella "leggerezza" (solo le due zeta coincidono
con la parola esatta) iniziale.
ciao e grazie