Newsgroup: it.comp.appl.access
Titolo: Problema codice per controllo numerazione

Salve a tutti,
Avendo una tabella:
tblCEE importata da As/400
composta da:
protocollo,data,cliente,importo
dove "protocollo" è un valore numerico che deve essere
sequenziale e non deve presentare numeri doppi o salti.
Per risolvere questo problema ho trovato questo codice
postato nel newsgroup da "Lbo da casa" nel lontano 1999
e mi sembrava una bella soluzione:
=====CODICE originale=========
public sub ControllaCompattezza(NomeTabella as string, NomeCampo as
string)
dim rst as recordset
dim valprec as long ' valore precedente
set rst=currentdb.openrecordset(NomeTabella, dbforwardonly)
' facciamo contenta Federica...  tanto il recordset
' va scorso solo in avanti.
valprec=rst(NomeCampo)
rst.movenext
do until rst.eof
    if valprec=rst(NomeCampo) then
        msgbox "Guarda che il " & valprec & "-esimo record è
duplicato!"
        exit sub
    elseif (valprec+1) < rst(NomeCampo) then
        msgbox "Guarda che c'è un buco di numerazione alla " & valprec
& "-esima posizione!"
        exit sub
    elseif (valprec+1) > rst(NomeCampo) then
        msgbox "Guarda che c'è qualcosa che non va alla " & valprec &
"-esima posizione!"
        exit sub
    end if
    rst.movenext ' importantissimo!
loop
msgbox "Sembra che non ci siano errori nella numerazione"
end sub
======== FINE CODICE ===========
ho modificato il codice nel seguente modo per creare un logfile
=======CODICE MODIFICATO=======
Public Sub ControllaCompattezza(NomeTabella As String, NomeCampo As String)
Dim rst As DAO.Recordset
Dim rstlog As DAO.Recordset
Dim valprec As Integer ' valore precedente
'Set rst = CurrentDb.openrecordset(NomeTabella, dbforwardonly)
 Set rst = CurrentDb.OpenRecordset(NomeTabella)
 Set rstlog = CurrentDb.OpenRecordset("tblLogFile")
 ' facciamo contenta Federica...  tanto il recordset
' va scorso solo in avanti.
valprec = rst(NomeCampo)
rst.MoveNext
Do Until rst.EOF
    If valprec = rst(NomeCampo) Then
        MsgBox "Guarda che il " & valprec & "-esimo record è duplicato! "
        Exit Sub
    ElseIf (valprec + 1) = rst(NomeCampo) Then
       ' MsgBox "Guarda che c'è un buco di numerazione alla " & valprec & 
"-esima posizione!"
       ' Exit Sub
        rstlog.AddNew
        rstlog!Descrizione = "Manca un numero alla riga"
        rstlog!Riga = rst(NomeCampo)
        rstlog.Update
    ElseIf (valprec + 1) > rst(NomeCampo) Then
        MsgBox "Guarda che c'è qualcosa che non va alla " & valprec & 
"-esima posizione!"
        Exit Sub
    End If
    rst.MoveNext ' importantissimo!
Loop
MsgBox "Sembra che non ci siano errori nella numerazione"
End Sub
======================== FINE CODICE ===============.
Il problema è che sia nel primo caso che nel secondo,  nonostante il file
sia sequenzialmente perfetto, mi segnala sempre tutte le righe dicendomi
che c'è un buco nella numerazione. Non riesco a campire dove è l'errore.
Da notare che la numerazione non è detto che deve partire da 0.
Ovviamente nel primo caso si interrompe ed esce nel secondo mi crea un
logfile segnalandomi tutte le righe come errore.
Grazie
WS


mi sono accorto di aver postato il codice sbagliato, che ho modificato
mentre facevo delle prove.
In realtà la riga
ElseIf (valprec + 1) = rst(NomeCampo) Then
è come l'originale, e cioè:
ElseIf (valprec + 1)  < rst(NomeCampo) Then
Grazie
WS