Evento NotInList

giovedì 14 novembre 2013 - 22.47
Tag Elenco Tags  Access (.mdb)

thetmd Profilo | Newbie

Ciao,
scusate ma non riesco a capire il funzionamento dell'evento notinlist che ho associato ad una combobox
1) ho una tabella che contiene i nomi di giochi
2) un'altra tabella che tra i campi ha il nome del gioco (preso dalla tabella percedente)

Private Sub Nome_NotInList(NewData As String, Response As Integer)
Dim RS As Recordset
Dim IDtblNomi As Integer
Dim Controllo As Control
Dim strSQL

Set Controllo = Me!Nome
Controllo.Undo
If MsgBox("Valore non in elenco. Aggiungerlo?", vbOKCancel) = vbOK Then
'DoCmd.RunCommand acCmdUndo

'***** PARTE DI CODICE CHE HO RECUPERATO OGGI, IN SOSTITUZIONE DELL'USO DEL RECORDSET
strSQL = "INSERT INTO tblNomi([Nome]) " & _
"VALUES ('" & NewData & "');"
DoCmd.SetWarnings False
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True
Response = acDataErrAdded


'***** CODICE ORIGINALE PER L'AGGIUNTA DEL NUOVO RECORD
' Set RS = CurrentDb.OpenRecordset("tblNomi")
' With RS
' .AddNew
' !Nome = NewData
' IDtblNomi = !IDtblNomi
' .Update
' End With
' If Asc(Left(NewData, 1)) < 65 Then
' CartellaAppartenenzaGioco = "#"
' Else
' CartellaAppartenenzaGioco = UCase(Left(NewData, 1))
' End If
' Response = acDataErrAdded
Else
Response = acDataErrContinue
End If

End Sub

Quello sopra riportato è il codice che ho scritto utilizzando parti prese da internet....funziona tutto alla meravigli....quando inserisco una voce che non è in elenco questa viene aggiunta alla tabella di origine dati della combobox (tabella dei nomi).
Nella seconda tabella compare il nuovo record che ha il nome appena inserito, oltre agli altri dati.
Quello che non capisco è: come mai se cancello un record dalla seconda tabella (che di fatto riceve i dati), mi sparisce anche il record dalla tabella nomi (che di fatto fornisce i dati)?

Proprio non capisco
Se poteste darmi qualche spiegazione vi ringrazio
Pierpaolo

CorriCorrado Profilo | Junior Member

Ciao,
direi che hai un problema con l'integrità referenziale.

>1) ho una tabella che contiene i nomi di giochi
>2) un'altra tabella che tra i campi ha il nome del gioco (preso
>dalla tabella percedente)
La tabella 1 è l'origine del campo per la tabella 2, ossia la tabella 2 ha una chiave esterna NomeGioco al campo ID della tabella1

>Quello che non capisco è: come mai se cancello un record dalla
>seconda tabella (che di fatto riceve i dati), mi sparisce anche
>il record dalla tabella nomi (che di fatto fornisce i dati)?
La relazione che esiste tra le due tabelle consente di evitare ridondanza nei dati, alleggerendo anche il DB, facilitando il data entry. Se cancelli un record utlizzato come chiave esterna di una combobox, è naturale che questa informazione sparisca?

La risposta è no, almeno che tu non voglia consentire l'aggiornamento a cascata. Dovresti strutturare il DB in modo tale che un'operazione di cancellazione di un record di tabella 1 non sia consentito se vi sono chiave esterne ad esso associato.

Ciao
Corrado

thetmd Profilo | Newbie

Grazie Corrado,
la tua risposta è identica a quanto ho avuto modo di leggere in altro forum
Non avendo avuto risposta alla domanda ho continuato a cercare e chiedere e temo, senza cattiveria, di aver contravvenuto alla regola di non fare la stessa domanda su forum differenti per non far sprecare tempo.

Ti ringrazio per il tempo che mi hai dedicato, e per la risposta comunque corretta

Pierpaolo
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5