Newsgroup: it.comp.appl.access
Titolo: assegnazione di merende a bambini

 cboMerenda.
Siete stati molto gentili e ringrazio entrambi, entrambe le vs.
soluzioni funzionano!
Siccome quella SQL la capisco di piu', ne ho aggiunta una simile di
UPDATE che cambia lo status della merenda i-esima da libera a assegnata,
seguita da un aggiornamento della maschera (menuitem ecc.) che la fa
sparire dall'elenco delle merende disponibili.
restano due problemi: 
- al piede della maschera c'e' il contatore di record associato alla
tabella TBLLNK che sto popolando col bottone aggiorna. mentre la tabella
viene effettivamente popolata, detto contatore non si aggiorna. Ho
provato a mettere un DoCmd.Requery, facendo il requery il contatore si
aggiornava, ma poi ogni operazione era eseguita una seconda volta e gli
elementi della TBLLNK erano tutti doppi. Come posso aggiornarlo? 
- ho messo un bottone che mi permette di esaminare la tabella TBLLNK che
sto popolando. Dopo ogni pressione del pulsante aggiorna, in effetti ci
trovo dentro quello che mi aspetto. Quando pero' esco dalla maschera,
l'ultima assegnazione viene fatta una seconda volta e me la trovo
doppia, non capisco perche'. Come mai?
Grazie!
Ciao
B.

 B.
Scusa ma non ho capito molto bene il tuo problema.
Per ogni bambino assegni la merenda solo una volta, o il bambino può avere più merende?
Se è assegnata una sola volta (con possibilità di cambiarla) secondo me ti conviene usare il codice
seguente:
Private Sub assegna_Click ()
Dim db as database
Dim rs as recordset
Set db = current db   'se la tabella TBLLNK è nello stesso db della maschera di assegnazione!
Set rs = db.openrecordset ("SELECT * FROM [TBLLNK] WHERE BambinoID = "  _
                                    & Me.ControlloconBambinoID)
'poiché se il bambino non è nella tabella
If rs.EOF then
'viene inserito come nuovo record
    rs.AddNew
    rs!BambinoID = Me.ControlloconBambinoID
    rs!MerendaID = Me.ControlloconMerendaID
    rs.Update
Else
'altrimenti viene trovato il bambino selezionato nella maschera e già inserito in TBLLNK
    rs.Edit
'e viene associata la nuova merenda
    rs!MerendaID = Me.ControlloconMerendaID
    rs.Update
End If
rs.close: Set rs = Nothing
db.close: Set db = Nothing
End Sub
In ogni caso ti conviene a parer mio nella tabella TBLLNK assegnare all'IDBambino una chiave
primaria.
In modo tale eviti duplicati unitili.
Davide

 Per ogni bambino assegni la merenda solo una volta, o il bambino puň avere piů merende?
per adesso a un bambino diverso assegno una merenda diversa: al bambino
10 assegno la merenda 123, in tabella trovo
10   	123
0	0
Poi seleziono il bambino 20 e la merenda 456, clicco assegna e in
tabella trovo:
10   	123
20   	234 
0	0
Poi non tocco altro, chiudo la form e vado a esaminare direttamente la
tabella. Ci trovo:
10   	123
20   	234 
20	234
0	0
E' come se chiudendo la maschera ripetesse il comando di aggiunta riga,
e lo fa anche con il tuo codice. 
Se aggiungo 10 diverse merende a 10 diversi bambini sono tutti
individuali, quando esco, mi trovo UNDICI righe, di cui l'undicesima
aggiunta da access e uguale alla decima.
Il problema si verifica durante la chiusura della maschera, infatti se
nella tabella destinazione metto il vincolo "Duplicati non ammessi", al
momento di chiudere mi dice che una transazione non e' stata fatta
perche' viola il vincolo del'unicita'. 
Quindi lui raddoppia l'ultima assegnazione al momento in cui chiudo la
maschera, l'impressione e' che il comando resti in una specie di buffer
di azioni, quando chiudo l'oggetto il buffer viene flushato e l'ultimo
comando fa una specie di commit e risulta doppio. 
Sto facendo mille prove, non riesco a individuare il settaggio che causa
qs. comportamento indesiderato.
Ciao

 perche' viola il vincolo del'unicita'.
[CUT]
M M M M H H H H H ! ? #
Non so che dirti se non:
- Controlla tutti gli eventi della maschera e dei controlli, ci sarà pur scritto da qualche parte!
- Controlla eventuali controlli calcolati, tipo il tuo contatore.
Se poi non trovi niente, prova a descrivere meglio i controlli (TUTTI) che si trovano nel form.
Davide