Newsgroup: it.comp.appl.access
Titolo: Scegliere record a caso

Con questa Stringa:
strConcorrente = "SELECT TOP 1 tbUTENTE.id, tbUTENTE.codUTENTE FROM tbUTENTE 
WHERE (((tbUTENTE.UtenteAttivo)<>True));"
Scelgo il primo codice ...
Se invece volessi pescarne uno a caso?????
Grazie
-- 
**********
EmMeCi
********** 

 Se invece volessi pescarne uno a caso?????
www.donkarl.com/it
 FAQ 3.17 Realizzare un ordine casuale di record
-- 
HTH
Karl
*********
Access FAQ: 
www.donkarl.com/it
+ Conferenza Italiana per Sviluppatori di Access (CISA)

 ha scritto nel messaggio 
news:k0_cf.46$rQ4...@news.it.colt.net...

Informazione aggiuntiva:
tbUTENTE.id è un campo tipo testo non in chiave.
-- 
**********
EmMeCi
**********

Purtroppo non ho il campo contatore di tipo numerico.
Cosa potrei fare quindi?
-- 
**********
EmMeCi
********** 

strConcorrente = "SELECT TOP 1 tbUTENTE.id, tbUTENTE.codUTENTE FROM tbUTENTE
WHERE (((tbUTENTE.UtenteAttivo)<>True)) ORDER BY 
rnd(tbUTENTE:CasualNumber);"
Ho aggiunto il campo CASUALNUMBER ti tipo Progressivo Casuale in chiave.
Ma la procedura mi da errore run-time 3061 parametri insufficenti. Previsto 
1 e sul debug mi porta:
Set rstConcorrente = CurrentDb.OpenRecordset(strConcorrente)
idee?
Grazie!
-- 
**********
EmMeCi
**********

 Cosa potrei fare quindi?
Creati un contatore temporaneo. Lo trovi nella sez. query del sitocomune
-- 
_ _
Ciao
MAssimiliano Amendola            
www.accessgroup.it
Cisa - Conferenza Italiana per Sviluppatori Access
Info:  
www.donkarl.com/it


tbUTENTE:CasualNumber
--> 
tbUTENTE.CasualNumber
?


[cut]
avevo sbagliato a riportarti il tutto, mea culpa,
anche cosě non va:
strConcorrente = "SELECT TOP 1 tbUTENTE.id, tbUTENTE.codUTENTE FROM tbUTENTE 
WHERE (((tbUTENTE.UtenteAttivo)<>True)) ORDER BY 
Rnd(tbUTENTE.CasualNumber);"
e prima di questa strCocnorrente ho scritto Randomize
aiuto!
-- 
**********
EmMeCi
********** 

 e prima di questa strCocnorrente ho scritto Randomize
Prova di incollare ed eseguire il tuo enunciato SQL nella
visualizazzione SQL di una query. Forse hai sbagliato il nome
di un campo e trovi l'errore cosi.


Hai ragione Karl, scusa se ho fatto perdere tempo, ma ho un altro problema.
Ho enunciato Randomize all'inizio del codice,
ho fatto girare la procedura per 10 volte e ... mi estrae sempre gli stessi 
3 codici!!!!! com'è possibile tutto ciò???


 stessi 3 codici!!!!! com'è possibile tutto ciò???
Non capisco cosa fai.
Forse sarebbe meglio di postare il tuo codice relevante.
-- 
cu


 Grazie
Sì in realtà è un falso random


Ciao Karl,
questo è un codice gemello a quello che ti hop postato.
Lo sto completando insieme agli aiuti di MA per le informazioni sulla Barra 
di STATO.
L'unico neo è la selezione random del benedetto codice ... che sudata!!!
Grazie intanto!
-- 
**********
EmMeCi
**********
ecco quanto richiesto:
Public Function EstrazioneVincitori()
'*****************************************
' Funzione Creata spulciando sul NG I.C.A.A.
' Post originali e risposte per spunto *MC*
'*****************************************
Dim rstPremio As DAO.Recordset
Dim rstConcorrente As DAO.Recordset
Dim rstPremiazioni As DAO.Recordset
Dim Estrazioni
Dim strPremio As String
Dim strConcorrente As String
Dim premidisponibili As Long
Dim PartecipantiDisponibili As Long
premidisponibili = DCount("[idPremio]", ("tblPremio"), "[assPremio]<>True") 
'Conta Premi
PartecipantiDisponibili = DCount("[ID]", ("tblConcorrente"), 
"[concPremiato]<>True") 'Conta Partecipanti
For Estrazioni = 1 To premidisponibili Step 1 'Inizializzo Ciclo Estrazioni
GoTo EstrazioneVincitore
EstrazioneVincitore:
If premidisponibili > 0 And PartecipantiDisponibili > 0 Then 'Condizione 
Standard
    Randomize
    strPremio = "SELECT TOP 1 tblPremio.idPremio FROM tblPremio WHERE 
(((tblPremio.assPremio)<>True)) ORDER BY tblPremio.idPremio;"
    strConcorrente = "SELECT TOP 1 tblConcorrente.id, 
tblConcorrente.codConcorrente FROM tblConcorrente WHERE 
(((tblConcorrente.concPremiato)<>True)) ORDER BY Rnd 
(tblConcorrente.CasualNumber);"
    Set rstPremio = CurrentDb.OpenRecordset(strPremio)
    Set rstConcorrente = CurrentDb.OpenRecordset(strConcorrente)
    Set rstPremiazioni = CurrentDb.OpenRecordset("tblPremiati")
        With rstPremiazioni
            .AddNew
            !idPremio = rstPremio!idPremio
            !idConcorrente = rstConcorrente!ID
            !codConcorrente = rstConcorrente!codConcorrente
            .Update
        End With
        DoCmd.OpenQuery "q_agg_premio"
        DoCmd.OpenQuery "q_agg_concorrente"
    rstConcorrente.Close: Set rstConcorrente = Nothing
    rstPremiazioni.Close: Set rstPremiazioni = Nothing
    rstPremio.Close: Set rstPremio = Nothing
Else
If premidisponibili = 0 And PartecipantiDisponibili > 0 Then 'Condizione 
Premi Esauriti
    MsgBox "Attenzione..." & Chr(13) & Chr(10) & "non ci sono più premi da 
assegnare" & "!!!", vbInformation, "O&P Estraction Software"
Else
If premidisponibili > 0 And PartecipantiDisponibili = 0 Then 'Condizione 
Partecipanti Esauriti ma Premi ancora disponibili
    MsgBox "Attenzione..." & Chr(13) & Chr(10) & "non ci sono più 
partecipanti da estrarre nonostante Vi siano ancora premi disponibili" & 
"!!!", vbInformation, "O&P Estraction Software"
Else
End If
End If
End If
Next
MsgBox "Estrazione Completata!"
End Function 


...e per renderlo un vero random?
-- 
**********
EmMeCi
********** 

 Grazie intanto!
Togli randomize e metti
SELECT TOP 1 rnd(tblPremio.idPremio )


 ...e per renderlo un vero random?
Potresti combinarlo per esempio con l'orario


anche se tbl.premio.idpremio è di tipo testo???
-- 
**********
EmMeCi
********** 

 -- 
ma dai?
mi puoi fare un esempio per favore?
-- 
**********
EmMeCi
********** 

attenzione:
il random non è sul premio,
ma sulla riga successiva del codice...
-- 
**********
EmMeCi
**********

[cut]
rnd([CasualNumber]* now())
intendi una cosa del genere?
-- 
**********
EmMeCi
********** 

 ha scritto nel messaggio 
news:FH0df.69$rQ4...@news.it.colt.net...

...se così fosse, non funziona comunque, mi ripete spesso terzetti identici 
almeno in 2 dei 3 record estratti ... se è il caso di far chiarezza apro un 
nuovo thread, o continuiamo su questo?


[cut]
credo che questa possa essere la volta definitiva.
Cosa ne pensi?
strConcorrente = "SELECT TOP 1 tblConcorrente.id, 
tblConcorrente.codConcorrente FROM tblConcorrente WHERE 
(((tblConcorrente.concPremiato)<>True)) ORDER BY rnd ((rnd([CasualNumber]* 
time()))*rnd + ((rnd([CasualNumber]* time()))));"
Ho fatto una decina di test e non ho avuto ricorrenze strane, io la passerei 
o seocndo te č migliorabile? Se ciň fosse, dimmelo, vorrei avere un buon 
codice in questa procedura!
ciao
-- 
**********
EmMeCi
********** 

 ciao
Se funge puň andare
