Newsgroup: it.comp.appl.access
Titolo: Scroll automatico di una subform?

Ciao a tutti
Ho una form con un campo non associato, nel quale inserisco un codice
Ho una subForm con una visualizzazione dei dati provenienti da una query
su una tabella
In questa subform ho 11 righe visualizzabili
io vorrei che il numero che inserisco nel campo mi andasse a far
scrollare la subform fino a visualizzarmi la riga che ha un campo uguale
al valore che ho inserito, ESATTAMENTE AL CENTRO DELLA SUB.
Esempio
tabella Concorrenti
ID atleta
numgara
cognome
nome
tempo
query su tabella concorrenti che ordina il tempo crescente
form con campo dove inserisco il nomero di gara e mi scrolla la
classifica (subform) mostrandomi (magari evidenziato) al centro la riga
del concorrente che ho appena inserito nel campo sopra.
Si puň fare?
Grazie in anticipo per l'aiuto
Ciao
Marcello
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 al valore che ho inserito, ESATTAMENTE AL CENTRO DELLA SUB.
purtroppo non esiste alcun controllo sul "dove" una certa riga sia
visualizzata (ci ho provato un sacco di volte, ma non ho combinato nulla)
Perņ puoi assicurarti che una data riga VENGA visualizzata nella subform
(potrebbe essere la prima, in mezzo, l'ultima....) ma almeno sai che si vede
:-)
Max

 ha scritto nel messaggio
news:a9p8tm$u0d$1...@newsreader.mailgate.org...

Se il lavoro vale la candela...
Se conosco il numero di righe della subform...
Tramite 'recordsetclone' mi posiziono sul record voluto.
Mi accerto che ci siano record sufficienti prima e dopo.
Vado indietro (moveprevious) di metą del numero di righe nella sottomaschera
Vado avanti del numero totale di righe della sottomaschera
Ritorno al mio record
... il tutto coperto da 'EchoOff'
--
Alberto

 ... il tutto coperto da 'EchoOff'
Avevo pensato una cosa del genere... ma non ho mai osato provare a
realizzarla :-))
Però avevo fatto cose similari, ed avevo visto che alle volte il
moveprevious e simili non funzionano a dovere (il record selezionato non è
visualizzato)
La proprietà che funzia meglio, nella mia esperienza, è SelTop
Ciao, Max

 Ciao, Max
Non l'avevo mai usata... ora sono andato a vedere sulla guida e ho fatto
delle prove ed effettivamente lavora molto meglio. Grazie per la dritta.
Ciao
--
Alberto

Riporto il messaggio di Marcello Gabrielli e la mia risposta
**************************
Ciao Alberto
Sono marcello gabrielli ed ho postato sul forum di access il topic sullo
scroll automatico della subform. Non sono molto bravo nella
programmazione di access, quindi ti chiederei una mano per capire come
funziona la vostra soluzione.
Mi potresti mandare un piccolo esempio (db access con una tabella ed una
maschera), per capire come può funzionare?
Grazie in anticipo
Marcello
**************************
Prima di risponderti ti riporto un brano dal Manifesto del newsgroup, che
puoi trovare, nella versione completa, su 
www.sitocomune.com
**************************
Alcune richieste o comportamenti *sicuramente* non graditi in questo ng:
[CUT]
- richiedere risposte personalizzate al proprio indirizzo e-mail e' contro
lo spirito di questo ng in cui presuppone che tutte le domande e tutte le
risposte debbano essere visibili perche' potrebbero interessare a tutti;
- contattare direttamente altri frequentatori del ng inviando richieste di
informazioni via e-mail, magari a quelli che sembrano piu' bravi e piu'
disponibili di tutti ad aiutare gli altri;
[CUT]
- chiedere l'invio di programmi gia' fatti con la scusa di dover imparare,
vedere, bla bla bla;
**************************
Ecco, io non sono sicuramente 'più bravo' ma per il resto sottoscrivo tutto
in pieno. Tra l'altro, alla soluzione che ti sto proponendo ci sono potuto
arrivare solo grazie ad un suggerimento di MegaMax (in risposta ad un mio
balengo suggerimento/provocazione inserito nel thread che avevi aperto tu).
Quindi vedi l'utilità di restare nel NG ...
Allora...
A fronte dell'evento della tua maschera che giudicherai più opportuno (io
direi su corrente) inserisci il seguente codice:
Private Sub Form_Current()
    CentraRiga
End Sub
Nello stesso modulo in cui hai scritto il codice inserisci anche quest'altra
routine:
Public Sub CentraRiga()
Dim lngSel As Long
Dim lngPos As Long
Dim lngNrg as Long
  lngPos = Me.Recordset.AbsolutePosition
   'Assegno alla variabile lngPos il numero
   'di posizione del record corrente
  lngNrg = 11
   'Assegno alla variabile lngNrg il numero
   'di righe che stanno nella maschera
   'Questo valore lo dovrai impostare con
   'il tuo effettivo numero di righe
  lngSel = lngPos - Int((lngNrg - 1) / 2)
  If lngSel < 1 Then lngSel = 1
   'Assegno a lngSel il numero di posizione
   'del record che verrà visualizzato nella
   'prima riga della maschera. Se non ci sono
   'record sufficienti da visualizzare prima
   'del record corrente scelgo di iniziare
   'dal numero 1
  Application.Echo False
   'Disattivo l'aggiornamento del
   'contenuto dello schermo
  Me.SelTop = lngSel
   'Con questo comando i record vengono
   'effettivamente visualizzati a partire
   'dalla posizione voluta
  Me.Recordset.AbsolutePosition = lngPos
   'Reimposto come record corrente quello
   'che era tale all'inizio della routine
  Application.Echo True
   'Riattivo l'aggiornamento del
   'contenuto dello schermo
End Sub
Non conosco il tuo livello... se hai difficoltà fatti vivo. Fammi sapere
come va. Forse c'è qualche errore perché ho riadattato del mio codice, che è
in un .mdb che uso e quindi non posso provarlo...
Ciao
--
Alberto