asp - asp.net - aspcode.it

COMMUNITY - Login
 Username:
 
 Password:
 
Voglio registrarmi!
Password dimenticata?
 Utenti on-line: 0
 Ospiti on-line: 5995
ASPCode.it - Store

  > > Tips

Estrarre record in maniera casuale
di Massimiliano Luciani

Data di pubblicazione: 05/08/2002        Voto della community: 3,33 (Votanti: 4)

Vogliamo estrarre un record a caso da una tabella di un database?
Niente di più semplice. Ecco un esempio sviluppato in VBScript:

  1. La tabella da interrogare deve avere un campo chiave primaria di tipo numerico (in ACCESS di tipo contatore) nominato "ID"
  2. Individuiamo il valore massimo e il valore minimo presenti nel campo ID
  3. Calcoliamo un numero casuale compreso tra il valorea massimo ed il valore minimo, che individuerà il nostro record casuale
  4. Effettuiamo la query per estrarre il record imponendo il filtro >= per non correre il rischio di ricercare un ID non più esistente a causa di una precedente eliminazione
  5. Visualizziamo a video il risultato

<%@Language=VBScript%>
<%Option Explicit%>
<%
Dim objConn, objRSrnd, strProvider, strPathDB, SQL

' Impostiamo la stringa di connessione al DB
strProvider = "Provider=Microsoft.Jet.OLEDB.4.0; data source="
strPathDB = "d:\rootdatabase\database.mdb"

' Apriamo la connessione al DB
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open strProvider & strPathDB

' Impostiamo la SQL per estrarre MAX e MIN
SQL = "SELECT Max(ID) AS MaxID, Min(ID) AS MinID FROM tabella"

' Eseguiamo la query
Set objRSrnd = objConn.Execute(SQL)

' Memorizzo il min e max in 2 variabili di comodo
Dim maxID, minID, rndID
maxID = objRSrnd("MaxID")
minID = objRSrnd("MinID")

' calcoliamo l'ID casuale con la formula
' Int((limitesup - limiteinf + 1) * Rnd + limiteinf)
Randomize

rndID = Int((maxID - minID + 1) * Rnd + minID)

' Impostiamo la query per estrarre il record casuale
SQL = "SELECT TOP 1 * " & _
      "FROM tabella " & _
      "WHERE ID >= " & rndID

' Eseguiamo la query
Set objRSrnd = objConn.Execute(SQL)

' Visualizziamo i risultati della query
Response.Write "Record casuale:<br>"

Dim fld
For Each fld In objRSrnd.Fields
  Response.Write "<b>" & fld.Name & ":</b> " & objRSrnd(fld.Name) & "<br>"
Next

objRSrnd.Close
Set objRSrnd = Nothing

objConn.Close
Set objConn = Nothing
%>

E' bene notare che la probabilità che venga selezionato un record preceduto da record precedentemente eliminati è più alta rispetto agli altri; la situazione di perfetta casualità si avrà solo nel caso in cui i valori del campo ID siano consecutivi, senza cancellazioni all'interno della serie.




Utenti connessi: 5995