Newsgroup: it.comp.appl.access
Titolo: PERMUTARE POSIZIONE CAMPI

Sto realizzando un mdb che mi estrae CASUALMENTE da 1000 domande  10,
 fino qui è stato fatto.
Quello che volevo sapere come posso realizzare una query sql o in altro
modo  che mi
permette di permutare CASUALMENTE la posizione delle risposte per ciascuna
delle 10 domande in quanto la Risp_1 è sempre quella esatta.
La query è strutturata così:
N° Domanda Risp_1 Risp_2 Risp_3 Risp_4
GRAZIE CIAO
*** un saluto a Daniele e grazie per avermi suggerito dai cambiare
l'oggetto.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


Tramite random e randomize puoi generare numeri casuali tra 1 e 4.
A quel punto prelevi con quell'ordine le risposte 1->4
Antonio

 l'oggetto.
Puoi usare un gruppo di opzioni in una maschera e cambiare l'ordine delle
risposte sull'evento current, ricordandoti di cambiare, oltre che
l'etichetta con il testo della risposta, anche il valore dell'opzione
associata:
If Not Me.NewRecord Then
  Dim a(4) As Byte, i As Byte
  Randomize Timer
  a(1) = Int(Rnd * 4) + 1
  Do: a(2) = Int(Rnd * 4) + 1: Loop While a(2) = a(1)
  Do: a(3) = Int(Rnd * 4) + 1: Loop While a(3) = a(1) Or a(3) = a(2)
  a(4) = 10 - a(1) - a(2) - a(3)
  For i = 1 To 4
    Me("risposta" & Format(i, "0")).Caption = _
        Me("risp_" & Format(a(i), "0"))
    Me("valore" & Format(i, "0")).OptionValue = a(i)
  Next
End If
Namor
-- 
namor at inwind punto it


 Namor
GRAZIE A TE NAMOR PER LA "RISPOSTA NON STRINGATA" TI FARO' SAPERE L'ESITO
-- 


 Namor
GRAZIE A TE NAMOR PER LA "RISPOSTA NON STRINGATA" TI FARO' SAPERE L'ESITO
-- 
questo articolo e` stato inviato via web dal servizio gratuito 


 GRAZIE A TE NAMOR PER LA "RISPOSTA NON STRINGATA" TI FARO' SAPERE L'ESITO
Vedi Namor?
Diamogli la pappa pronta, cosě poi fanno anche i galletti!!!
Antonio

Antonio Biso ha scritto:



Ma nooo... era solo un'insieme di spunti che lui si č studiato, ha capito
ed ha adattato al suo caso. Vero?
Ieri avevo 5 minuti liberi e ho voluto provare questa cosa perchč non mi
era mai capitata un'esigenza simile, di dover randomizzare le posizioni
dei campi, e visto che era venuto bene l'ho postato intero.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 


Ciao NAMOR, avrai capito che ho bisogno di chiarimenti 
Riporto qui sotto il codice che mi hai scritto :
**************************************************************
if not me.newrecord then
dim a(4) as byte, i as byte
randomize timer
a(1)=int(Rnd*4)+1
do: a(2)=int(Rnd*4)+1: loop while a(2)=a(1)
do: a(3)=int(Rnd*4)+1: loop while a(3)=a(1) or a(3)=a(2)
a(4)=10-a(1)-a(2)-a(3)
fot i=1 to 4
me("Risposta" & Format(i, "0")).Caption=_
me("Risp_"& Format(a(i),"0"))
me("Valore" & Format(i, "0")).OptionValue=a(i)
next
end if
***************************************************************
Attualmente la mia maschera in base a query che ho realizzato consta di:
4 textbox e precisamente "Cod","Domanda",
"Risp_1","Risp_2","Risp_3","Risp_4"
Allora cosa devo fare, devo creare un gruppo di opzioni chiamato
"Risposte".
il valore delle opzioni 1, 2, 3, 4, come devo adattare il tutto.
Scusami penserai che sono un' idiota, e ti do ragione però almeno provo ad
impegnarmi.
Ciao grazie.
-- 


RobertoAcc ha scritto:

Questo codice non funziona con le textbox, è scritto apposta per lavorare
su un gruppo di opzioni. Inserisci un nuovo gruppo di opzioni con 4 valori
a caso e poi cambia i nomi dei controlli. Non importa il valore che
assegni alle opzioni, tanto poi verrà impostato dalla procedura. Le 4
checkbox si devono chiamare "Valore1", "Valore2", 3 e 4 e le 4 etichette
"Risposta1", "Risposta2", 3 e 4. I nomi dei campi provenienti dalla query
che seleziona le 10 domande a caso sono Risp_1, 2, 3 e 4. Se vuoi usare
altri nomi basta che li cambi nel codice.
Ogni volta che visualizzi un record (form_current) la sub calcola
casualmente le 4 posizioni nell'array a() e poi assegna alle 4 etichette
del gruppo di opzioni il testo della risposta, e alle 4 checkbox i
corrispondenti valori da 1 a 4.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 


 Namor
-- 
questo articolo e` stato inviato via web dal servizio gratuito 


 ecc...?
Si, il gruppo di opzioni contiene le quattro scelte, ognuna composta dalla
checkbox e da un'etichetta. Nelle etichette vengono messi i testi delle
risposte, e le checkbox le usi per scegliere la risposta.
Il gruppo di opzioni restituirà il valore della risposta scelta (1 2 3 o
4), a prescindere dalla posizione in cui verrà a trovarsi la risposta
esatta (la 1), in quanto la sub modifica anche i valori delle quattro
opzioni oltre che le etichette. Lo puoi associare al campo che dovrà
contenere il valore della risposta.
Per fare il conteggio delle risposte esatte ti basterà fare un count() dei
record con risposta=1.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 


 Namor
Provo a seguire il tuo consiglio.
TI FACCIO SAPERE QUANTO PRIMA.
CIAO E GRAZIE !
-- 


Ciao Namor come avrai capito dall'oggetto i tuoi SANTI CONSIGLI hanno
avuto esito POSITIVISSIMO, e per questo ti ringrazio infinitamente.
Un ultima cosa vorrei sapere:
1)Ho creato vicino a ciascuna risposta una etichetta (NON VISIBILE, che  
nel  momento in cui clicco su una optionbox, cioč scelgo una risposta, 
questa etichetta ridiventa visibile e mi restituisce il testo a seconda:
"ESATTO" di colore verde o "ERRATO" di colore rosso.
2) Poi ieri mi hai anticipato sul discorso di conteggiare le risposte
esatte
   con la count() delle risposte esatte, ma in questo caso come si puo
fare ? forse con usando le etichette che  ho menzionato prima ?
CIAO E ANCORA GRAZIE.


Ciao Namor come avrai capito dall'oggetto i tuoi SANTI CONSIGLI hanno
avuto esito POSITIVISSIMO, e per questo ti ringrazio infinitamente.
Un ultima cosa vorrei sapere:
 1)Ho creato vicino a ciascuna risposta una etichetta (NON VISIBILE, che  
 nel  momento in cui clicco su una optionbox, cioč scelgo una risposta, 
 questa etichetta ridiventa visibile e mi restituisce il testo a seconda:
 "ESATTO" di colore verde o "ERRATO" di colore rosso.
 Ma non sono riuscito a fare questa cosa carina ho provato un po di
soluzioni che conosco ma forse sono fuori strada.cOME SI PUň FARE ?


 CIAO E ANCORA GRAZIE.
Il conteggio alla fine lo puoi fare solo se salvi le risposte da qualche
parte, sennň ovviamente non č possibile.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 


 Namor
Infatti io voglio che una volta che si clicca sulla risposta scelta NON
deve essere possibile fare un' altra scelta (magari con un msgbox tipo
"impossibile fare un'altra scelta") ma passare allla domanda successiva.
E come faccio a salvare i record delle risposte esatte da un'altra parte ?
-- 


Ciao NAMOR ci sei ancora, spero che tu abbia letto il mio ultimo post.
Ciao Roberto.


 Ciao Roberto.
E già che ci siamo chiediamogli anche come sta la famiglia, l'unghia
incarnita e quel fastidioso rossore sul culo del pupo!!!
Antonio

 E come faccio a salvare i record delle risposte esatte da un'altra parte ?
Associ il gruppo di opzioni ad un campo della tabella/query di origine dei
dati.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 


 Namor
-- 
questo articolo e` stato inviato via web dal servizio gratuito 


 Ciao Roberto.
Si, ma ci sono alcuni dettagli da correggere.
Sarebbe meglio evitare di fare domande dirette ad una sola persona in
particolare, è contro lo spirito di collaborazione del ng. A me
personalmente dà fastidio, e potrebbero esserci tanti altri che sanno la
risposta e magari non la scrivono perchè il post non è per loro. Io
nemmeno li leggo i post con oggetto "Per <nome>". Se poi quello è in ferie
o non ha voglia o tempo di risponderti, il tuo problema resta irrisolto.
Se uno comincia a rispondere ad una tua richiesta, visto che ormai ha ben
chiara la situazione solitamente continua finchè non si risolve il
problema, come si può notare dai numerosi thread precedenti.
Il ng non è il luogo adatto per le conversazioni private uno a uno, per
quello ci sono le email, ma nessuno dei tanti esperti di access che puoi
trovare qui ti risponderà mai privatamente via email.
E non si scrive l'oggetto tutto in maiuscolo, equivale a gridare.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 


Antonio Biso ha scritto:



Ciaooo bel tenerone! Da quanto tempo non ci si sente! Che piacere vedere
che c'è qualcuno che si interessa a te. In famiglia tutto bene, mia
sorella si laurea a marzo, adesso è in laboratorio a bologna a far
crescere batteri. Non ho mai avuto problemi con le unghie tranne un paio
di volte che me le sono schiacciate e mi sono cadute, e per ora non ho
pupi nè moglie nè morose.
E tu che mi racconti, eh, che mi racconti?
Saluti.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 


 sorella si laurea a marzo, adesso è in laboratorio a bologna a far
Interessante....
Antonio

 Antonio
Naaaa... non è il tuo tipo. Alta, magra, figa... proprio non fa per te!
Eheheh!


 Namor
Bocciofila?
Antonio

 Antonio
No basket, no golf. Il giusto compromesso.


 Namor
Mi sembra di ricordare che devo effettuare delle installazioni
all'universitą di bologna...
hmmm....
Antonio

 Antonio
Se ti infetti con le sue colture di batteri e ti viene il cagotto, poi non
venire a piagnucolare da me, eh!?!


 Namor
Non ti preoccupare: io pratico il sesso sicuro!!!
Antonio

 Antonio
Nel senso che fai da solo, così non ci sono rischi?


Prima di tutto volevo SCUSARMI con NAMOR, ANTONIO e il forum se non ho
seguito un comportamento corretto nel postare i miei quesiti.
Ritornando al db dei quiz, ieri pomeriggio ho provato a calcolare con il
count() il N° delle risposte esatte ma mi è sembrato ovio che erravo,
nella maschera lo scritta cosi:
count([Risp_1])
e ovviamente mi restituia il valore 10 (visto che le domande sono 10)
mentre lo scopo è che volta x volta 
che si indovina la risposta il contatore si aggiorna.
Aiutooo!
E poi il discorso che scegliendo cliccando sull'opzione con la risposta
giusta dopo aver premuto un bottone mi venga restituita una msbox con il
testo "Esatto" o "Errato".
Grazie, e ancora tante mie scuse !
-- 


Prima di tutto volevo SCUSARMI con NAMOR, ANTONIO e il forum se non ho
seguito un comportamento corretto nel postare i miei quesiti.
Ritornando al db dei quiz, ieri pomeriggio ho provato a calcolare con il
count() il N° delle risposte esatte ma mi è sembrato ovio che erravo,
nella maschera lo scritta cosi:
count([Risp_1])
e ovviamente mi restituia il valore 10 (visto che le domande sono 10)
mentre lo scopo è che volta x volta 
che si indovina la risposta il contatore si aggiorna.
Aiutooo!
E poi il discorso che scegliendo cliccando sull'opzione con la risposta
giusta dopo aver premuto un bottone mi venga restituita una msbox con il
testo "Esatto" o "Errato".
Grazie, e ancora tante mie scuse !
-- 
questo articolo e` stato inviato via web dal servizio gratuito 


 Grazie, e ancora tante mie scuse !
Metti nella maschera un pulsante per la conferma della risposta, da
premere per confermare e spostarsi sulla prossima domanda. Nell'evento
click, prima di spostarti sul prossimo record, fai il controllo:
    If Me.Risposta = 1 Then MsgBox "ESATTO!" Else MsgBox "SBAGLIATO!"
    DoCmd.GoToRecord , , acNext
Per il contatore puoi usare una variabile a livello di maschera
(dichiarata fuori dalle varie sub), inizializzarla a zero sull'evento
form_open e incrementarla quando viene data una risposta esatta.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 


 Namor
Grazie vado a verificare ti faccio sapere, CIAO
-- 


RobertoAcc ha scritto:




Togli dalla maschera i pulsanti di spostamento, in modo che l'unico
sistema per spostarsi tra i record sia il tuo pulsante personalizzato, che
porta solo in avanti e mai indietro. Controlla anche, prima di spostarti,
che sia stata effettivamente scelta una delle quattro risposte (il gruppo
di opzioni non sia rimasto in bianco).
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 


namor ha scritto:





Ma nel controllo che hai scritto :
If Me.Risposta = 1 Then MsgBox "ESATTO!" Else MsgBox "SBAGLIATO!"    
DoCmd.GoToRecord , , acNext
Risposta va poi a riferirsi al gruppo di opzioni ?
scusa se la domanda è banale ?
-- 


 end if
Le 4 checkbox si devono chiamare "Valore1", "Valore2", 3 e 4 e le 4
etichette
"Risposta1", "Risposta2", 3 e 4. I nomi dei campi provenienti dalla query
che seleziona le 10 domande a caso sono Risp_1, 2, 3 e 4. Se vuoi usare
altri nomi basta che li cambi nel codice.
Ogni volta che visualizzi un record (form_current) la sub calcola
casualmente le 4 posizioni nell'array a() e poi assegna alle 4 etichette
del gruppo di opzioni il testo della risposta, e alle 4 checkbox i
corrispondenti valori da 1 a 4.
Namor
******************************************************************************
Non ho capito come fornendo ad un tasto il seguente codice:
If Me.Risposta = 1 Then MsgBox "ESATTO!" Else MsgBox "SBAGLIATO!" 
DoCmd.GoToRecord , , acNext
il db vada a confrontare l'opzione scelta (che ciascuna si chiama
"Valore1", "Valore2", 3 e 4 le cui etichette
si chiamano "Risposta1", "Risposta2", 3 e 4).
Cioè il mio dubbio e sulla parola "Risposta" tra l'altro il campo della
tabella delle risposte giuste si chiama "Risp_1".
forse "Risposta" è il nome da dare al "gruppo di opzioni" ?
Scusami ancora per la probabile banalità della mia domanda.
Grazie, ciao.


 Grazie, ciao.
<rispondo qua perchè sull'altro post mi dà un errore>
Si, si riferisce al gruppo di opzioni.
Come funziona un gruppo di opzioni?
Lo puoi considerare come un controllo unico, che contiene una o più coppie
di opzioni (checkbox+etichetta), ognuna con un proprio valore che si
imposta nella scheda delle proprietà nella riga "Valore opzione".
Quando selezioni una delle checkbox, il gruppo di opzioni assume il valore
di quella checkbox. E' per questo che quando ne selezioni una le altre si
svuotano in automatico (a meno che non ce ne siano due o più con lo stesso
valore).
Quindi il tuo controllo non sarà
  if me.valore1=true then...
  if me.valore2=true then...
  .....
ma solamente
  if me.risposta=....
oppure
  select case me.risposta
Di solito non ci si preoccupa nemmeno di cambiare il nome predefinito alle
checkbox ("OpzioneXX") e alle etichette ("EtichettaXX") perchè non le si
usa nel codice.
Qui, per chiarezza e leggibilità del codice, e per il corretto
funzionamento della procedura (dovevano essere numerate da 1 a 4 per
poterle scorrere con un ciclo for), è stato necessario cambiare i nomi
predefiniti.
Nel tuo caso ti basta testare se il valore del gruppo di opzioni è uguale
a uno, dato che la sub si occupa di impostare sempre il valore 1 alla
checkbox associata alla risposta esatta, in qualunque posizione vada a
finire.
Non puoi fare un test del tipo "if me.valore1=true" perchè la risposta
giusta non sarà sempre associata alla checkbox 1.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 


Ti scrivo qui, anche a me ha dato errore:
*********
OK sei stato SUPER-ESAURIENTE, nella tua risposta. Ti faciio sapere l'esito
**********
-- 


Scusa se ti scrivo qui ma sull'ultimo post mi da errore !
Si è andato tutto bene !!!!
In oltre ho disabilitato il tasto che mi da il msg di risposta giusta o
sbagliata 
(che ho chiamato "OK"), e nell'evento after_Update del gruppo di opzioni
ho imposto che 
OK.Enabled = True
che come tu sai significa che se non viene selezionata nessuna opzione il
tasto OK rimane disabilitato.
In questo modo sono sempre obbligato a selezionare una risposta (e quindi
il tasto OK si attiva).
L' unica cosa che non mi piace e che quando passo al record successivo 
ovvero alla domanda successiva,
il tasto OK rimane abilitato (invece di ritorare disabilitato) nonostante
le opzioni non sono state selezionate. 
Come posso ovviare ?
L'ultima cosa che mi rimane da fare è il contatore delle risposte esatte
da porre sulla maschera,
che francamente non so come si dichiara una variabile a livello di
maschera ecc insomma l'ultima cosa che mi hai postatoi ieri.
Ciao !
-- 


 Ciao !
La variabile la dichiari come al solito
  Dim esatte as integer
ma invece di metterla dentro a una sub la metti in testa al modulo, subito
dopo option explicit e option compare. Dichiarandola lì sarà visibile da
tutte le sub. Poi la imposti a zero su form_open e la incrementi in caso
di risposta esatta.
Al posto della variabile puoi anche usare una casella di testo non
associata (bloccata in modo che l'utente non la possa modificare).
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 


Si preferirei mettere una text non associata ma all'interno cosa ci scrivo
?
=count(___) ???
-- 


 =count(___) ???
Niente. Se è non associata non deve esserci scritto niente.
La imposti a zero su form_open, e dove fai il msgbox la incrementi con
me.nomecasella=me.nomecasella+1
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 


 Namor
**************************
Scusa se sto continuando a scrivere qui ma mi da errore nei post
precedenti.
cioe la imposto a zero significa cosě:
Private Sub Form_Open(Cancel As Integer)
nomecasella=0
me.nomecasella=me.nomecasella+1
End Sub
ed in questo modo mi fornisce il n° risposte esatte ?
Ciao !
-- 


 Ciao !
Si, lì la imposti a zero, ma la incrementi quando fai la verifica della
risposta sul click del pulsante, sennò resta fissa sul valore uno.
Non ho ancora capito bene come mai su una parte di questo thread non si
riesca a postare, mi spiace dover spargere le risposte qua e là, ne va
della leggibilità del discorso.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 
