Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 28

Discussione: Controllo Su Random

  1. #1

    Controllo Su Random

    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

  2. #2
    Utente di HTML.it L'avatar di Gioba66
    Registrato dal
    Jun 2002
    Messaggi
    2,189
    vediamo lo script
    Tutti vogliono parlare, nessuno sa ascoltare.

  3. #3

    vorrei evitare di scrivere sul db

    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 :

    codice:
    <%
    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
    %>
    Grazie

  4. #4
    Utente di HTML.it L'avatar di marco_c
    Registrato dal
    Jun 2004
    Messaggi
    1,047
    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.

  5. #5

    mi sembra una buona idea ma...

    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

  6. #6
    Utente di HTML.it L'avatar di marco_c
    Registrato dal
    Jun 2004
    Messaggi
    1,047
    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.

  7. #7
    Utente di HTML.it L'avatar di longline
    Registrato dal
    Sep 2001
    Messaggi
    5,363
    Conosci la proprietà Filter dell'oggetto recordset?

  8. #8

    longline!!!!!

    No longline ma provo a trovare qualche guida

  9. #9

    filer

    Mi pare di aver capito che filter si usa con il recordset ma con l'array come lo applico?

  10. #10
    Utente di HTML.it L'avatar di longline
    Registrato dal
    Sep 2001
    Messaggi
    5,363
    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.