48 messaggi dal 01 aprile 2004
ho necessità di estrarre dei record in maniera casuale da database access : i campi sono FOTO, STRUTTURA e DESCRIZIONE.

ho provato i vari script che ci sono ma estraggono sempre il primo record io vorrei un record diverso ad ogni reload.

Qualcuno può aiutarmi a realizzare questo script.


Grazie Mille per l'aiuto
2.410 messaggi dal 13 febbraio 2003
Contributi
"tancio" <tancio@nntp.aspitalia.invalid> ha scritto nel messaggio
news:230670@nntp.aspitalia.com...
ho necessità di estrarre dei record in maniera casuale da database access
: i
campi sono FOTO, STRUTTURA e DESCRIZIONE.
ho provato i vari script che ci sono ma estraggono sempre il primo record
io vorrei
un record diverso ad ogni reload.
Qualcuno può aiutarmi a realizzare questo script.
buona lettura http://www.aspitalia.com/liste/usag/script.aspx?ID=249
48 messaggi dal 01 aprile 2004
Grazie per la segnalazione.

Il problema è che mi estrae sempre il primo record che trova cioè l'ID numero 1
16 messaggi dal 10 gennaio 2005
<%@LANGUAGE = JScript%>
<%
// Creo gli oggetti Connection e Recordset
    var Cn = new ActiveXObject("ADODB.Connection");
    var Rs = new ActiveXObject("ADODB.Recordset");

// Apro la connessione ed il Recordset
    Cn.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" + Server.MapPath("nome_database.mdb"));
    Rs.Open("SELECT campo FROM tabella", Cn, 3, 3);

// Conto i record nel database e mi posiziono sul primo
    var Quanti = parseInt(Rs.RecordCount);
    Rs.MoveFirst();

// Estraggo il primo record a caso
    var Casuale = parseInt(Math.random() * Quanti);
    Rs.Move(Casuale); // Mi muovo verso un record a caso
    Response.Write(Rs("campo") + "<br>")

// Conto i record nel database e mi posiziono sul primo
    var Quanti = parseInt(Rs.RecordCount);
    Rs.MoveFirst();

// Estraggo il secondo record a caso
   var Casuale = parseInt(Math.random() * Quanti);
    Rs.Move(Casuale); // Mi muovo verso un record a caso
    Response.Write(Rs("campo") + "<br>")
    
// Conto i record nel database e mi posiziono sul primo
    var Quanti = parseInt(Rs.RecordCount);
    Rs.MoveFirst();
    
// Estraggo il terzo record a caso
    var Casuale = parseInt(Math.random() * Quanti);
    Rs.Move(Casuale); // Mi muovo verso un record a caso
    Response.Write(Rs("campo") + "<br>")


    Rs.Close();
    Cn.Close();
%>



oppure ed è meglio:

strAccessDB = "Tuo_Database.mdb"
Set Conn = Server.CreateObject("ADODB.Connection")
strCon = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath(strAccessDB)
Conn.Open strCon
Set rs = Server.CreateObject("ADODB.Recordset")
query = "SELECT * FROM NomeTabella"
rs.Open query,Conn,3,3
if not rs.EOF then
  N = 3 'numero di record casuali da visualizzare
  Randomize
  max = rs.RecordCount-1
  redim arr(max)
  'popolo l'array da 0 al numero di record 
  for i=0 to max
  arr(i)=i
  next
  'mischio i numeri in modo casuale
  for i=0 to max
    casuale = Int((max)*Rnd)
  temp = arr(i)
  arr(i) = arr(casuale)
  arr(casuale) = temp
  next
  'visualizzo gli N record casuali
  for i=0 to N-1
    rs.Move arr(i)
    Response.Write rs("Campo") & "<br>"
    rs.MoveFirst 
  next
end if



Dove "campo" è il nome del campo del database
593 messaggi dal 09 ottobre 2002
www.dotnetside.org
In effetti nello script segnalato c'è una piccola imprecisione dovute forse a distrazione da parte dell'autore del topic (Daniele non me ne volere, domani sera ti offro un bicchiere di vino per farmi perdonare)

Rintraccia questa riga:
strSQL = "SELECT Top 1 ID, titolo FROM tabella Where ID = "

Modificala così:
strSQL = "SELECT * FROM tabella Where ID = " & intRandom

e ritenta.... sarai più fortunato

P.S. Per Miki1953: non discuto sulla bontà del tuo suggerimento ma mi pare che Tancio desiderasse uno script che estraesse un solo record a caso e non, come dovrebbe fare il tuo script, una serie di records.
Se così non dovesse essere, chiedo scusa e invito Tancio a provare il tuo suggerimento o, se lo dovesse provare piu pratico, quello che ho suggerito ieri ad un'altro utente:
http://forum.aspitalia.com/forum/topic.aspx?PostID=230467
Modificato da vitosulla il 07 marzo 2005 17.32 -

Pochi post. Anzi, quasi quasi spengo
http://www.dotnetside.org/
48 messaggi dal 01 aprile 2004
Grazie mille funziona!!

ancora una cosa i record che devo estrarre devo essere tutti dello stesso operatore.

es.

Campo (struttura) campo (descrizione) e campo (foto) dell'operatore con id=x
593 messaggi dal 09 ottobre 2002
www.dotnetside.org
Quale suggerimento hai applicato?

Se si tratta della correzione allo script di Daniele Bochicchio devi semplicemnte modificare la query così ada aggiungere un'ulteriore clausola alla condizione WHERE:
strSQL = "SELECT * FROM tabella WHERE ID = " & intRandom & " AND campo_ID_operatore = " & campoOpID

Ovviamente dovrai prima valorizzarti la variabile campoOpID riferito all'operatore.

Ciao
Modificato da vitosulla il 07 marzo 2005 17.52 -

Pochi post. Anzi, quasi quasi spengo
http://www.dotnetside.org/
48 messaggi dal 01 aprile 2004
Ho applicato il suggerimento di Miki1953,
il secondo suggerimento.

Questo:

strAccessDB = "Tuo_Database.mdb"
Set Conn = Server.CreateObject("ADODB.Connection")
strCon = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath(strAccessDB)
Conn.Open strCon
Set rs = Server.CreateObject("ADODB.Recordset")
query = "SELECT * FROM NomeTabella"
rs.Open query,Conn,3,3
if not rs.EOF then
N = 3 'numero di record casuali da visualizzare
Randomize
max = rs.RecordCount-1
redim arr(max)
'popolo l'array da 0 al numero di record
for i=0 to max
arr(i)=i
next
'mischio i numeri in modo casuale
for i=0 to max
casuale = Int((max)*Rnd)
temp = arr(i)
arr(i) = arr(casuale)
arr(casuale) = temp
next
'visualizzo gli N record casuali
for i=0 to N-1
rs.Move arr(i)
Response.Write rs("Campo") & "<br>"
rs.MoveFirst
next
end if





Volevo un chiarimento:

è vero estraggo solo 3 campi di un record ho cambiato la clausola N = 3 in N = 1 e funziona molto bene.

Volevo sapere però se c'è pericolo che questo script mi manda in blocco il sito perchè ho notato che alla fine dello script non c'è la chiusura del database ne lo scarico dell'oggetto.


scusate non sono un esperto spero di essermi spiegato
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.