Newsgroup: it.comp.appl.access
Titolo: generazione numero casuale da 1 a 50

Ciao a tutti,
come faccio in una query ad ottenere un campo calcolato
che abbia numeri casuali solo da 1 a 50?
grazieee 


Ti dice nulla la funzione RND...?????????
Leggi nell'Help... è tuo amico.
@Alex

 ha scritto nel messaggio 
news:be80663c-7653-401e...@z33g2000vbb.googlegroups.com...


Leggi nell'Help... � tuo amico.
@Alex
Vero, fatto
MyValue = Int((6 * Rnd) + 1) ' Genera un valore casuale compreso tra 1 e 6.
non so se mi leggerai ancora, ma provo a chiederti una cosa meno sciocchina
in un report ho quattro 5 campi
2 Cottura pasta biscotto.
A  240�, 7-8 minuti
B  200�, 10-12 minuti
C  180�, 14-16 minuti
D  160�, 20 minuti
dovrei invertire ad ogni evento print l'origine delle caselle di
controllo in modo da avere per ogni record un ordine
diverso dei valori come nell'esempio
2 Cottura pasta biscotto.
C  180�, 14-16 minuti
B  200�, 10-12 minuti
D  160�, 20 minuti
         A  240�, 7-8 minuti
� possibile cambiare via codice l'origine dei campi?
grazie

 grazie
Pi� che cambiare l'origine dei campi (controlli) mi sembra che tu voglia 
dare un ordinamento diverso.
Se � cos� potresti usare, per esempio, proprio la funzione Rnd abbinata ad 
un recordset.
Questa funzione genera un numero casuale tra 1 e 100:
Public Function RandomizzaSequenza()
Dim i As Integer, ii As Integer
For ii = 1 To 6  ' se sono 6 i record che devi usare
i = Int((100 - 1 + 1) * Rnd + 1)
Randomize 1
Debug.Print i
Next ii
End Function
Il resto della funzione lo completi tu.
Ovviamente dovrai aggiungere un campo di tipo numerico alla tabella che 
riempirai con i valori della funzione. Questi valori cambieranno ogni volta, 
per cui se utilizzerai l'ordinamento crescente otterrai una lista sempre 
diversa.
Ciao, Carlo 

Dunque Carlo,
per avere un campo con valori diversi non ci sono problemi. Ci sono 
risciuscito per altre vie.
Premetto che spiegarsi e farlo in maniera breve e sintetica � difficile.
Gi� esprimere in parole semplici il mio problema � difficoltoso.
Premetto che sono un prof e tutto questo mi serve per non
far copiare i miei alunni durante il compito a crocette.
Comq credo di aver capito questo:
non mi serve un ordine casuale dei record cos� che durante la stampa del 
report
ho un ordine sempre differente dei record.
Dovrei modificare l'elenco dei campi per ogni record!!
provo ancora:
    IL PRIMO RECORD HA 5 CAMPI (una domanda e 4 risposte)
    le quattro risposte sono rappresentate da 4 campi
    A
    B
    C
    D
..........e cos� via per 50 record.
dunque stampo le prime 50 domande per il primo alunno.
Quando stampo le seconde 50 domande (il report la seconda volta)
vorrei questo:
IL PRIMO RECORD HA 5 CAMPI (una domanda e 4 risposte)
    le quattro risposte sono rappresentate da 4 campi presentati 
diversamente
    B
    A
    D
    C
insomma vorrei scombinargli la sequenza delle risposte in modo
che non se le possano passare facilmente con un semplice segno.
Grazie Carlo

 ha scritto nel messaggio 
news:4beef202$0$12129$4faf...@reader4.news.tin.it...

Le risposte devono stare in verticale e non in orizzontale.
Mi spiego: due tabelle, Domande e Risposte con join uno a molti sulla chiave 
comune.
Tabella domande: ID (numerico chiaveprimaria), Domanda
Tabella Risposte; IDRisposta, IDDomanda (numerico elemento di join), 
Risposta (testo), Corretta (S�/No), Ordine (numerico).
In questo modo ti sar� molto facile usare il campo Ordine per sistemare le 
risposte sempre in "ordine" diverso, magari con l'esempio che ti proponevo 
prima.
Per come hai strutturato il db � anche possibile raggiungere lo stesso 
risultato ma � molto pi� difficile.
Che ne pensi?
Ciao, Carlo 

credo che sia l'unica soluzione praticabile, anche perch� avevo pensato
che le caselle di testo nel report avessero la propriet� 
RecordSource........
quindi gliela cambiamo in maniera dinamica, .invece pare di no.
Per� ho un piccolo problemino. Le 50 risposte in orizzontale
come posso trasferirle in verticale non manualmente nella seconda 
tabella????
campoA         campoB          campoC          campoD
togli sale         metti sale          taglia sale        spargi sale
CAMPORISPOSTE
togli sale
metti sale
taglia sale
spargi sale
ciao

 ha scritto nel messaggio 
news:4befa18c$0$31380$4faf...@reader1.news.tin.it...
cut

Se ho ben capito hai poca dimestichezza con il codice...Se � cos� seguiamo 
una strada pi� percorribile.
Prima di tutto ti serve una chiave primaria nella tabella domande...Immagino 
sia gia presente.
La tabella Risposte deve contenere i campi che ti ho gi� descritto.
Apri la tabella Domande in una query e inserisci solo il campo ID (se questo 
� il nome della chiave primaria) e il campoA che rinomini per esempio in 
Fil:CampoA (scrivi proprio cos� nella colonna del campoA e sempre che il 
campo si chiami cos�), salvi la query con il nome Queri10 (� solo un 
esempio); poi togli il campoA e inserisci il CampoB (Fil:CampoB) e salvi la 
query come Query11...Cos� via fino alla fine dei campi che contengono le 
domande (immagino 4 o 5, quindi Query12 e Query13).
Ora apri una query vuota, senza alcuna tabella e dal men� visualizza scegli 
visualizzazione sql. Qui scrivi questo:
SELECT * from Query10 union all select * from Query11 union all select * 
from query12 UNION ALL select * from query13;
Cambia o aggiungi opportunamente i nomi dei campi rispettando la stessa 
sintassi.
Salva la query con UQuery14 (o quello che preferisci). Ora usa questa query 
per alimentare l'ennesima query che sar� una query di accodamento. 
Ovviamente la tabella a cui accodare sar� la tabella Risposte. Accoderai il 
campo ID al campo IDDomanda e il campo Fil al campo Risposta. Manda in 
esecuzione la query e il gioco � fatto. Per essere ancora pi� preciso ordina 
la query per l'ID crescente.
A questo punto e se tutto � andato a buon fine puoi verificare che ci siano 
tutte le risposte e quindi cancellare i campiA-B-C ecc. dalla tabella 
Domande.
Fai sempre una copia di sicurezza del database originale perch� non voglio 
farti fare degli errori irreparabili.
Fammi sapere.
Ciao, Carlo 

query d'unione.
Ma non � finitaaaaaaaaaaaa, mi devi aiutare ancora.
ora nella tabella risposte ho
IDdomanda       risposta                                ordine
1                       con sale                                 0
1                       senza sale                               0
1                       poco sale                               0
1                      molto sale                                0
2                      con pepe                                 0
2                      senza pepe                              0
2                      poco pepe                               0
2                     molto pepe                               0
come faccio io ora a dare un ordine diverso delle risposte per ogni 
domanda??
La tua funzione dove la applico?? a una query di aggiornamento
 che mi generi  nel calmpo ordine per ogni record
un numero casuale da uno a quattro??
Public Function RandomizzaSequenza()
Dim i As Integer, ii As Integer
For ii = 1 To 4  ' se sono 4 i record che devi usare
i = Int((100 - 1 + 1) * Rnd + 1)
Randomize 1
Debug.Print i
Next ii
End Function
beh mi devi aiutare Carlo
ciao

 ha scritto nel messaggio 
news:4bf04a4d$0$18989$4faf...@reader5.news.tin.it...
cut

La funzione sopra descritta diventa:
Public Function RandomizzaSequenza()
Dim i As Integer, ii As Integer, iii As Integer, iiii As Integer
Dim Rcs As Recordset, RcsRisposte As Recordset
Set Rcs = CurrentDb.OpenRecordset("SELECT TRisposte.IDDomanda AS NID, 
Count(TRisposte.Risposta) AS NRisposte FROM TRisposte GROUP BY 
TRisposte.IDDomanda;")
Rcs.MoveLast
Rcs.MoveFirst
For iii = 1 To Rcs.RecordCount
    For ii = 1 To Rcs!Nrisposte
    Randomize 1
        Set RcsRisposte = CurrentDb.OpenRecordset("SELECT TRisposte.* FROM 
TRisposte WHERE (((TRisposte.IDDomanda)= " & Rcs!Nid & "));")
            RcsRisposte.MoveLast
            RcsRisposte.MoveFirst
            For iiii = 1 To RcsRisposte.RecordCount
                With RcsRisposte
                i = Int((100 - 1 + 1) * Rnd + 1)
                .Edit
                !ordine = i
                .Update
                End With
            RcsRisposte.MoveNext
            Next iiii
        RcsRisposte.Close
        Set RcsRisposte = Nothing
    Next ii
    Rcs.MoveNext
Next iii
Rcs.Close
Set Rcs = Nothing
End Function
Tutto ci� funziona se i nomi dei campi sono questi e la tabella si chiama 
TRisposte, altrimenti dovrai opportunamente cambiarli.
Il codice, la funzione, prevede che tu abbia nei riferimenti DAO. Inserisci 
la funzione in un modulo pubblico e potrai chiamarla, per esempio, prima 
della apertura del report con RandomizzaSequenza.
Qualora nel campo "Ordine" dovessi trovare numeri uguali non � un problema 
perch� comunque la sequenza cambier� ogni volta e se nel report ordini il 
campo "Ordine" a crescente tutto funzionera alla grande.
Fammi sapere.
Ciao, Carlo

Allora ti dico che ha funzionato tutto. La funzione non l'ho capita manco
tanto bene.
Per� ho notato che rallentava abbastanza il caricamento del report.
Cos� ho cambiato la generazione del campo ORDINE.
L'ho fatto con un campo calcolato in una query, cos� � risultato pi� tutto 
veloce.
Se ci tieni puoi dare una occhiata al file scaricandolo dal sito della mia 
scuola
a questo indirizzo (cos� vedi un p� come si muovono questi allievi-access, 
no?)
http://www.istitutoalberghieroabano.it/index.php?option=com_content&view=article&id=184&Itemid=37
grazie mille Carlo 

 
http://www.istitutoalberghieroabano.it/index.php?option=com_content&v.
..
però la ricetta della paella devi postarla ...

 
http://www.istitutoalberghieroabano.it/index.php?option=com_content&v.
..
per� la ricetta della paella devi postarla ...
Ecco la ricetta per Roberto e non solo.............mo' voglio vedere!!! 

 grazie mille Carlo
Prego, grazie a te per il feedback.
Ho visto il lavoro e devo dire che mi sembra molto ben fatto. La scelta 
della query � sicuramente quella giusta.
Perch� non pubblichi il lavoro sui siti collegati? Potrebbe essere d'aiuto a 
chi ha bisogno di un questionario a risposta multipla; magari aggiungendo 
una maschera di inserimento per le domande e le risposte.
Ciao, Carlo 

per cambiare.
Certo devo completarlo di maschera di inserimento.. e lo far�.
Ciao, se hai due righe per indicarmi come mettere il file a disposizione ti
ringrazio..... 

 ringrazio.....
Per esempio su:
http://www.accessgroup.it/Homeindex.asp
http://www.alessandrobaraldi.it/
http://www.sitocomune.com/
Vedi che trovi tutte le indicazioni...D'altra parte i webmaster sono assidui 
frequentatori di questo NG.
Ciao, Carlo 

