593 messaggi dal 09 ottobre 2002
www.dotnetside.org
Dipende da come hai costruito la funzione random!
Lo script segnalato è concettualmente corretto, per di più,
nel post che ti ho segnalato, ho provveduto ad implementare la funzione di generazione dei random tenuto conto di quelli straibili.

Forse dovresti rivederti il topic.

Diversamente, prova a postare lo script che hai creato e vediamo di capirci un po'

Pochi post. Anzi, quasi quasi spengo
http://www.dotnetside.org/
162 messaggi dal 07 novembre 2003
Il fatto che hai modificato il tuo vecchio post l'ho notato
Guarda, il mio codice è:
Dim objSizRs2, address, image, nome
    Dim MinID, MaxID, arrayID, n, strSizID, i, DiffID, ID, strRange
    Set objSizRs2 = Server.CreateObject("ADODB.Recordset")
    
    'Estraggo il Minimo ed il Massimo ID
      strSizSQL = "SELECT MIN(ID_Credits) AS Minimo, MAX(ID_Credits) AS Massimo FROM "&strSizTablePrefix&"Credits;"
      objSizRs2.Open strSizSQL, objSizConn
      If Not objSizRs2.Eof Then  
       MinID=CInt(objSizRs2("Minimo"))
       MaxID=CInt(objSizRs2("Massimo"))
      End If 
      objSizRs2.Close 

    Function randomID(MinID,MaxID)   
     DiffID = MaxID - MinID   
     randomID = CInt(Rnd() * DiffID + MinID)
    End Function
    
    Randomize()
    ' Estraiamo gli ID che assegneremo all'array bidimensionale con .GetRows
    ' estraiamo con un ciclo dall'array tutte le occorenze di ID costruendoci 
    ' una stringa di con tutti gli ID separati da spazi (es.: strID)
    strSizSQL = "SELECT ID_Credits FROM "&strSizTablePrefix&"Credits;"
    objSizRS2.Open strSizSQL
    arrayID = objSizRS2.GetRows()
    ' Ciclo costruzione stringa
    FOR n = 0 TO UBOUND(arrayID,2)    
      strSizID = strSizID & arrayID(0,n) & " "
    NEXT
    ' Determiniamo Minimo e Massimo degli ID
    MinID = arrayID(0,0)
    MaxID = arrayID(0,UBound(arrayID,2))
    ' Ciclo di generazione ID
    FOR i = 1 TO 3
     ID = randomID(MinID,MaxID)   
     '   Controlliamo che l'ID esista senza più preoccuparci che sia compreso nel range       
     IF Instr(strSizID, ID)     Then
           strRange = strRange & ID & ","    
     ELSE           
     ' decrementiamo il contatore per rigenerare l'ID         
       i = i-1       
     END IF
     NEXT
     ' Priviamo la stringa dell'ultima virgola
     strRange = Left(strRange,Len(strRange)-1)
     ' Al termine avremo eseguito 3 assegnazioni valide di ID e potremo eseguire la Query
     ' con la certezza di aver estratto 30 effettivi ID
     Dim objSizRs3
     Set objSizRs3 = Server.CreateObject("ADODB.Recordset")
     strSizSQL = "SELECT * FROM "&strSizTablePrefix&"Credits; WHERE ID_Credits IN (" & strRange & ");"
    
    objSizRs3.Open strSizSQL, objSizConn
        
    If Not objSizRs3.Eof Then
    Do Until objSizRs3.Eof 
'qui stampo i risultati

Grazie :)
593 messaggi dal 09 ottobre 2002
www.dotnetside.org
Certo, certo,
mi era sfuggito il controllo sulla probabile esistenza del duplicato

Rintraccia questo blocco di codice:
IF Instr(strSizID, ID) Then 
strRange = strRange & ID & "," 
ELSE 
' decrementiamo il contatore per rigenerare l'ID 
i = i-1 
END IF

e sotituiscilo col seguente:
IF Instr(strSizID, ID) AND NOT InStr(strRange, ID) THEN 
strRange = strRange & ID & "," 
ELSE 
' decrementiamo il contatore per rigenerare l'ID 
i = i-1 
END IF

Ciao

Pochi post. Anzi, quasi quasi spengo
http://www.dotnetside.org/
162 messaggi dal 07 novembre 2003
Ti ringrazio per la tua pronta risposta, ma stamoando ancora strRange mi mostra ancora ID doppi e non viene processato l'ID numero 1. Mi sembra strano però
Poi stampo i risultati cosi.
If Not objSizRs3.Eof Then
    Do Until objSizRs3.Eof 
    %>
    <tr align="center" class="smalltext">
      <%  
        Response.Write("<td width='20%'><a href=""http://www." & objSizRs3("Site_address") & """ title="& strSizTxtShow & "&nbsp;" & objSizRs3("Site_Name") &" class=""linksmalltext""><img src='"& strSizSknPathImage & imgSizCredits & objSizRs3("Site_Image") &".gif' border='0' width='88'></a></td>")
      %>
    </tr>
    <tr>
    <%
      objSizRs3.moveNext
           Loop
        Else
      response.write ("<td width='20%' class=""smalltext"">Per ora non sono inseriti Credits</td>")
         End If
      objSizRs3.Close

In questo caso mostra solo due link su tre e non li varia ad ogni refresh. Forse il problema è anche qui?
Modificato da milanopleasure il 08 marzo 2005 23.45 -

Grazie :)
593 messaggi dal 09 ottobre 2002
www.dotnetside.org
Allora milanopleasure,
il fatto che non ti estragga il numero uno dipende dalla generazione del random. Prova a rieseguirla a ripetizione e vedrai che prima o poi lo estrae.

Per quanto riguarda i doppi, in effetti la modifica che ti ho proposto, postata in tutta fretta, non era proprio percisa. Dovresti cambiare cosi:
IF Instr(strSizID, ID) AND InStr(strRange, ID)=0 THEN


Poi, scusa, non è che abbia molto senso estrarre a caso 3 records su 4 totali

Ad ogni modo, adesso lo script funziona così come vuoi; l'ho personalmente testato in locale.

Ciao

Pochi post. Anzi, quasi quasi spengo
http://www.dotnetside.org/
162 messaggi dal 07 novembre 2003
VitoSulla, hai ragione su tutto
Ho detto che ci sono 4 record per fare l'esempio, in realtà sono 50 . Era solo per non confondere le idee.

Però il fatto che non mi estrae il numero uno rimane. ho provato fare aggiorna con il tasto F5, come faccio sempre, almeno 100 volte e l'1 non esce mai.

Ti arrabbi se ti dico che in quello stesso codice, sostituisco la tua nuova correzzione, si blocca il caricamento della pagina? E' come se si impalla e non caria niente
Mi sta facendo dannare questo benedetto randomize.
Sucsami ancora per il disagio...

Grazie :)
593 messaggi dal 09 ottobre 2002
www.dotnetside.org
Apposta per te ho creato un miniDB che contiene una tabella con 27 articoli.

Chiaramente ho utilizzato lo script proposto e l'ho impostato lo script in modo da estrarne a caso 15 per volta.

L'ho pubblicato così puoi verificarne il funzionamento.

Vedrai che, in diversi tentativi, viene ricompreso anche l' "1"

Per agevolarti, ho visualizzato la stringa per il range di confronto, la stringa SQL per l'interrogazione che viene generata ed il conseguente resultset estratto dalla query.

Puoi verificarla qui:
[http]http://www.impresasulla.it/random.asp[/url]

Nel tuo caso, devi ricontrollarti bene il codice della pagina che utilizzi e verificare che non ci sia qualche errore poichè lo script in se (puro puro) funziona.

Ciao

Pochi post. Anzi, quasi quasi spengo
http://www.dotnetside.org/
162 messaggi dal 07 novembre 2003
Sei stato gentilissimo a fare queste prove, ora riguardo riga per riga il mio codice. Nel caso non dovessi venirne a capo, te lo faccio sapere.
In quel caso non è possibile allegare quella pagina che ai testato tu? Cosi posso paragonare il tuo codiuce col mio!

Ti faccio sapere al più presto, grazie ancora

Grazie :)

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.