Newsgroup: it.comp.appl.access
Titolo: Non segnala chiave primari duplicata

Altro problema,
la MiaTabella, ha come chiave primaria il "CodiceFiscale",
se renserisco lo stesso paziente, quindi lo stesso codFisc,
Vabbè che non lo salva, ma nemmeno mi avvisa che si è tentato di puplicare 
l'indice!
Qual'è il codice di questo errore? 3022 oppure 2105?
Premetto che ho un evento prima dell'aggiornamento, sarà questo.
Napoleone 

 ha scritto nel messaggio
news:1Hdxe.31282$D7.8...@twister1.libero.it...

Ciao Napoleone,
prima di aggiornare il controllo contentente la pk (codfice fiscale nel tuo
caso) prova un po' in questo modo :
dim pk as string
contaPk = DCount("id", "Tabella1", "id='" & Me.id & "'")
If contaPk > 0 Then
        MsgBox ("Non vorrai duplicare la pk ?")
Cancel = True
End If
adatta i nomi dei controlli alla tua situazione. L'errore è il 3022.
Ciao


Ciao Sandro,
Ti allego tutto il codice a fronte dell'evento
--------------
Private Sub Form_BeforeUpdate(Cancel As Integer)
contaPk = DCount("IDPaziente", "TBAE_Pazienti_Elenco", "IDPaziente='" & 
Me.IDPaziente & "'")
If contaPk > 0 Then
        MsgBox ("Non vorrai duplicare la pk ?")
Cancel = True
End If
Dim retValue As Integer
   Dim strTtl As String
   Dim strMsg As String
   strTtl = "AVVISO DI MODIFICA !!!!"
   strMsg = "I DATI DEL PAZIENTE SONO STATI MODIFICATI." & vbCrLf & _
                "Vuoi salvare le modifiche fatte?"
   retValue = MsgBox(strMsg, vbQuestion + vbYesNo, strTtl)
   Select Case retValue
       Case vbYes
       Me.IDPaziente = Format(IIf(DCount("[IDPaziente]", 
"TbAE_Pazienti_Elenco") = 0, 1, DMax("[IDPaziente]", "TbAE_Pazienti_Elenco") 
+ 1), "00000")
        'DoCmd.GoToRecord , , acNewRec
           'non fare nulla
       Case vbNo
           DoCmd.RunCommand acCmdUndo
       'Case vbCancel
           'Cancel = True
   End Select
End Sub
----------------
Cosi, non mi segnala ugualmente niente.
Ciao
Napoleone 



Non è che hai disabilitato la visualizzazione dei messaggi di errore?
Apri un codice qualsiasi e nella finestra immediata scrivi:
docmd.SetWarnings true
seguito da tasto invio.
Ora prova a vedere se i messaggi ricompaiono. Se sono ricomparsi fai un 
"cerca" nel codice per trovare una comando tipo:
docmd.SetWarnings false
Allo stesso modo puoi crearti una macro con "Imposta Avvisi" = Sì e la 
esegui.
Ciao, Carlo 

 ha scritto nel messaggio
news:pqexe.32333$yM4.4...@twister2.libero.it...

Ciao Napoleone,
intanto ti ho scritto una castroneria nel post precedente definendo pk
string invece che integer, mmmmm !
La parte di codice che indichi sotto alla mia non serve per controllare se
la chiave è duplicata : per questo è sufficiente quello che ti ho postato.
Se non ti dice nulla e sei certo di inserire una chiave duplicata, controlla
bene i nomi dei controlli della form e degli oggetti del DB.
Se la pk è codice fiscale perchè nella parte where di Dcount effetui il
controllo sull' id_paziente ? Ma anche in questo caso se inserisci
nuovamente nella tabella lo stesso paziente ti deve mostrare la msgbox
Forse non ho capito bene cosa vuoi fare :-)
Ciao.

 Ciao, Carlo
Napoleone 

 ha scritto nel messaggio 
news:wAexe.23657$h5.10...@news3.tin.it...

Dunque Sandro,
quello che vorrei e non so perchè in questa maschera non lo fa,
avere il messaggio di paziente esistente in elenco, se la chiave primaria
 "CodiceFiscale" viene ad essere duplicata.
Ho provato a fronte dell'evento Error e niente, prima e dopo aggiornamento,
uguale con patate!
Dimmi tu..
Napoleone 

 Napoleone
Ciao Napoleone,
allora se pk >0 vuole dire che hai un duplicato nella tabella ok ? Bene,
vuoi che la msgbox ti indichi cosa ?
Paziene esistente in elenco + nome del paziente ? Scusa se sono un po'
rintronato ;-)
Il codice lo devi mettere prima di aggiornamento del controllo che utilizzi
per inserire il codFisc, non da altre parti.
Deve funzionare !!! ;-)
Altrimenti fai un zip, la mia mail la conosci ....
Ciao

 ha scritto nel messaggio 
news:v4hxe.24193$h5.10...@news3.tin.it...

Ma il codice cosi come l'ho sistemato adesso è corretto?
Napoleone 

 Napoleone
Allora siamo qui :
 Private Sub Form_BeforeUpdate(Cancel As Integer)
     contaPk = DCount("IDPaziente", "TBAE_Pazienti_Elenco", "IDPaziente='" &
Me.IDPaziente & "'")
         If contaPk > 0 Then
             MsgBox ("Non vorrai duplicare la pk ?")
             Cancel = True
         End If
end sub
Questo č quanto serve.
la tabella in cui non ci deve essere il duplicato č TBAE_Pazienti_Elenco ?
la pk č idPaziente ? Hai modificato i nomi dei controlli e allora non li
trova ?
Potresti ottenere la stessa cosa con Dlookup
If DLookup("IDPaziente",TBAE_Pazienti_Elenco", "IDPaziente='" &
Me.IDPaziente & "'") = Me.idPaziente Then
 MsgBox ("Non vorrai duplicare la pk ?")
             Cancel = True
         End If
ma la cosa non cambia !
Il resto del codice non serve a questo scopo, credo che tu voglia richiedere
una conferma prima di aggiornare i dati in caso di modifica. Credo che sia
necessario appoggiarsi all'evento dirty.
Di piů ninzo ;-)
Sandro.

[cut]
ah, ho visto la mail, ora ci do un occhio.
Ciao