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

Discussione: aggregate function

  1. #1
    Utente di HTML.it L'avatar di wegawhite
    Registrato dal
    Aug 2004
    Messaggi
    1,400

    aggregate function

    Perchè questo codice, che utilizzo per estrarre un elemento a caso da una tabella ed estrarre il numero di elementi della tabella e poi calcolo un numero casuale tra 1 e tale valore:
    codice:
    <% 
    ' apertura conn 
    strconn = "Driver={Microsoft Access Driver (*.mdb)}; DBQ="& server.mappath("/mdb-database/simple.mdb")
    set objconn = server.createobject("ADODB.connection")
    objconn.open strconn
    
    ' query SQL 
    strSQLMax = "SELECT Max(ID) as MaxVal FROM message ORDER BY ID" 
    strSQL = "SELECT Top 1 ID, content FROM message Where ID = " 
    
    ' estrai valore massimo 
    Set rs = objconn.Execute(strSQLMax) 
    intMax = rs("maxVal") 
    rs.Close 
    set rs = Nothing 
    
    ' genera valora casuale 
    Randomize() 
    intRandom = CInt ((Rnd() * intMax) + 1) 
    
    ' estrai record 
    Set rs = objconn.Execute(strSQL & intRandom) 
    
    ' visualizza in qualche modo 
    ' ... 
    
    rs.Close 
    set rs = Nothing 
    
    ' chiusura conn 
    objconn.Close 
    set objconn = Nothing 
    %>
    Restituisce:
    Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

    [Microsoft][ODBC Microsoft Access Driver] You tried to execute a query that does not include the specified expression 'ID' as part of an aggregate function.

  2. #2
    Ma che vuoi selezionare un record casuale dal db?

  3. #3
    Utente di HTML.it L'avatar di wegawhite
    Registrato dal
    Aug 2004
    Messaggi
    1,400
    Originariamente inviato da Mems
    Ma che vuoi selezionare un record casuale dal db?
    Non s'è capito bene che era questo che volevo ?

  4. #4
    Bastava dirlo, no?
    codice:
    <%
    dim iItems()
    iMaxItems = 1
    
    set conn = server.createObject("ADODB.Connection")
    conn.open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & server.mapPath("\database\db.mdb")
    
    sql = "SELECT * FROM Tabella1"
    
    set rs = server.createObject("ADODB.Recordset")
    rs.open sql, conn, 1, 3
    
    iMax = rs.recordCount
    
    	if iMax < iMaxItems then iMaxItems = iMax	
    	reDim iItems(iMaxItems - 1)
    	for x = 0 to iMaxItems - 1
    	randomize()
    	i = int(iMax * rnd() + 1)
    		for y = 0 to uBound(iItems)
    		alreadyExists = false
    			if iItems(y) = i then
    			alreadyExists = true
    			x = x - 1
    			exit for
    			end if
    		next
    		if not alreadyExists then
    		iItems(x) = i
    		end if
    	next
    	if not rs.eof then
    		for each item in iItems
    		rs.moveFirst
    		rs.move item - 1
    		response.write rs("nomeCanale") & "
    "
    		next
    	end if
    
    rs.close
    set rs = nothing
    conn.close
    set conn = nothing
    %>
    Basta modificare il valore di iMaxItems ad inizio codice per dirgli quanti record random vuoi e il tutto senza doppioni.
    La parte in neretto è quella che scrive i dati nella pagina.

  5. #5
    Utente di HTML.it L'avatar di wegawhite
    Registrato dal
    Aug 2004
    Messaggi
    1,400
    Geniale, grazie!

  6. #6
    Utente di HTML.it L'avatar di wegawhite
    Registrato dal
    Aug 2004
    Messaggi
    1,400
    Scusa ma se imposto:
    codice:
    dim iItems()
    iMaxItems = 20
    perchè a volte i records estratti sono meno di 20 ?? A volte 3, a volte 11...

    :master:

  7. #7
    Utente di HTML.it L'avatar di [trodat]
    Registrato dal
    Oct 2004
    Messaggi
    2,135
    Utilizzo lo stesso script e presenta gli stessi problemi...

  8. #8
    Mo faccio delle prove con una ventina di record...

  9. #9
    Ho 28 record in tabella e con questo codice me ne tira fuori SEMPRE 20.
    codice:
    <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Documento senza titolo</title>
    </head>
    
    <body>
    <%
    dim iItems()
    iMaxItems = 20
    
    set conn = server.createObject("ADODB.Connection")
    conn.open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & server.mapPath("\samples\database\db.mdb")
    
    sql = "SELECT * FROM Tabella1"
    
    set rs = server.createObject("ADODB.Recordset")
    rs.open sql, conn, 1, 3
    
    iMax = rs.recordCount
    
    	if iMax < iMaxItems then iMaxItems = iMax	
    	reDim iItems(iMaxItems - 1)
    	for x = 0 to iMaxItems - 1
    	randomize()
    	i = int(iMax * rnd() + 1)
    		for y = 0 to uBound(iItems)
    		alreadyExists = false
    			if iItems(y) = i then
    			alreadyExists = true
    			x = x - 1
    			exit for
    			end if
    		next
    		if not alreadyExists then
    		iItems(x) = i
    		end if
    	next
    	if not rs.eof then
    		for each item in iItems
    		rs.moveFirst
    		rs.move item - 1
    		response.write rs("nomeCanale") & "
    "
    		next
    	end if
    
    rs.close
    set rs = nothing
    conn.close
    set conn = nothing
    %>
    </body>
    </html>

  10. #10
    Utente di HTML.it L'avatar di wegawhite
    Registrato dal
    Aug 2004
    Messaggi
    1,400
    Forse perchè nel mio db ho più di 300 records? :master:

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.