|
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 valore 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 etrarre il record casuale
SQL = "SELECT * " & _
"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> "
Response.Write objRSrnd(fld.Name) &"<br>"
Next
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 (lo
stesso vale quando si usa come filtro la condizione <=, in questo caso è
più probabile che venga selezionato un record cui seguono molti record
eliminati); la situazione di perfetta casualità si avrà solo nel caso in
cui i valori del campo ID siano consecutivi, senza delezioni all'interno
della serie.
A cura di
Massimiliano Luciani |