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

Discussione: idcampo in array

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    589

    idcampo in array

    ciao ho questo problema: devo filtrare in un databse access tutti i record= 'vendita', e successivamente facendo una funzione di random mi seleziona un id a caso proveniente da ques'ultima selezione. il discorso è visto che i record di quel campo possono essere anche ='scaduto' mi da errore di campo nullo.

    Come faccio a mettere in un array tutti i campi filtrati e dare alla funzione random come riferimento solo i campi dell'array?

    vi posto il codice da modificare:

    codice:
    <%
    sqldat = "SELECT COUNT(*) FROM richieste"
    
    Set objRS = connessione.Execute(sqldat)
    
    dim max, sw
    max = objRS(0)
    
    if max=0 then 'database vuoto!
    response.redirect("errore.asp")
    end if
    
    objRS.Close
    Set objRS = Nothing
    	
    	
    	
    		zona = " where venduto ='vendita' "  
    
    
    
    
    		strricerca = "select * from richieste  " & zona 
    	
    	
    	set rsestrai=Server.CreateObject("adodb.recordset")
    		rsestrai.LockType=3
    		rsestrai.CursorType=3
    		rsestrai.PageSize=5
    		rsestrai.ActiveConnection=connessione
    		rsestrai.Open strricerca
    		
    
    
      ' If Not rsestrai.EOF Then
    Randomize()
    casual = Int(Rnd() * Max) 
    
    rsestrai.MoveFirst    
    rsestrai.Move casual
    
    
    %>

  2. #2
    Non ho capito esattamente come devi fare... ma se rimpi l'array con gli id corretti risolvi il problema alla base

    Dim nome_array()

    'fai la query prendendo solo gli id "pieni".. select count(campo) as totale...

    Redim nome_array(risultato_query("totale")

    ' rifaccio la query per rendere il codice piu leggibile
    ' select id from tabella where condizione = vero
    For i = 0 to Rs("totale")
    nome_array(i) = Risultato_seconda_qury("id")
    next

    Il random lo fai sul valore totale (o sull'Ubound(nome_array)) e richiami l'id assegnato all'array..

    Ho fatto un po di confusione ma spero di essermi cmq spiegato

  3. #3
    Utente di HTML.it L'avatar di kluster
    Registrato dal
    Jul 2003
    Messaggi
    1,288
    usa il getRows, + veloce
    codice:
    set Rs = conn.execute(strricerca)
    myArray = Rs.GetRows()
    Set Rs= nothing 'lavori con i dati disconnessi
    Max= Ubound(Myarray,2)
    if max > 0 then
        casual = Int(Rnd() * Max) 
        MyArray(0,casual) 'primo campo
        MyArray(1,casual) 'secondo campo della riga casuale 
        MyArray(2,casual) 'terzo campo della riga casuale 
        ..etc
    else
        'No record
        Response.Redirect
    end if

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    589
    vi spiego non ho provato perche volevo avere conferma se avete capito:

    i ho il database con id sequenziali che non salta in maniera che se faccio un puntamento random non mi da errore.

    es ID Stato Oggetto

    1 venduto Penna
    2 venduto Matita
    3 vendita Gomma
    4 vendita Righello

    io voglio che il puntamento random vada solo su i record Che hanno 'vendita' cioè il 3 e il 4 ma poteva anche essere il 9 o 34 quindi non sequenziali. ?????

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    589
    io lho fatto cosi e mi da errore:

    codice:
    <%
    ' sqldat = "SELECT COUNT(*) FROM richieste"
    
    ' Set objRS = connessione.Execute(sqldat)
    
    ' dim max, sw
    ' max = objRS(0)
    
    ' if max=0 then 'database vuoto!
    ' response.redirect("errore.asp")
    ' end if
    
    ' objRS.Close
    ' Set objRS = Nothing
    	
    	
    	
    		zona = " where venduto = 'vendita'"  
    
    
    'zona = "where (data >=#"&iniziodata&"#) and (data <=#"&finedata&"#) and (venduto = '" & session("zona") & "') and (user = '" & str_users_name & "')"
    
    
    		strricerca = "select * from richieste  " & zona 
    	
    	
    	set rsestrai=Server.CreateObject("adodb.recordset")
    		rsestrai.LockType=3
    		rsestrai.CursorType=3
    		rsestrai.PageSize=5
    		rsestrai.ActiveConnection=connessione
    		rsestrai.Open strricerca
    		set Rs = connessione.execute(strricerca)
    	
    	
    myArray = Rs.GetRows()
    Set Rs= nothing 
    Max= Ubound(myarray,2)
    if Max > 0 then
     
        casual = Int(Rnd()* Max)
       
        myArray(0,casual) 
        myArray(1,casual) 
        myArray(2,casual) 
       
    else
        'No record
       
        response.redirect("errore.asp")
    
    end if 
    
    
    %>

    errore
    Tipo di errore:
    Errore di compilazione di Microsoft VBScript (0x800A0414)
    Impossibile utilizzare parentesi per la chiamata di routine Sub
    /smistamentozapping.asp, line 48, column 17
    MyArray(0,casual)
    ----------------^

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    589
    ho corretto anche myArrey , uguale errore :master:

  7. #7
    Utente di HTML.it L'avatar di kluster
    Registrato dal
    Jul 2003
    Messaggi
    1,288
    l'array è in questo formato
    MyArray(colonna,riga)

    tu devi assegnare il valore ad una var senno è uno statement privo di significato

    codice:
    zona = " where venduto = 'vendita'"  
    strricerca = "select * from richieste  " & zona 
    Dim myArray
    Set Rs = connession.execute(strricerca)
    myArray = Rs.GetRows()
    Set Rs= nothing 
    Max= Ubound(myarray,2)
    if Max > 0 then
        casual = Int(Rnd()* Max)
        Response.write("Prima colonna = " & MyArray(0,casual))
        Response.write("Prima colonna = " & MyArray(1,casual))
    '   etc etc 
       
    else
        'No record
        response.write("il recordset è vuoto")
    end if
    quindi o fai un response.write o lo assegni ad una var
    id = MyArray(0,casual)

  8. #8
    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
    %>
    iMaxItems imposta quanti record casuali prendere.
    Adesso devi solo saper scrivere la query SQL per prendere solo i record che ti interessano, ovvero quelli dove
    codice:
    "... WHERE campoVendita = 'Vendita' AND campoScaduto <> 'scaduto'"

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    589
    ho fatto ma mi da che il record è stato eliminato, questo perche' i campi venduto possono essere anche ='scaduto' quindi ID non sono sequenziali e il random va anche in ID apparteneti ai campi scaduti che non sono nel filtro

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    589
    aspetta aspetta non avevo letto....

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.