Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Funzione per restituire valore array

    Salve a tutti.

    Ho creato una funzione che "dovrebbe" (almeno nelle intenzioni) verificare se il valore del parametro è uguale a quello all'interno di un array 2D. Se è uguale mi valorizza la funziona con il valore dell'array. Ovviamente la ricerca la fa all'interno di tutto l'array.
    Posto il codice (che però non mi funziona ):

    codice:
    Dim section_list(2)
    
    sqlstring = "SELECT ID, name, status FROM section WHERE status = 1"
    
    Set objRs = Server.CreateObject("ADODB.Recordset")
    objRs.ActiveConnection = objConn
    objRs.Open sqlstring
    
    i = 0
    Do While not objRs.EOF
    section_list(i) = Array( "" & objRs("ID") & "","" & objRs("name") & "") ' crea le voci degli array
    
    i = i+1
    objRs.Movenext
    Loop
    
    objRs.Close
    Set objRs = Nothing
    objConn.Close
    Set objConn = Nothing
    
    function section(sectionID)
    	For ID = LBound(section_list) To UBound(section_list)
    		If sectionID = section_list(ID)(0) then
    			section = section_list(ID)(1)
    		End If
    	Next
    End function
    Richiamo poi la funzione così:

    codice:
    response.write "<td>" & section(objRs("t_sectionID")) & "</td>"
    Il campo objRs("t_sectionID") arriva da una seconda query che qui non ho citato.

    Qualcuno mi aiuta a sistemare la funzione affinchè funzioni?

    Grazie

  2. #2

  3. #3
    usa un dictionary
    codice:
    <%
    
    Dim elenco   ' Crea una variabile
    Set elenco = CreateObject("Scripting.Dictionary")
    
    
    set conn=...
    set rs=...
    rs.open ...
    
    while not rs.eof 
    
    elenco.Add rs("ID"),rs("name")
    
    rs.movenext
    wend
    
    rs.close...conn.close...
    
    function section(sectionID)
    
    if elenco.Exists(sectionID) then
    section=elenco.Item(sectionID)
    end if
    
    End function
    
    'se voglio stampare tutto l'elenco
    chiavi=elenco.Keys
    
    for i=0 to elenco.Count-1
    
    response.write " id:" & chiavi(i) & " nome:" & elenco.Item(a(i))
    
    next
    
    
    
    
    %>

  4. #4
    Una dictionary per non più di 4 5 record? Meglio l'array.
    Il problema non sta nella creazione dell'array (che funziona benissimo), il problema sta nella funzione... che non funziona. E non capisco perchè.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    254
    come fa la funzione a conoscere il contenuto di section_list?

  6. #6
    Bella domanda. pensavo bastasse questo:

    If sectionID = section_list(ID)(0) then...

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    254
    If sectionID = section_list(ID)(0) then

    con quell'istruzione leggi il valore, se ce l'hai.

    sectionID lo conosce perchè glielo passi come parametro, mentre l'array no.
    Fatti stampare il contenuto dell'array dentro la funzione, vedrai che è vuoto.

  8. #8
    codice:
    function section(sectionID)
    For ID = 0 To UBound(section_list)
    response.write section_list(ID)(0) & " - " & section_list(ID)(1)
    Next
    End function
    Stampa alla perfezione tutti i valori degli array.

    L'errore che dà la funzione originale è questo:

    Microsoft VBScript runtime error '800a000d'
    Type mismatch: 'section_list(...)'

    /view_open.asp, line 47


    dove la linea 47 è questa:

    If section_list(ID)(0) = sectionID then

  9. #9
    Originariamente inviato da Dirk Pitt
    Una dictionary per non più di 4 5 record? Meglio l'array.
    sai che cambia se poi devi fare una funzione a mano per scorrerti l'array e vedere se c'è un elemento...

  10. #10
    Alla fine chi l'ha dura... fa contenta la moglie.... ops volevo dire la vince
    Qui il codice che funziona, se a qualcuno serve.

    codice:
    <%
    
    Dim section_list(2) ' dimensiona l'array
    
    sqlstring = "SELECT ID, s_name, s_status FROM tt_section WHERE s_status = 1"
    
    Set objRs = Server.CreateObject("ADODB.Recordset")
    objRs.ActiveConnection = objConn
    objRs.Open sqlstring
    
    i = 0
    Do While not objRs.EOF
    section_list(i) = Array( "" & objRs("ID") & "","" & objRs("s_name") & "") ' crea le voci dell'array
    
    i = i+1
    objRs.Movenext
    Loop
    
    objRs.Close
    Set objRs = Nothing
    objConn.Close
    Set objConn = Nothing
    
    function section(sectionID)
    	For ID = 0 To UBound(section_list)
    		If Cint(sectionID) = Cint(section_list(ID)(0)) then ' confronta il record con l'array
    			section = section_list(ID)(1) ' quando trova la corrispondenza
    	Exit For                                             ' stampa il valore
    		End If
    	Next
    End function
    
    %>
    Da richiamare così:
    codice:
    response.write section(objRs("t_sectionID"))

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.