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

Discussione: Estrazione random

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    666

    Estrazione random

    sto provando a fare una estrazione casuale dal db ma mi da un errore:



    Microsoft JET Database Engine errore "80040e14'

    Errore di sintassi (virgola) nell'espressione della query 'id >= 6,11080193519592'.

    lista.asp, riga 46



    questo è il codice trovato su aspitalia.com:


    codice:
    set conn = Server.CreateObject("ADODB.Connection")
    conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mappath("mdb-database/nuovo.mdb") & ";"
    
    SQL = "SELECT MAX(id) AS MaxId FROM tbldati"
    set rs = conn.Execute(SQL)
    If Not rs.Eof Then
        MaxId = rs("MaxId") 
    Else
        MaxId = 0
    End If
    
    Rs.Close : Set rs = Nothing
    %>
    
    <%
    Randomize
    RandomNumber = Rnd * MaxId
    %>
    
    <%
    
    SQL = "SELECT TOP 1 * FROM tbldati WHERE id >= " & RandomNumber
    set rs = conn.Execute(SQL)  <--- questa è la riga 46 <----
    If Not rs.Eof Then
        Response.Write rs("marca") & " - " & rs("modello")
    Else
        Response.Write "Niente da visualizzare"
    End If
    
    %>
    Ci sono errori o è il db?

    Thanks
    AltF4

  2. #2
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Se non converti l'esito del random in numero intero la funzione come vedi ti restituisce una valore decimale che ovviamente come contatore non potrà mai esistere...

    codice:
    RandomNumber = Cint(Rnd * MaxId)
    Roby

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    666

    Grazie!!!

    funziona, ma volevo chiederti una cosa.

    secondo te è normale che per la maggior parte delle volte visualizza il primo record e solo qualche volta gli altri?

    codice:
    <%
    ' Open Connection to the database
    set conn = Server.CreateObject("ADODB.Connection")
    conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mappath("auto.mdb") & ";"
    
    SQL = "SELECT MAX(id) AS MaxId FROM tbldati"
    set rs = conn.Execute(SQL)
    If Not rs.Eof Then
        MaxId = rs("MaxId") 
    Else
        MaxId = 0
    End If
    
    Rs.Close : Set rs = Nothing
    %>
    
    <%
    Randomize
    RandomNumber = Cint(Rnd * MaxId)
    %>
    
    <%
    
    SQL = "SELECT TOP 1 * FROM occasioni WHERE id >= " & RandomNumber
    set rs = conn.Execute(SQL)
    
    Response.Write rs("marca") & " - " & rs("prezzo")
    %>
    potrebbero essere solo dei casi?

    grazie ancora
    AltF4

  4. #4
    Utente di HTML.it L'avatar di 99eros9
    Registrato dal
    Jan 2003
    Messaggi
    2,637
    prova a simulare il gioco dei dati craps e lo scoprirai
    comunque i valori sono pseudo casuali e si basano, in linea generale, su di un dato di base che può essere l'ora corrente o un valore che tu scegli come base... nel tuo caso il valore di base che stai passando è MAX(id) e dal momento che il valore è, almeno nelle tue prove, quasi sempre lo stesso... le operazioni matematiche procurano risultati molto più "falsati" che se usassi un valore che cambia ad ogni istante.. come l'ora, appunto!... potrebbe essere una spiegazione piuttosto logica
    Tala är silver men tiga är guld!
    Pubblica il tuo curriculum
    Segnala il tuo sito
    Ancl

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    666
    Il tuo ragionamento non fa una piega, ma con questo sistema non è possibile ottenere un effetto random accettabile?

    sto continuando a provare, ma nel 90% dei casi mi riporta il primo record e raramente, solo raramente gli altri?

    posso ovviare in qualche modo o devo cambiare funzione?
    AltF4

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    666
    mah.. dopo altre prove ho notato che alla prima esecuzione del file visualizza sempre e soltanto il primo record!!

    devo fare parecchi refresh prima che visualizzi almeno un'altro diverso dal primo.

    siccome la pagina non sarà mai aggiornata, suppongo che non funzioni mai l'effetto random!!

    giusto??
    AltF4

  7. #7
    Utente di HTML.it L'avatar di 99eros9
    Registrato dal
    Jan 2003
    Messaggi
    2,637
    Il random viene prodotto quando il server elabora la richiesta della pagina.

    Non puoi ovviare, perchè la base dati uscirebbe dal limite che corrisponde al numero totale dei tuoi record...
    comunque la mia era solo una spiegazione vagamente logica
    Non è detto che tu nel gioco non sia particolarmente sfigato :-)

    fai provare a fare il refresh ad un altro :maLOL:
    Tala är silver men tiga är guld!
    Pubblica il tuo curriculum
    Segnala il tuo sito
    Ancl

  8. #8
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Prova con

    Randomize Timer

    Roby

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    666
    Andrebbe bene così?

    <%
    Randomize
    RandomTimer = Cint(Rnd * MaxId)
    %>
    AltF4

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    666
    lo so, ho detto una ca**ata!! VVoVe:

    ma come faccio?
    AltF4

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.