Newsgroup: it.comp.appl.access
Titolo: da subform a mainform per nuovo record

ciao a tutti
La situazione è questa: maschera di inserimento dati
Maschera principale "MTolleranze1" con all'interno
Sottomaschera "MTolleranze2" con all'interno
Sottomaschera "Tolleranze3"
L'ultima è in visualizzazione maschere continue e sull'ultimo campo "val" 
ho inserito il seguente codice vba:
Private Sub Val_AfterUpdate()
If MsgBox("VUOI INSERIRE ANCORA UN VALORE ?", vbYesNo, "....COSA VUOI 
FARE?") = vbNo Then
DoCmd.GoToRecord acForm, "MTolleranze1", acNewRec
End If
End Sub
che, ovviamente, non funziona perchè io di vba ci capisco ben 
poco.....almeno ci ho provato...
Vorrei che se la scelta è "SI" io possa continuare ad inserire dati 
partendo dal primo campo della sottomaschera "Tolleranza3" (un nuovo 
record, e questo funziona) mentre se scelgo NO vorrei che il focus si 
spostasse sul primo campo della maschera principale "cat" come nuovo 
record.
Come devo modificare il codice?
Grazie a tutti

scusate....mi correggo.....
Se scelgo "SI" io posso continuare ad inserire dati partendo dal primo 
campo della subform "Tolleranza3" (un nuovo 
record, e questo funziona) mentre se scelgo NO voglio che compaia un nuovo 
msgbox che mi possa dare la possibilità di spostare il focus sul primo 
campo "sp" della sottomaschera "MTolleranze2" oppure sul primo campo "cat" 
della mainform "MTolleranze1" e per entrambe le scelte come nuovo record.


 ha scritto nel messaggio 
news:f8nggp$5d7$1...@carabinieri.cs.interbusiness.it...

[risposta]
Mammamia! Tutti 'sti msgbox per inserire un record? Mah!
Comunque, per spostare il focus su un controllo puoi fare:
(da MTolleranze3 a MTolleranze2)
Parent!sp.SetFocus (oppure) Forms!MTolleranze2!sp.SetFocus
(da MTolleranze3 a MTolleranze1)
Forms!MTolleranze1!cat.SetFocus
Ciao.
-- 
Sergio MAZZA 

ciao e grazie per la risposta
Non riesco comunque ad ottenere ciò che vorrei
Molto probabilmente non sò inserire i msgbox nel modo giusto (io di vba 
non me ne intendo)
Riassumendo:
If MsgBox("VUOI INSERIRE ANCORA UN VALORE ?", vbYesNo, "....COSA VUOI 
FARE?") = vbYes Then
Me.Campo.SetFocus      ------- e funziona solo che il focus si sposta sul 
"Campo" ma non per un nuovo record
Poi vorrei che se invece scelgo NO mi comparisse un nuovo msgbox tipo:
 ("VUOI INSERIRE UN NUOVO SPESSORE?", vbYesNo, "....COSA VUOI FARE?") = 
vbYes Then
Forms!MTolleranze2!sp.SetFocus  ------ ho provato ad inserire Else prima 
del nuovo msgbox ma non funziona......come devo concatenare i due msgbox?
Se scelgo NO allora ritengo che sia valido scrivere
Forms!MTolleranze1!cat.SetFocus
Come devo "legare" il tutto?
Ciao e grazie per la risposta

 ha scritto nel messaggio 
news:f8s3l2$fcp$1...@balena.cs.interbusiness.it...

[risposta]
Io non ho capito ancora come dev'essere la sequenza dei msgbox.
Comunque per intercettare lo spostamento del cursore sul nuovo record deve 
gestire l'evento "su corrente" della form; qui inserisci il codice VBA:
'---
If Me.newRecord Then
    If MsgBox("Vuoi inserire un nuovo record?", vbInformation + vbYesNo) = 
vbNo Then
        ...se nuovo record e risponde no...
    Else
        ...se nuovo record e risponde sì...
    End If
Else
        ...se record già presente risponde sì...
End If
'---
Spero di aver capito...
Ciao.
-- 
Sergio MAZZA 

ciao, grazie per la risposta. Effettivamente credo di non essermi spiegato 
bene......
Ricominciamo..
La mainform si chiama "MTolleranze1" e contiene diversi campi - quello che 
a noi interessa si chiama "Cat" - maschera singola.
La subform contenuta in questa mainform si chiama "Mtolleranze2" e 
contiene anch'essa diversi campi - quello che a noi interessa si chiama 
"Sp" - maschera singola.
All'interno di questa subform c'è un'altra subform denominata 
"Tolleranze3" con tre campi : "Campo", "Um" e "Val". - maschera continua
Quello che vorrei fare è questo:
Quando ho inserito il valore nel campo "val" vorrei che comparisse un 
msgbox che mi chiede: "vuoi inserire un nuovo valore di tolleranza?",
se SI il cursore si deve spostare sul campo "Campo" per poter inserire un 
nuovo record,
se NO vorrei che mi comparisse un nuovo msgbox che mi chiede:"vuoi 
inserire un nuovo valore di spessore?",
se SI il cursore si deve spostare sul campo "Sp" per poter inserire un 
nuovo record
se NO il cursore si deve spostare sul campo "Cat"
Preferirei che il codice fosse inserito sull'evento 'dopo aggiornamento' 
della subform "Tolleranze3"
Io non riesco a concatenare i msgbox come si deve nel codice.....
Spero di essere stato un pò più chiaro
grazie, ciao

 ha scritto nel messaggio 
news:f8shbc$p02$1...@balena.cs.interbusiness.it...
ciao, grazie per la risposta. Effettivamente credo di non essermi spiegato
bene......
Ricominciamo..
La mainform si chiama "MTolleranze1" e contiene diversi campi - quello che
a noi interessa si chiama "Cat" - maschera singola.
La subform contenuta in questa mainform si chiama "Mtolleranze2" e
contiene anch'essa diversi campi - quello che a noi interessa si chiama
"Sp" - maschera singola.
All'interno di questa subform c'č un'altra subform denominata
"Tolleranze3" con tre campi : "Campo", "Um" e "Val". - maschera continua
Quello che vorrei fare č questo:
Quando ho inserito il valore nel campo "val" vorrei che comparisse un
msgbox che mi chiede: "vuoi inserire un nuovo valore di tolleranza?",
se SI il cursore si deve spostare sul campo "Campo" per poter inserire un
nuovo record,
se NO vorrei che mi comparisse un nuovo msgbox che mi chiede:"vuoi
inserire un nuovo valore di spessore?",
se SI il cursore si deve spostare sul campo "Sp" per poter inserire un
nuovo record
se NO il cursore si deve spostare sul campo "Cat"
Preferirei che il codice fosse inserito sull'evento 'dopo aggiornamento'
della subform "Tolleranze3"
Io non riesco a concatenare i msgbox come si deve nel codice.....
Spero di essere stato un pň piů chiaro
grazie, ciao
[risposta]
Ricapitolando:
[MTolleranze1] con controllo (non campo): Cat
-- [Mtolleranze2] con controllo (non campo): Sp
--- [Tolleranze3] con controlli (non campi): Campo, Um e Val.
Quindi gestendo l'evento della form "AfterUpdate" inserisci:
'---
if not isnull(me!val) then
    select case msgbox("vuoi inserire un nuovo valore di 
tolleranza?",vbinformation+vbyesno)
        case vbyes
            docmd.gotorecord acDataForm, 
me.name
, acnewrec
            me!campo.setfocus
        case vbno
            select case msgbox("vuoi inserire un nuovo valore di 
spessore?",vbinformation+vbyesno)
                case vbyes
                    parent!sp
                    docmd.gotorecord acDataForm, 
parent.name
, acnewrec
                    parent!sp
                case vbno
                    forms!MTolleranze1!cat.setfocus
                case else
            end select
        case else
    end select
end if
'---
Ciao.
-- 
Sergio MAZZA 

Ciao
Ti ringrazio veramente tanto per l'aiuto che mi stai dando.
Ho inserito il codice sull'evento 'dopo aggiornamento' della subform 
"Tolleranze3" però già durante la compilazione del codice quando scrivo 
'parent ! sp'
questo diventa di colore rosso e compare il messaggio che dice:"errore di 
compilazione, previsto:=".
Ho comunque compilato tutto il codice e poi ho provato il tutto ma non 
funziona a dovere.
Praticamente se dopo il primo msgbox rispondo "si" mi esce il seguente 
messaggio:"errore di run time 2489, l'oggetto 'Tolleranze3' non è aperto".
Se dopo il primo msgbox rispondo "no" mi compare esattamente il secondo 
msgbox.
Se a questo msgbox rispondo "si" mi compare il seguente messaggio:"errore 
di run time 2489, l'oggetto 'MTolleranze2' non è aperto".
Se a questo msgbox rispondo "no" il cursore si sposta sul controllo "Cat" 
ma non come nuovo record, cioè pronto per un nuovo inserimento.
Ho provato a mettere parent = sp oppure ad eliminarli ma non cambia nulla 
o compaiono altri messaggi di errore.
Ti chiedo un ultimo sforzo: come va modificato il codice?
N.b: ho provato anche a mettere il codice sull'evento dopo aggiornamento 
del controllo "Val" ma non cambia il risultato.
Grazie tantissimo...
Ciao

 ha scritto nel messaggio 
news:f8un41$hkt$1...@fata.cs.interbusiness.it...

[risposta]
Calma, calma.
Prima di tutto rispetta la sintassi delle istruzioni; io non ho messo nessun 
spazio in 'parent ! sp'.
Poi verifichiamo il resto...
Ciao.
-- 
Sergio MAZZA 

ciao, scusa lo spazio l'ho inserito io nel post ma non nel codice.
Ho anche copia-incollato l'intero codice ma dopo aver  inserito un dato 
nel controllo "val" della subform "Tolleranze3" compare il 
messaggio:"errore di compilazione: errore di sintassi" indicando il 
parent!sp.
Grazie di nuovo, ciao

 ha scritto nel messaggio 
news:f8us24$in6$1...@balena.cs.interbusiness.it...

Scusa tu; non avevo completato l'istruzione; manca il setfocus:
parent!sp.setfocus
Ciao.
-- 
Sergio MAZZA 

ciao, se riesci a rispondermi ok, altrimenti buone ferie: domani parto 
anch'io.
Ora il codice è ok per quanto riguarda il parent!sp.setfocus però rimane 
il fatto che quando inserisco il valore nel campo "val" e rispondo "si" al 
msgbox mi compare l'avviso: "l'oggetto'Tolleranze3' non è aperto" e 
facendo il debug mi sottolinea in giallo DoCmd.GoToRecord acDataForm, 
Me.Name, acNewRec
Qualche suggerimento?
Ciao e buone ferie ancora..... 

 ha scritto nel messaggio 
news:f8v6lf$o3c$1...@fata.cs.interbusiness.it...

[risposta]
Ma la subForm si chiama così? Io ho copiato i nomi dal tuo messaggio...
Ciao.
-- 
Sergio MAZZA 

Ciao, si la subform si chiama Tolleranze3 e lo stesso messaggio lo dà 
anche quando si dovrebbe spostare sul controllo sp della subform 
MTolleranze2 (in questo caso, ovviamente, il messaggio è:" l'oggetto 
'Mtolleranze2 non è aperto ".
Bo!!
Ciao e buone ferie.....spegni