Newsgroup: it.comp.lang.visual-basic
Titolo: [VB6]Impedire valori duplicati

DAO 3.6
Devo impedire che si inserisca nella tabella Clienti un nominativo con 
Codice fiscale duplicato.
Ho due opzioni:
1) Prima di inserire il nuovo record, verifico con una query se il codice 
fiscale � gia inserito.
Il problema sorge quando, invece di inserire un nuovo record devo modificare 
uno esistente perch�, in questo caso mi dice sempre che il CF esiste in 
tabella quindi dovrei creare un'altra query con diversi parametri di 
ricerca, ma quali?
2) Campo CF indicizzato come seconda chiave (duplicati non ammessi), quindi 
nella routine di update intercetto l'errore 3022 e annullo l'operazione con 
CancelUpdate. Questa opzione sarebbe buona sia in inserimento che in 
modifica
Secondo voi quale?
Carmelo

 Secondo voi quale?
Secondo me nessuno, al limite puoi dare un avvertimento, ma se io intanto
devo inserire un cliente e al momento non ho ne p.iva ne codice fiscale,
devo poter andare avanti imho.
Comunque quale � la PK della tabella? Al limite fai come 2), e
intercettando l'errore dando un messaggio comprensibile.
Tanto gi� il DB non ti fa inserire/modificare un duplicato.

 modifica
Questo può andare lo stesso, ma è meno pratico... intanto la faccenda
di basarsi sui codici di arrore ADO non mi ispira mai troppa fiducia,
in più come diceva Andrea, potresti avere situazioni in cui hai
bisogno di inserire temporaneamente il record senza quei dati; con la
soluzione 1) vai via tranquillo, con l'indice univoco potresti avere
noie

 Tanto gi� il DB non ti fa inserire/modificare un duplicato.
Il Pk � IDCliente (contatore)
Carmelo 

 Impossibile perch� il CF � obbligatorio
Es. Mi codifico un Cliente Privato che uso per fare la registrazione
contabile di fine giornata e cumolativa degli eventuali scontrini, essendo
generico non ho un codice fiscale.
Non so se poi quando vai a far colazione ti chiedono il codice fiscale :)

"Andrea [Work]" <andrea.isw...@gmail.invalid> ha scritto nel 
messaggio news:5q4jncv3f87p$.l14q9uko4kz1.dlg@40tude.net...

Allora i Clienti sono in realt� i Pazienti di uno studio medico.
I dottori o chi per loro compilano l'anagrafica delle ricette a fine mese 
per spedire le prestazioni alle asl competenti.
I primi tempi � successo che l'asl rispediva tutto indietro perch� non 
complete o perche dei pazienti erano duplicati o addirittura triplicati.
Allora ho messo una routine di controllo che se i dati non sono tutti 
inseriti non permette loro di salvare e andare avanti.
Loro prima di inserire i dati del paziente non vanno a controllare se esiste 
gi� e lo scrivono di nuovo.
Non ho capito il "ti prendi i valori iniziali che ti interessano" che vuoi 
dire che prima di modificare ti memorizzi i dati del cliente?
Carmelo

 dire che prima di modificare ti memorizzi i dati del cliente?
Quando entri in modifica di un cliente, ti salvi il codfiscale attuale.
Quando entri nella tua routine di controllo escludi quello per vedere se
esiste, e non quello che c'� nella TXT che ovviamente pu� essere cambiato.
Un hint, con i lettori di barcode e le nuove tessere sanitarie, possono
passare il barcode automaticamente. Da programma se il codice fiscale �
presente in anagrafica carichi i dati anagrafici, altrimenti carichi la
maschera per inserire il nuovo paziente.
Comunque nell'anagrafica pazienti pure io ho il codice fiscale PK, solo che
se in un'accettazione non metto il codice fiscale l'accettazione la prendo
lo stesso, con la segnalazione, ma non vado a toccare l'anagrafica
generale.

 generale.
Io non ho mai usato un campo che non sia un ID univoco come chiave primaria 
duplicati non ammessi.
Ma la guida dice che quando un record entra in fase di addnew o edit carica 
i dati nel buffer di transito e solo se l'update va a buon fine scrive i 
dati nel database.
Ho fatto varie prove e non sbaglia un colpo.
Perche siete scettici su questa soluzione?
Carmelo 

 Perche siete scettici su questa soluzione?
C'� un errore di fondo.
Nella tabella delle prestazioni dei pazienti puoi avere eccome i codici
fiscali duplicati. Se io oggi mi faccio una visita al ginocchio e domani
alla spalla posso farlo.
Se hai una tabella generica per i pazienti, e l� non puoi avere cod.fiscali
duplicati rendi il codice fiscale come chiave, cos� quando tentano di
metterne uno esistente gli dar� errore al salvataggio. Tu gestirai
quell'errore dando un messaggio pi� consono.
Se vuoi controllarlo in tempo reale, quando la textbox del codfisc viene
validata fai la select come ti ho detto.
select where codfisc=txt se sei in fase di inserimento
se sei in modifica
select where codfisc=txt and codfisc<>CodFiscIniziale
o roba del genere.

 o roba del genere.
E se invece, come dici tu memorizzo il cf iniziale e in fase di modifica 
faccio il controllo con query solo se � stato modificato il cf?
Fondamentalmente a me interessa che non ci siano cf duplicati se modificano 
l'indirizzo o altro...
Carmelo 

 l'indirizzo o altro...
Quando fai l'update, se sul DB dici che CodFisc � una PK l'update ti dar�
errore lui senza che tu debba far nulla.
Tu intercetti l'errore e dai un messaggio "codice fiscale duplicato o
mancante".