Newsgroup: it.comp.appl.access
Titolo: Set focus e sottomaschere

Ho il seguente problema.
Dopo aver normalizzato delle tabelle (creando tblAnagrafe, tblDati1,
tblDati2, etc), ho iniziato a ridisegnare tutte le maschere del Db
precedente, in modo da mantenere l'integrità relazionale (maschera +
sottomaschera).
Però, dato che Access non è molto versatile nel design, ho cominciato a
creare le maschere in questo modo.
Premetto che la maggior parte delle tblDatiX contiene un discreto numero di
campi, per cui, come anche precedentemente, devo ricorrere a delle schede.
Partendo da una maschera collegata a tblAnagrafe, ho creato delle strutture
a schede; i dati anagrafici sono presenti nella prima scheda per il loro
inserimento, e anche in alcune altre schede perchè vanno richiamati per
aggiornare in volte successive i dati contenuti nella tblDatiX del caso.
Per fare in modo che la scheda non sembrasse molto spartana (e oltretutto
perchè lo spazio sulla maschera è prezioso), dato che non è possibile creare
sottomaschere fatte a ELLE, ho riprodotto la ELLE usando più sottomaschere,
chiamandole sfrmDati1a, sfrmDati1b, etc (al max ho due subform in ogni
scheda).
1 quesito: spero che almeno questo sia possibile (inserire più subform in
una scheda), perchè altrimenti è un bel guaio
2 quesito: il problema di selezionare i campi. Nella Proprietà-Ordine di
spostamento sono presenti i vari elementi della form padre (tblAnagrafe) e
le due sottomaschere, però capita che dopo aver inserito i dati anagrafici,
mi seleziona la prima subform (es sfrmDati1a), poi però cicla solo
all'interno di questa, senza passare a sfrmDati1b, anche se presente
nell'ordine di spostamento. Allora ho provato, dall'ultimo campo di
sfrmDati1a, mediante VBA, a passare, su evento DopoAggiornamento, al subform
b ma non riesco ad ottenere nulla. Ho provato nei seguenti modi:
Forms!nomesubform!nomecontrollo.Setfocus
oppure
Me.nomesubform.SetFocus
Me.nomesubform.nomecontrollo.SetFocus
oppure
DoCmd.GoToControl "nomecontrollo"
oppure
Dim ctl As control
Set ctl = Forms!nomesubform!nomecontrollo
DoCmd.GoToControl. ctl.Name
però non ottengo alcun esito, continua a ciclare tra i campi del primo
subform inserito. Però se passo manualmente al primo campo del secondo
subform, continua normalmente. In questo caso i dati vengono comunque
salvati, no?
Grazie
Andrea

 b ma non riesco ad ottenere nulla. Ho provato nei seguenti modi:
se sei ancora convinto di utilizzare le 2 subforms vedi l'evento keyup
dell'ultimo controolo e alla pressione della freccia oppure invio o tab,
controlla che valore assuma la variabile KeyCode passata dall'evento alla
pressione dei tasti e tramite un Select Case KeyCode esegui il setfocus al
primo controllo della seconda sub form
Private Sub NomeUltimoControllo_KeyUp (KeyCode as integer, Shift as integer)
debug.print KeyCode 'e vedi che valore assumo NumTab, NumFrecciaDX, NumInvio
Select case KeyCode
Case NumTab, NumFrecciaDX, NumInvio
    Me.nomesubform.SetFocus
    Me.nomesubform.Form.nomecontrollo.SetFocus
Case else
End select
end sub
Ciao omnitow


inoltre puoi pensare di modificare all'esigenza l'origine dati della
subform.
Se intendi quello che ho capito io, non è possibile. Infatti gli unici dati
comuni nelle varie schede sono i dati anagrafici e qualche richiamo a dati
inseriti in una schede precedente (es. il nr di protocollo della pratica),
poi ogni scheda permette l'inserimento di dati nuovi che integrano quelli
inseriti precedentemente. Per forza di cose, i documenti generati da questa
maschera vengono compilati ed emessi in giorni diversi.
 Mi rendo conto che capire esattamente da un messaggio cosa una persona
intenda fare e/o ottenere è un pò difficile, ma se qualcuno volesse,  potrei
inviargli via E-mail il Db in oggetto (solo la maschera e le tabelle
relative a questo problema), compattato non occupa molto.
Andrea


Ti dico questo perchè in precedenza io ho fatto praticamente la stessa cosa,
in 15 schede ho inserito 15 subforms occupando in media ben 15 mb di
memoria, nel mio caso identiche che caricavano diversi gruppi di record
della stessa tabella, non sono arrivato alla subform a L però :-), e il
risultato è che il db si impallava dicendo bookmark non valido o altri
strani errori oppure si chiudeva e tanti saluti, ho risolto appunto
utilizzando un'unica sub form modificando l'origine dati in runtime.
Ora devi vedere un po' tu come procedere tieni presente che continuando su
questa strada puoi andare in contro a problemi poco piacevoli per l'utente
che dovrà utilizzare il db
Ciao omnitow

>utilizzando un'unica sub form modificando l'origine dati in runtime.
Lungi da me l'idea di insegnare il mestiere a chi ne sa sicuramente più di
me (non è che ci voglia molto).
Potresti spiegarmi un pò come fare (io non mastico granchè il VBA,
praticamente sono sdentato), magari quello che vuoi suggeririmi funzionerà
sicuramente in maniera più versatile e sicura
Andrea


non potrei andare oltre a quello che ti ho detto, quello che volevo
suggerirti è di pensare ad un'altra soluzione cosa che sicuramente io non
posso fare al posto tuo, non conoscendo quello che vuoi fare, a meno che tu
non mi voglia assumere come tuo sviluppatore personale... (che bello sarebbe
il mio primo incarico da professionista :-)))))
Ciao, omnitow

end sub
non ottengo niente, solo il messaggio"impossibile trovare il metodo o il
membro dei dati"; il [nomesubform] che uso (cioè la seconda subform a cui
dovrebbe accedere) è sfrm186b; ho controllato e ricontrollato (casomai
sbaglio a scrivere il nome), ma non cambia niente. A cosa potrebbe essere
dovuto?
Andrea


probabilmente, una mia svista, la routine è inserita nel modulo del form
figlio (l'istanza del form all'interno del suform per capirci) quindi:
Private Sub NomeUltimoControllo_KeyUp (KeyCode as integer, Shift as integer)
'debug.print KeyCode 'e vedi che valore assume NumTab, NumFrecciaDX,
NumInvio
    Select case KeyCode
    Case NumTab, NumFrecciaDX, NumInvio
        With Me.Parent.nomesubform
                'ti riferisci al controllo subform del ù
                '2° form figlio che ovviamente risiede
                'nel form padre
                '(parent del 1° form figlio che in questo
                'contesto corrisponde a Me)
            .SetFocus
            .Form.nomecontrollo.SetFocus
        End With
    Case else
    End select
end sub
Ciao, omnitow