Newsgroup: it.comp.appl.access
Titolo: Goto & recordcount

Aiutatemi a risolvere questo problema...
Premetto sono un neofita di access .. per cui scusate gli strafalcioni
La procedura che invio di seguito esegue un sorteggio a caso di record
contenuti in una tabella (tblUnione) ciclando su recordset estratti di volta
in volta in base a due parametri che vengono presi aprendo due tabelle
distinte(tbl medici e cuf)
Per contare i record del recordset uso recordcount, quindi calcolo il 5% del
numero ... genero un numero casuale nell'intervallo compreso tra il 1° e
l'ultimo record e...
non riesco a spostarmi sul record prescelto.
Ho usato, come vedete goto... ma non solo non si sposta... ma non genera
messaggi d'errore per cui ho buttato un bel po' di tempo nella convinzione
di aver fatto bene...
Option Compare Database
Option Explicit
Sub sorteggio()
Dim dbs, dbsRIC As Database
Dim rst, rstRIC, rstExtr, rstCUF As Recordset
Dim strSQL, ncuf As String
Dim codMed, ContMin, ContMax, MyValue As Long
Dim Perc, i, num As Integer
    creaTblestrazioni
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("tbln_medici", dbOpenTable) ' apre tbln_medici
   ' rst.MoveFirst
    Do Until rst.EOF 'inizio ciclo su tbln_medici
    num = rst.RecordCount
    codMed = rst.Cod_MED
    Set rstCUF = dbs.OpenRecordset("cuf", dbOpenTable) ' apre tabella Cuf
    Do Until rstCUF.EOF 'inizio ciclo su tabella CUF
    ncuf = rstCUF.Fields(0)
        strSQL = "SELECT * FROM tblUNIONE WHERE (((tblUNIONE.nota_CUF)='" &
ncuf & "') AND ((tblUNIONE.TblN_Medici_Cod_MED)=" & codMed & "));"
        Set rstRIC = dbs.OpenRecordset(strSQL, 2)  ' apre tblunione per
codice medico = a codice medico di tabella medici
            On Error Resume Next
            rstRIC.MoveFirst
            ContMin = rstRIC.RecordCount
                If ContMin = 0 Then
                   Exit Do
                End If
                rstRIC.MoveLast
            ContMax = rstRIC.RecordCount
            Perc = (ContMax * 5) \ 100
             If Perc = 0 Then ' se il recordset è piccolo
              Perc = 1
             End If
         For i = 1 To Perc
            MyValue = Int((ContMax - ContMin + 1) * Rnd + ContMin)  ' Genera
un valore casuale compreso tra 1 e Perc
            ''''' riga incriminata ---------------------------------
             DoCmd.GoToRecord acDataQuery, strSQL, acGoTo, MyValue   ' Si
sposta al record numero = estratto
                Set rstExtr = dbs.OpenRecordset("tblestrazioni",
dbOpenTable)
                rstExtr.AddNew
                'aggiunge dati
                rstExtr!IdRIC = rstRIC.Fields(0)
                rstExtr!cod_farmacia = rstRIC.Fields(1)
                rstExtr!tipo_mazz = rstRIC.Fields(2)
                rstExtr!prog_mazz = rstRIC.Fields(3)
                rstExtr!prog_ric = rstRIC.Fields(4)
                rstExtr!cod_ass = rstRIC.Fields(5)
                rstExtr!tblricette_cod_med = rstRIC.Fields(6)
                rstExtr!N_pezzi = rstRIC.Fields(7)
                rstExtr!cod_spec1 = rstRIC.Fields(8)
                rstExtr!cod_spec2 = rstRIC.Fields(9)
                rstExtr!cod_spec3 = rstRIC.Fields(10)
                rstExtr!cod_spec4 = rstRIC.Fields(11)
                rstExtr!cod_spec5 = rstRIC.Fields(12)
                rstExtr!cod_spec6 = rstRIC.Fields(13)
                rstExtr!Cod_farm = rstRIC.Fields(14)
                rstExtr!descr_farm = rstRIC.Fields(15)
                rstExtr!nota_CUF = rstCUF.Fields(0)
                'rstExtr!nota_CUF = rstRIC.Fields(16)
                rstExtr!TblN_Medici_Cod_MED = rstRIC.Fields(17)
                rstExtr!Nome_Med = rstRIC.Fields(18)
                  Form_Preparazione.Caption = "Estrazione dati del medico :
" & num & "  " & MyValue & "  " & rstRIC.Fields(18) & "  Nota:" & ncuf
                rstExtr.Update
                rstExtr.Close
               'dbs.Close
            Next
            'Debug.Print MyValue; rstRIC.Fields(0) & "   " & codMed & "   "
& ContMax & "   " & rstRIC.Fields(18)
        Beep
        ' End If
        rstRIC.Close
        rstCUF.MoveNext
        Loop
        rstCUF.Close
    rst.MoveNext
   Loop
rst.Close
dbs.Close
Beep
End Sub
'^^^^^^^^^^^^^^^^^^^^^^^^^^^
Sub creaTblestrazioni()
    If esisteTbl("tblestrazioni") = True Then
        Beep
    Else
        MsgBox ("La tabella non esiste... Adesso la creo!")
creaTblEstrazioniVuota  'chiamata a routine
    End If
End Sub
'^^^^^^^^^^^^^^^^^^^^^^^^^^^
'^^^^^^^^^^^^^^^^^^^^^^^^^^^
Public Function esisteTbl(Nometabella As String) As Boolean 'controlla se
esiste o meno una tabella
Dim tdf As TableDef
esisteTbl = False
For Each tdf In CurrentDb.TableDefs
    If tdf.Name = Nometabella Then
        esisteTbl = True
    Exit Function
    End If
Next tdf
End Function

                rstExtr!cod_farmacia = rstRIC.Fields(1)
Antonio