Newsgroup: it.comp.appl.access
Titolo: Forms - DoCmd.GoToRecord

Ho una tabella con chiave primaria alfanumerica. La relativa maschera 
filtra, a seconda della selezione operata dall'utente, una parte dei record 
presenti in tabella. Come dire:
 TABELLA
 Chiave Primaria
 1-Paperino
 1-Pippo
 2-Gastone
 2-Pippo
 3-Gastone
 3-Paperino
 3-Pippo
Selezionando "Pippo" la maschera filtrerà 3 records.
 1-Pippo (pos. 2)
 2-Pippo (pos. 4)
 3-Pippo (pos. 7)
Ora, in una TextBox che espone il numero del record corrente ho la seguente 
routine:
Private Sub Testo92_AfterUpdate()
On Error GoTo Err_Comando92_Click
    Dim RecCercato As Long
    RecCercato = Me.Testo92.Value
    DoCmd.GoToRecord acDataForm, "TABELLA", acGoTo, RecCercato
Exit_Comando92_Click:
    Exit Sub
Err_Comando92_Click:
    MsgBox "Record non appartenente all'elenco caricato.", vbExclamation
    Me.Testo92.Value = RecordCorrente 'variabile pubblica
                                                              'determinata 
dall'evento Form_Current
    Resume Exit_Comando92_Click
End Sub
La procedura vorrebbe lavorare come la lavora TextBox dei pulsanti 
spostamento e, sin che la maschera espone "tutti" i record presenti in 
tabella, nessun problema.
Quando, però, la form filtra solo alcuni dei record presenti le cose si 
complicano. Anzitutto, la sequenza numerica è ovviamente discontinua 
(nell'esempio fatto sopra il primo record avrà il n. 2 e il secondo il n. 4 
...). E questo potrebbe anche andarmi bene.
Meno bene è come la routine AfterUpdate reagisce all'inserimento di un nuovo 
criterio di ricerca. Nell'esempio, per dire, può accadere che se sono sul 
primo record (contrassegnato dal n. 2) e digito 3 tutto funga (ossia con 
generazione e gestione dell'errore), ma se mi sposto sul secondo rec (n.4) e 
digito 5, capita che Access se ne vada al record 7. Sembra, in sostanza, che 
pur di soddisfare il criterio di ricerca, Access usi un'indicizzazione 
interna. E questo, se vero e per quanto intederei fare io, è seccante :)
E' possibile evitare questo tipo di problema in modo che nella ricerca 
access tenga conto della sola chiave primaria?
Grazie in anticipo.

eSQueL ha scritto:

Forse non ho capito bene il problema...!
Se vuoi sapere il N° di record corrente di un Recordset hai 2 modi:
[AbsolutePosition] proprietà nel tuo caso da ricercare nell'oggetto
RecordsetClone
[CurrentPosition] sull'oggetto Form.
Per riferirti invece a spostamenti o non allineamenti tra il
RecordsetClone ed il Recordset
di Form occorre fare riferimento al Bookmark.
Ora non si capisce cosa usi tu per prendere quei valori discontinui di
cui parli, visto che, a mio avviso se il RS originale contiene 10
Records quando lo filtri ne contiene 3 è corretto
che la posizione rispetti il Numero di Records presenti, quindi 1-2-3 e
non 2-4-8.... cosa diversa per il Bookmark invece, ma quì devi dare
qualche spiegazione più chiara...
@Alex

Forse non ho capito bene il problema...!
Se vuoi sapere il N° di record corrente di un Recordset hai 2 modi:
[AbsolutePosition] proprietà nel tuo caso da ricercare nell'oggetto
RecordsetClone
[CurrentPosition] sull'oggetto Form.
Per riferirti invece a spostamenti o non allineamenti tra il
RecordsetClone ed il Recordset
di Form occorre fare riferimento al Bookmark.
Ora non si capisce cosa usi tu per prendere quei valori discontinui di
cui parli, visto che, a mio avviso se il RS originale contiene 10
Records quando lo filtri ne contiene 3 è corretto
che la posizione rispetti il Numero di Records presenti, quindi 1-2-3 e
non 2-4-8.... cosa diversa per il Bookmark invece, ma quì devi dare
qualche spiegazione più chiara...
@Alex
________________________
Beh, ti ringrazio :)
In effetti a seguito del tuo post ho scovato l'errore. Si trattava di una 
SELECT errata che restituiva l'intero recordset invece dei dati filtrati. Da 
qui il finto probema.
Adesso la posizione rispetta il numero dei records presenti.
Ciao