Newsgroup: it.comp.appl.access
Titolo: Controllo duplicati su sottomaschera  e msgbox

Buona sera a tutti. 
dovrei fare un controllo di un duplicato di un OD da una sottomaschera su un dato di una maschera (entrambe le maschere sono collegate tramite ID). 
cerco di spiegarmi meglio: 
1) devo gestire un invito a un corso con una serie di partecipanti
2) da una maschera "corsi", con alcuni campi desctittivi, io collego una sottomaschera con ID_corso a vari ID_partecipanti, l'utente sceglie da una casella combinata di una sottomaschera un nome di un partecipante, che poi viene immesso in una tabella "dettagli corsi" dove ci sono i partecipanti e l'id del corso da tabella "corsi", creando un join tramite id:partecipante -- id_dettagliocorsi --- id_corso. 
3) volendo fare un controllo sulla immissione della casella combinata, per evitare di invitare la stessa persona du volte, ho letto le faq di Karl e ho provato a leggere anche altro in giro per il web ma c'è qualcosa che non va.
 
ecco cosa ho scritto: 
 
Private Sub CasellaCombinata6_AfterUpdate()
Me.id_partecipante = Me.CasellaCombinata6.Column(0)
MsgBox id_partecipante
Dim myDB As Database
Dim myRS As Recordset
 
Set myDB = Application.Forms.CurrentDb()
Set myRS = myDB.OpenRecordset "SELECT Anagrafica.ID, [Dettaglio corsi].id_partecipante, Corsi.id_corso FROM Corsi INNER JOIN (Anagrafica INNER JOIN [Dettaglio corsi] ON Anagrafica.ID = [Dettaglio corsi].id_partecipante) ON Corsi.id_corso = [Dettaglio corsi].id_corso WHERE (((Corsi.id_corso)= & Me.id_corso &));"
' qui mi da errore  "previsto fine funzione..." e non va piu avanti
If (myRS.RecordCount = 0) Then
' qui poi metto un msgbox o qualcosa ... La query non ha trovato nessun record
Else
'Ci sono dei record nel risultato della query
End If
 
DoCmd.RunCommand acCmdSaveRecord
DoCmd.GoToRecord , , acNewRec
 
End Sub
 
in pratica dovrei controllare se l'inserimento è doppio nella tabella "dettaglicorsi" leggendo l'id_partecipante... dalla casellacombinata 6 
AIUTO

Private Sub CasellaCombinata6_AfterUpdate()
 
Dim myDB As Database
 
Set myRS = CurrentDb.OpenRecordset("SELECT id_partecipante FROM [Dettaglio corsi] WHERE Corsi.id_corso=" & Me.id_corso & " AND id_partecipante=" & Me.CasellaCombinata6) 
If myRS.RecordCount > 0 Then 
MsgBox "Il partecipante selezionato risulta già inserito.",vbInformation,""
Else
DoCmd.RunCommand acCmdSaveRecord
DoCmd.GoToRecord , , acNewRec
End If
End Sub 

ciao Carlo
la routine da te proposta sembra funzionare ma mi da un errore ad un ceerto punto sul blocco Else...
"else senza if"
cosa manca secondo te?  help...
comunque ti ringrazio sin d'ora, troppo gentile.
 

Per evitare errori forse è meglio usare l'evento
 
Private Sub CasellaCombinata6_BeforeUpdate(Cancel As Integer)
    If Nz(DLookup("[id_partecipante ]", "[Dettaglio corsi]", "id_corso=" & Me.id_corso & " AND id_partecipante=" & Me.CasellaCombinata6),0)>0 Then
        MsgBox Il partecipante selezionato risulta già inserito.",vbInformation,"" 
        Cancel = True
    End If
End Sub
 

Ciao
ne terrò conto di quanto da te scritto per un'altra maschera sempre collegata a quanto scritto. du prima di aggiornare, mi serve in una altro pezzo di questo lavoretto
Poi... grazie a te, mi sono un po sbizzarrito sui tuoi consigli e ho tirato fuori questa routine che funziona ed elimina il duplicato.
vedi se secondo te è scritta bene (funziona) ma forse un po ridondante... accetto consigli e di nuovo grazie mille
 
Private Sub CasellaCombinata6_AfterUpdate()
Me.id_partecipante = Me.CasellaCombinata6.Column(0)
MsgBox id_partecipante 'faccio fare un mini controllo sull'id ma poi la tolgo
 
Dim myDB As Database
Dim myRS As Recordset
Dim risposta
 
 
Set myRS = CurrentDb.OpenRecordset("SELECT id_partecipante FROM [Dettaglio corsi] WHERE [Dettaglio corsi].id_corso=" & Me.id_corso & " AND id_partecipante=" & Me.CasellaCombinata6)
If myRS.RecordCount > 0 Then
risposta = (MsgBox("Il partecipante selezionato risulta già inserito.", vbYesNo))
Select Case risposta
Case 6 'si
MsgBox "Ritenta"
Exit Sub
Me.CasellaCombinata6.SetFocus
Case 7 'no
MsgBox "Devi ricomnciare"
If Me.NewRecord = True Then DoCmd.RunCommand acCmdDeleteRecord
Me.Requery
 
Me.CasellaCombinata6.SetFocus
 
End Select
End If
 
End Sub