Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    Random e aggiunta record

    TEmpo fa avevo scritto questo codice per l'estrazione di due record alla volta con un random ad ogni accesso:
    codice:
    call apridb("SELECT ID, Foto, Homepage, Pag_info, Nome, Indirizzo FROM locale WHERE Homepage=true", rs, conn)
    Dim numero1, numero2, massimo 
    massimo = rs.RecordCount 
    
    Randomize() 
    if massimo > 0 then 
    numero1 = Int(massimo*Rnd())+1 
    end if 
    if massimo > 1 then 
    do 
    numero2 = Int(massimo*Rnd())+1 
    loop while numero2 = numero1 
    end if 
    %> 
    <td valign="top">
    <%if massimo>0 then%> 
    <table width="100%" border="0" align="center" cellpadding="0" cellspacing="0"> 
    					<% 
    						for i = 1 to 2 
    						if massimo >= i then 
    						rs.MoveFirst() 
    						rs.Move(eval("numero" & i)-1)
    					%> 
    		
    
    		<tr> 
    				<% nome = rs("Nome")
    				   nome1 = Server.URLEncode (nome)
    				
    				If rs("Pag_info") = True Then%>
    					<td ........</td>
    				<%Else%>
    					<td ........</td>
    				<%End if%>
    				</tr> 
    				<tr> 
    				<td align="center" class="titolo"><div align="center"><%=rs("Nome")%></div></td> 
    				</tr> 
    				<tr> 
    				<td align="center" class="testo"><div align="center"><%=rs("Indirizzo")%>
     
    				
     
    				</div></td> 
    				</tr> 
    				
           
    <% 
    end if 
    next%>
    Ma se voglio mostrarne tre? Cosa deve cambiare? :master:

  2. #2
    ci sto provando da 5 gg, ma ancora niente. Non posso creare una variabile, che associata ad un numero, mi estrae tanti record quanto vale il numero? Ma deve sempre rimanere l'effetto random

  3. #3
    Si può fare, ma non ha molto senso, la funzione deve essere fatta con un ciclo che selezioni tanti records quanti tu gli dici di volta in volta, in modo da poterla riutilizzare cambiando ogni volta solo il numero dei record da estrarre.....ma, in tal caso, il codice va modificato in modo radicale.

    Per adattare questa a tre records.......ma è orribile....dovresti aggiungere

    codice:
    if massimo > 2 then 
    do 
    numero3 = Int(massimo*Rnd())+1 
    loop while ((numero3 = numero2) OR (numero3 = numero1)) 
    end if
    dopo il secondo end if

    e poi fare il ciclo di stampa non

    for i=1 to 2

    ma

    for i=1 to 3

    Comunque ti consiglio di rifarlo da capo cercando di capirne il funzionamento, un piccolo sforzo subito e poi ti soddisferà di più.......

    E' nato www.lombardiamotori.it

    www.universocase.it: il primo portale italiano di annunci immobiliari gratuiti e autogestiti!

  4. #4
    Ok, grazie, si lo so, devo rifarlo tutto, ma era per poterlo mettere on line subito! Poi con calma mi dedicherò al rifacimento toatle :tongue:

  5. #5
    Ok, fammi sapere se con questo rattoppo finz
    E' nato www.lombardiamotori.it

    www.universocase.it: il primo portale italiano di annunci immobiliari gratuiti e autogestiti!

  6. #6
    Certo, funziona perfettamente!!!
    Ma non ho capito; perchè poi non ti gusta più di tanto questo codice Alla fine va senza problemi...

    Cosa mi consiglieresti di fare diversamente? A me piacerebbe poter decidere cambiando solo il numero di una variabile, quanti record mostrare

  7. #7
    Infatti, la cosa si può realizzare con un ciclo tipo:

    codice:
    Set Rs1 = Server.CreateObject("ADODB.Recordset")
    sql1 = "SELECT COUNT(*) FROM locale"
    Rs1.open sql1, objConn
    
    dim max
    max = RS1(0)
    
    if max=0 then 
    response.write("database vuoto!")
    
    else
    
    Set Rs2 = Server.CreateObject("ADODB.Recordset")
    sql2="SELECT * FROM locale"
    Rs2.Open sql2, objConn
    
    Randomize()
    dim k, casual(1000), check, numero
    
    numero=5   'questo è il numero dei record che vuoi pescare a caso!!
    cont = 0
    check=false
    
    do while not cont>(numero - 1)
    rs2.movefirst
    
    casual(cont) = Int(Rnd() * Max) 
    
    ' //// routine per evitare doppioni ////////////////////////////////
    ' (se trova un record già estratto torna su senza incrementare cont)
    ' //////////////////////////////////////////////////////////////////
    	for k=0 to (cont-1)
    		if casual(cont)=casual(k) then check=true 
                    end if	
    	next
    ' ///////////////////////////////////////////////////////////////////
    
    If Not (Rs2.EOF OR check) Then
    Rs2.Move casual(cont)
    
    	ID=RS2("ID")
    	foto=RS2("foto")
             'ecc. ecc........................
    	
    %>
    <tr>	
    	<td ><%=id %></td>
            <td ><%=foto %></td>
    </tr>
    <%
    
    cont=cont + 1
          
    check=false
    
    end if
    
    	loop
    	
    %>
    </table></center>
    <%
    end if
    
    Rs1.Close
    Set Rs1 = Nothing
    
    Rs2.Close
    Set Rs2 = Nothing
    adattato, naturalmente, al database usato.

    "Numero" è appunto il numero di records da pescare a caso.

    Se esistono dei records vuoti bisogna inserire un controllo per evitarli.

    E' nato www.lombardiamotori.it

    www.universocase.it: il primo portale italiano di annunci immobiliari gratuiti e autogestiti!

  8. #8
    Appena lo provo ti faccio sapere, grazie mille

  9. #9
    Mi dice prevista istruzione "end if" dove hai messo il controllo del doppione.

    Premetto che ho adattato il codice al mio data!

  10. #10
    Allora, per ora ho escluso la parte del controllo, cosi intato ho provato il codice. Sarebbe perfetto, però io devo fare le select con un where campo = true. Con la select count non me lo permette.
    Io faccio la where perchp il random va fatto solo su quei determinati campi.
    Aspetto notizie...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.