Newsgroup: it.comp.appl.access
Titolo: errore su sottomaschera

qui sotto riporto il codice scritto sul mio pulsante che fa delle
operazioni sui record di una sottomashera collegata tramite le chiave
primaria e riporta i risultati su vari listbox.
Attualmente il codice funziona in quanto dopo che con il debug ho
controllato i valori di absolute position della variabile "rs" ho
aggiunto le righe
app = rs.AbsolutePosition
rs.AbsolutePosition = app
La domanda è questa:  come mai durante l'inserimento dei valori sui
vari listbox il valore absoluteposition di rs passava a -1 e quindi mi
generava l'errore???
GRazie per la collaborazione segue il codice qui sotto.
Private Sub Comando49_Click()
Dim app1 As Single
Dim app2 As Single
Dim app3 As Single
Dim app4 As Single
Dim rs As Object
Elenco54.RowSource = ""
Elenco56.RowSource = ""
Elenco58.RowSource = ""
Elenco60.RowSource = ""
app = 0: app1 = 0: app2 = 0: app3 = 0: app4 = 0: app5 = 0: i = 0
last = ""
Set rs = Me.righe.Form.Recordset.Clone
rs.MoveFirst
While Not rs.EOF
Select Case Left(rs.tipo.Value, 1)
Case "f"
If last = "l" Or last = "r" Then
app = rs.AbsolutePosition
Elenco54.AddItem (FormatNumber(app1 / i, 2))
Elenco56.AddItem (FormatNumber(app2 / i, 2))
Elenco58.AddItem (FormatNumber(app3 / i, 2))
Elenco60.AddItem (FormatNumber(app4 / i, 2))
rs.AbsolutePosition = app
app1 = 0: app2 = 0: app3 = 0: app4 = 0: i = 0
End If
app1 = rs.d_t_min.Value + app1: app2 = rs.d_t_max.Value + app2: app3 =
rs.d_o_min.Value + app3: app4 = rs.d_o_max.Value + app4
last = "f"
i = i + 1
Case "l"
If last = "r" Or last = "f" Then
app = rs.AbsolutePosition
Elenco54.AddItem (FormatNumber(app1 / i, 2))
Elenco56.AddItem (FormatNumber(app2 / i, 2))
Elenco58.AddItem (FormatNumber(app3 / i, 2))
Elenco60.AddItem (FormatNumber(app4 / i, 2))
rs.AbsolutePosition = app
app1 = 0: app2 = 0: app3 = 0: app4 = 0: i = 0
End If
app1 = rs.d_t_min.Value + app1: app2 = rs.d_t_max.Value + app2: app3 =
rs.d_o_min.Value + app3: app4 = rs.d_o_max.Value + app4
last = "l"
i = i + 1
Case "r"
If last = "l" Or last = "f" Then
app = rs.AbsolutePosition
Elenco54.AddItem (FormatNumber(app1 / i, 2))
Elenco56.AddItem (FormatNumber(app2 / i, 2))
Elenco58.AddItem (FormatNumber(app3 / i, 2))
Elenco60.AddItem (FormatNumber(app4 / i, 2))
rs.AbsolutePosition = app
app1 = 0: app2 = 0: app3 = 0: app4 = 0: i = 0
End If
app1 = rs.d_t_min.Value + app1: app2 = rs.d_t_max.Value + app2: app3 =
rs.d_o_min.Value + app3: app4 = rs.d_o_max.Value + app4
last = "r"
i = i + 1
End Select
rs.MoveNext
Wend

 generava l'errore???
Probabilmente perché, una volta aggiunta una voce ad una listbox, non è
possibile sapere con certezza se quella AbsolutePosition è stata mantenuta:
ciò dipenderà da dove è stata inserita la nuova riga.
Access, non potendo prevedere il futuro, assegna -1 ad AbsolutePosition,
evitando qualsiasi problema.
-- 
PBsoft di Gabriele Bertolucci
www.pbsoft.it
skype:pbsoftsolution


Grazie per la risposta.... in effetti leggendo quello che hai scritto
sopra la risposta era scontata, cosa ne pensi se in un caso analogo
anziche usare le variabi oject e recordset.clone, usassi le
collection ?

 collection ?
Non credo che possa esistere una risposta definitiva a questa domanda.
In alcuni casi può essere più utile lavorare con una collection, in altri
con un recordset.
Per operare una scelta devi tenere presente i pro ed i contro di ogni
strumento.
Ad esempio, puoi accedere direttamente agli elementi di una collection
mediante un indice/chiave, ma non puoi fare un ordinamento al volo.
Per accedere ad un record specifico di un recordset devi utilizzare un
modello di accesso ai dati (ADO/DAO) ed utilizzare un linguaggio specifico,
però puoi manipolare i dati come meglio ti pare.
