Ciao a tutti !!!
![]()
Ho fatto un piccolo script che mi estrae e stampa in modo casuale dei nomi da un db.
Vorrei mettere un controllo per stampare tutti i nomi senza ripetizioni.
Ideee??? io non ne ho
Grazie per l'aiuto
Ciao a tutti !!!
![]()
Ho fatto un piccolo script che mi estrae e stampa in modo casuale dei nomi da un db.
Vorrei mettere un controllo per stampare tutti i nomi senza ripetizioni.
Ideee??? io non ne ho
Grazie per l'aiuto
vediamo lo script
Tutti vogliono parlare, nessuno sa ascoltare.
Ciao e grazie
Lo script a seguire, io per ora sto lavorando su di una teoria, ossia se una volta scritto il nome faccio aprire una connessione e faccio scrivere un valore di fianco al nome la selct che mi stampa il nome avrà un modifica dove andrà a stampre solo i nomi senza il valore aggiunto alla fine dei nomi faccio cancellare i valori scritti ma mi sa di troppo elaborato.
Listato :
Graziecodice:<% Dim fine dim Conn10 set Conn10 = server.createobject ("Adodb.Connection") dim rs10 set rs10=server.CreateObject("Adodb.recordset") Conn10.ConnectionString="provider=Microsoft.jet.oledb.4.0;Data Source=" & Server.MapPath ("/mdb-database/data.mdb")& ";" Conn10.Open dim id dim nome rs10.Source="select id,nome from Tabella ;" rs10.Open ,conn10 while not( rs10.eof) id=rs10(0) nome=rs10(1) rs10.MoveNext wend rs10.Close Dim Numero fine = id Randomize Numero = 1 + int(Rnd * id) if Numero = fine then Response.write "fine " else 'Response.write Numero rs10.Source="select * from Tabella where id=("& Numero &") ;" rs10.Open,conn10 response.write rs10("Nome").value rs10.Close end if %>
se non vuoi scrivere nel DB fai una cosa del tipo: memorizzi per esempio in un vettore le chiavi dei record letti. ne scegli uno a caso e lo cancelli dal vettore. quindi fai la seconda scelta con n-1 elementi e così via. più efficiente se usi una sistema tipo pila
Gli uomini si dividono in due categorie: i geni e quelli che dicono di esserlo. Io sono un genio.
Mi sembra una soluzione buona ma se riesci mi fai un esempio?
Per vettore intendi array?
se si come imposto il tutto?
Grazie per l'aiuto
si un vettore è un array
beh non ho tempo di star qua a scriverti il codice. cmq non è complicato.
- fai una select e riempi il vettore con tutti gli id letti.
- dichiari un vettore dinamico da rs.recordcount elementi
- fai un ciclo While numero_elementi_vettore > 0
- scegli numero random da 0 a upper bound dell'array
- select nome where id = numero_random
- stampa nome
- ridimensiona l'array togliendo il n estratto
oppure puoi risparmiare la select dentro il ciclo memorizzando fin da subito il nome a fianco dell'id nel vettore
Gli uomini si dividono in due categorie: i geni e quelli che dicono di esserlo. Io sono un genio.
Conosci la proprietà Filter dell'oggetto recordset?
No longline ma provo a trovare qualche guida
Mi pare di aver capito che filter si usa con il recordset ma con l'array come lo applico?
Io farei così:
- crea una stringa in cui accoderai gli id già estratti. Non crearla vuota, ma con già uno zero dentro, ad es:
strIdEstratti = "0"
- apri il tuo recordset senza filtri e conta i record
- imposta un ciclo che si ripeta tante volte quanti sono i record (usa un FOR)
- dentro al ciclo devi eseguire questi passi:
1. applica il filtro in questo modo:
Nomerecordset.Filter = "id NOT IN(" & strIdEstratti & ")"
2. a questo punto conti i record e tra questi ne estrai uno e ci fai quello che ti serve
3. l'id estratto lo accodi alla stringa degli id estratti:
strIdEstratti = strIdEstratti & ", " & idEstratto
4. rimuovi il filtro:
Nomerecordset.Filter = ""
5. cicla