Newsgroup: it.comp.appl.access
Titolo: Errore su estrapolazione dati da recordset (per guru!)

Ciao a tutti.
L'intento è quello di aggiungere dei record ad una tabella esistente sulla
base del valore di un campo boolean.
Se il campo boolean è si, viene creato uno o due record e aggiunto/i alla
medesima tabella.
Ecco il codice che ho scritto:
*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++
Dim rsFinale As DAO.Recordset
Set rsFinale = CurrentDb.OpenRecordset("SELECT * FROM
TabECI_EstrattoContoFinaleDalAl")
'Popolo il recordset
rsFinale.MoveLast
rsFinale.MoveFirst
Dim intMovimenti As Integer
Dim intNumeroOrdine As Integer
Dim CodiceDistinta
Dim curMaggiorazioni As Currency
Dim curSpeseLegali As Currency
intMovimenti = rsFinale.RecordCount
intContatore = 0
Dim bolD As Boolean
Dim bolV As Boolean
intNumeroOrdine = 1
    Do
           'Controlla che non si stia prendendo uno dei nuovi record creati
per
           'l'addebito di Maggiorazioni o SL :)
           If rsFinale.Fields("Maggiorazioni") = True Or
rsFinale.Fields("SpeseLegali") = True Then
              GoTo NuovoRecord
           End If
           If rsFinale.Fields("Distinta") = True Then
              bolD = True
              bolV = False
              With rsFinale
               .Edit
               !NumeroOrdine = intNumeroOrdine
               .Update
               .Bookmark = .LastModified
               End With
               intNumeroOrdine = intNumeroOrdine + 1
               intContatore = intContatore + 1
           End If
           If rsFinale.Fields("Versamento") = True Then
              bolD = False
              bolV = True
              With rsFinale
               .Edit
               !NumeroOrdine = intNumeroOrdine
               .Update
               .Bookmark = .LastModified
              End With
               intNumeroOrdine = intNumeroOrdine + 1
               intContatore = intContatore + 1
           End If
                    If bolD = True And bolV = False Then
                                CodiceDistinta = rsFinale!IDRiferimento
                                curMaggiorazioni = DLookup("CDDovuto",
"TabECI_DistinteImpresa", "[IDRecord] = " & CodiceDistinta)
                                curSpeseLegali = DLookup("SLDovute",
"TabECI_DistinteImpresa", "[IDRecord] = " & CodiceDistinta)
                                    'Ci sono
Maggiorazioni?--------------------------------------------------------------
-----------
                                    If curMaggiorazioni > 0 Then
                                       Dim datDataMagg As Date
                                       datDataMagg =
DLookup("CDDataAddebito", "TabECI_DistinteImpresa", "[IDRecord] = " &
CodiceDistinta)
                                       intMese = DLookup("Mese",
"TabECI_DistinteImpresa", "[IDRecord] = " & CodiceDistinta)
                                       intAnno = DLookup("Anno",
"TabECI_DistinteImpresa", "[IDRecord] = " & CodiceDistinta)
                                       strDescrizione = "Addebitate
maggiorazioni per la distinta di " & intMese & " " & intAnno
                                          With rsFinale
                                               .AddNew
                                               !NumeroOrdine =
intNumeroOrdine
                                               !Data = datDataMagg
                                               !Descrizione = strDescrizione
                                               !Dare = curMaggiorazioni
                                               !Avere = 0
                                               !Distinta = False
                                               !Versamento = False
                                               !Maggiorazioni = True
                                               !SpeseLegali = False
                                               !IDRiferimento =
CodiceDistinta
                                               .Update
                                               .Bookmark = .LastModified
                                          End With
                                               intNumeroOrdine =
intNumeroOrdine + 1 'Aggiorno subito!
                                    End If
                                    ----------------------------------------
------------------------------------------------------
                                    'Ci sono Spese legali?
                                    If curSpeseLegali > 0 Then
                                       Dim datDataSL As Date
                                       datDataSL = DLookup("SLDataAddebito",
"TabECI_DistinteImpresa", "[IDRecord] = " & CodiceDistinta)
                                       intMese = DLookup("Mese",
"TabECI_DistinteImpresa", "[IDRecord] = " & CodiceDistinta)
                                       intAnno = DLookup("Anno",
"TabECI_DistinteImpresa", "[IDRecord] = " & CodiceDistinta)
                                       strDescrizione = "Addebitate Spese
Legali per la distinta di " & intMese & " " & intAnno
                                          With rsFinale
                                               .AddNew
                                               !NumeroOrdine =
intNumeroOrdine
                                               !Data = datDataMagg
                                               !Descrizione = strDescrizione
                                               !Dare = curMaggiorazioni
                                               !Avere = 0
                                               !Distinta = False
                                               !Versamento = False
                                               !Maggiorazioni = False
                                               !SpeseLegali = True
                                               !IDRiferimento =
CodiceDistinta
                                               .Update
                                               .Bookmark = .LastModified
                                          End With
                                               intNumeroOrdine =
intNumeroOrdine + 1 'Aggiorno Subito
                                    End If
                                    ----------------------------------------
------------------------------------------------------
                    End If
NuovoRecord:
      rsFinale.MoveNext
      Loop Until intContatore = intMovimenti
*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++
Non dovrebbero esserci errori di sintassi perchè al primo "giro" funziona
tutto alla perfezione.
Evidentemente c'è qualcosa che non va dopo il MoveNext, infatti, al momento
di effettuare (ripeto, al secondo ciclo perchè il primo va benissimo!) il
controllo
If rsFinale.Fields("Maggiorazioni") = True Or rsFinale.Fields("SpeseLegali")
= True Then
(Il primo della routine) viene generato un errore.
Dove sto sbagliando?
Ciao
vuLCan

OE come al solito taglia le righe!
Se avete difficoltà nella lettura, ecco il TXT:
http://vulcankarayan.altervista.org/Access01.txt
Ciao


ciao,
se l'errore è EOF (riferito al recordset rsFinale) probabilmente è dovuto al
fatto che durante il ciclo aggiungi record con .addnew (il record viene
aggiunto in coda), alla fine spostandoti in avanti con .movenext vai oltre
la fine del recordset causando l'errore tentando di leggere con la if...
Potresti tener traccia del bookmark del record corrente all'inizio di ogni
ciclo e ripristinarlo prima di fare il .movenext
Penso sia comunque buona norma testare la proprietà EOF del recordset prima
di accedervi per leggere o scrivere.
Ciao,
Mat.

 vuLCan
Consiglio:
1)
Cicli nel modo meno indicato il Recordst.
Non serve sapere quanti Records hai ti basta una cosa del genere:
rs.MoveFirst
Do until rs.Eof
    '......... Quì metti tutto il tuo CODICE
    rs.MoveNext
Loop
2)Non usare quel marasma di Dlookup, per estrarre alla fine
   i campi di un singolo Record, creati un Recordset ed usa quello
    guadagni 10 volte in velocità d'esecuzione.
ANOMALIA:
A parte questo l'errore che mi pare di aver visto è l'aggiornamento del
Bookmark
nel ciclo, che non deve essere fatto assolutamente in quel punto altrimenti
sposta il
puntatore sull'ultimo Records e non ne trova più....!!!!
Toglilo e dovrebbe andare.
Ciao
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------

 Mat.
Esattamente.
L'errore era nel .bookmark! :)
Grazie.

 Toglilo e dovrebbe andare.
Esatto, Alessandro. L'avevo trovato anche da solo e questo mi fa capire che
sto iniziando a macinare le primissime cose.
Grazie mille per l'aiuto!
Seguirò i consigli.
Ciao