Newsgroup: it.comp.appl.access
Titolo: Inserimento dati in sottomaschera

Ho questo problema:
su un bancale metto delle scatole, ogni bancale è numerato ed ogni
scatola ha un codice seriale numerico entrambi sono codici a barre che
leggo tranquillamente con un lettore ad emulazione di tastiera.
Sia il bancale sia gli scatoloni sono già stati registrati su due
tabelle "Bancali" chiave p. "ID_bancale" e "Materiale" chiave p.
"ID_materiale" queste tabelle sono in relazione uno - molti.
Io vorrei creare un procedura in cui lego, leggendo il codice sulle
scatole con il lettore codbar, le scatole messe sul bancale con il
numero di quel bancale (sostanzialmente devo inserire il numero del
bancale nel campo "Materiale.bancale" leggendo però il codice della
scatola).
Ho creato una maschera che visualizza il bancale (e le sue
caratteristiche) ed una sottomaschera legata alla tabella "Materiale"
che visualizza le scatole messe su quel bancale.
Apro la maschera, seleziono il bancale, la sottomaschera mi visualizza
le scatole già inserite sul bancale (se ce ne sono); se seleziono
nuovo record nella sottomaschera ed inserisco il codice della scatola
appena aggiunta al bancale, mi da errore di duplicazione record, io in
realtà non voglio duplicare il record (ricordo che la scatola è già
stata registrata nella tabella), vorrei che prendesse quel record ed
inserisse nel campo "Materiale.bancale" il numero di quel bancale.
Ho provato con una scatola non inserita in tabella, in quel caso la
inserisce e mi mette nel campo "Materiale.bancale" il numero corretto!
Qualcuno sa aiutarmi? come posso fare?
grazie

 corretto!
Se ti ho capito bene puoi crearti una casella di testo non associata
(p.e. "txtScatNuova") nella maschera principale. Posiziona il cursore
in questa casella e leggi il codice della scatola.
Codice VBA del evento "Dopo Aggiornamento" della casella:
' aggiornare il record nella tabella Materiale con l'id del bancale
Currentdb.Execute _
"UPDATE Materiale SET bancale = " & Me!ID_bancale & _
" WHERE ID_materiale = " & Me!txtScatNuova
' togliere il valore dalla casella
Me!txtScatNuova = Null
' aggiornare la sottomaschera per mostrare il record di sopra
Me!NomeDellaSottomascheraConIlMateriale.Requery
Certo devi ancora aggiungere la gestione di errore.
-- 
HTH
Karl
*********
Access FAQ: 
www.donkarl.com/it
 

 Access FAQ:
www.donkarl.com/it-
 Nascondi testo citato
Ho fatto come hai detto e funziona!
rimane un piccolo problema, dopo il primo inserimento nella casella di
testo, sia con il lettore di codici a barre che manualmente, la
maschera principale si sposta sul bancale successivo, quindi se
inserisco più codici uno di seguito all'altro, il secondo codice  lo
scrive su una casella di testo che non centra niente, devo ogni volta
tornare al computer, ritornare al bancale precedente e spostare il
cursore sulla casella di inserimento. Spero di essere stato abbastanza
chiaro...
Ho provato a mettere dopo l'aggiornamento della sottomaschera il
seguente codice:
Me!txt_ScatNuova.SetFocus
almeno per tenere la stessa casella di inserimento selezionata ma non
funziona neanche così
grazie dell'aiuto
Luca

 ...
Ci sono alcuni soluzioni. P.e.
Puoi mettere la casella in una sezione dov'� l'unico controllo
che puo avere il focus, p.e. l'intestazione o pi� della maschera
principale o anche della sottomaschera o di una sottomaschera
non associata dov'� persino l'unico controllo. Forse l'ultimo
metodo sarebbe il pi� sicuro, dipende dalle tue circostanze.


"UPDATE Materiale SET bancale = " & Me!ID_bancale & _
ho messo:
"UPDATE Materiale SET bancale = " & Form_NomeDellaMascheraPrincipale!
ID_bancale & _
per recuperare il codice del bancale da immettere. Va bene o c'è un
modo migliore per recuperare il dato?
Comunque funziona perfettamente!!
grazie infinite per i consigli e la pazienza
Luca

 ...
Hai usato la sintassi per la classe. Pi� frequente �:
"UPDATE Materiale SET bancale = " & _
Forms!NomeDellaMascheraPrincipale!ID_bancale
o da una sottomaschera anche
"UPDATE Materiale SET bancale = " & Me.Parent!ID_bancale
