Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    263

    Array: gestione dinamica caricamento da db

    Ciao a tutti
    Il problema è il seguente: devo riempire un array con i contenuti di un db MySQL

    Sintetizzando la procedura è la seguente:
    ...
    carico il recordset in objRS
    ...
    indice=1
    redim MioArray(10,4)
    Do Until objRS.Eof
    MioArray(indice-1,0)=objRS("campo1")
    MioArray(indice-1,1)=objRS("campo2")
    MioArray(indice-1,2)=objRS("campo3")
    MioArray(indice-1,3)=objRS("campo4")
    if not objRS.Eof then
    indice=indice+1
    end if
    objRS.movenext
    loop

    la procedura funziona, ma così facendo devo dichiarare sin dall'inizio che l'array avrà 10 righe
    Vorrei invece impostare e gestire dinamicamente l'array.
    HJo provato con redim preserve ma da errore e poi ho letto che non va bene per aumentare il numero delle righe.

    Avete qualche suggerimento ?
    Grazie

  2. #2
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Potresti usare la objRS.GetRows() che automaticamente crea un array a due dimensioni righe / colonne:

    MioArray = objRS.GetRows()

    Roby

  3. #3
    marvov, ma è sempre per la questione del riordinamento? hai provato ad usare il .sort come ti avevo detto di fare?

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    263
    Ciao Optime.
    Si, è sempre relativo al discorso dell'ordinamento.
    Ho provato a cercare per sort come mi avevi detto, ma non ho trovato nulla, anzi ho trovato dei commenti che confermano che in asp, a differenza di php, non esistono funzioni integrate che riordinano array.

    Ho trovato in rete funzione, che ovviamente vanno adattate, che riordinano gli array, ma nulla di nativo.

    Se riesci a darmi maggiori dettagli su qualche funzione di sort nativa in asp mi faresti un grosso regalo.

  5. #5
    io ti ho detto di farlo sul recordset, non sull'array...

  6. #6
    se non riesci io feci una funzione per ordinare un elenco separato da "," in modo crescente o decrescente

    se sei interessato questo è il codice
    codice:
    <%
    'recupero la lista
    lista="1,5,7,6,1,2,3,10,6,152,2,6,8,7,4,5,3,2,1,0,9,8,5,3,15,12,16,18,17,11,10"
    'ordine c=crescente d=decrescente
    ordine="d"
    
    'la sistemo togliendo le virgole in eccesso (prima e ultima)
    if left(lista,1)="," then
     lista=right(lista,(len(lista)-1))
    end if
    
    if right(lista,1)="," then
     lista=left(lista,(len(lista)-1))
    end if
    
    'recupero il numero di dati contenuti
    cont=split(lista,",")
    cont=ubound(cont)
    
    
     confronto=0
     confronto_d=0
    
    if ordine="d" then
    'il confronto lo si fa rispetto al massimo dell'array
    
     array_confronto=split(lista,",")
     for i=0 to ubound(array_confronto)
      if ccur(array_confronto(i))>ccur(confronto_d) then
       confronto_d=ccur(array_confronto(i))
      end if
     next
     confronto=confronto_d
    end if
    
    
    
    do while cont>-1
    
     array_lista=split(lista,",")
     for i=0 to cont
      if ordine="c" then
       if ccur(array_lista(i))>ccur(confronto) then
        confronto=ccur(array_lista(i))
       end if
      elseif ordine="d" then
       if ccur(array_lista(i))<ccur(confronto) then
        confronto=ccur(array_lista(i))
       end if  
      end if 
     
    next
    
    lista=""
    
    'elimino il valore gia preso
    c=0
    for i=0 to cont
     if ccur(confronto)<>ccur(array_lista(i)) then
       lista=lista&","&array_lista(i)
     else
      if c=0 then
       c=c+1
      else
       lista=lista&","&array_lista(i)
      end if
     end if
    next
    
    
    if left(lista,1)="," then
     lista=right(lista,(len(lista)-1))
    end if
    
    
    array_ordinato=array_ordinato&","&confronto
    
    cont=cont-1
    if confronto_d=0 then
     confronto=0
    else
     confronto=confronto_d
    end if
    
    loop
    
    if left(array_ordinato,1)="," then
     array_ordinato=right(array_ordinato,(len(array_ordinato)-1))
    end if
    
    response.write array_ordinato
    
    %>
    funziona perchè io lo uso
    ovviamente in lista andrai ad inserire i valori recuperati dal db (e sarà un file di testo con i valori separati da ",") e in ordine inserisci la sigla come indicato nei commenti (c o d per decidere il tipo di ordinamento)

    comunque proverei a seguire la strada indicata da optime

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    263
    Ottimo spunto Grambo...provo ad adattarla.
    E grazie anche a Optime e Roby_72

    Ciao

  8. #8

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    263
    Non ho utilizzato quella di Grambo perchè il mio array ha due dimensioni (righe e colonne)
    Ho trovato però la seguente funzione che ho riadattato e funziona perfettamente:

    riordina per interi sulla colonna intSortCol (che per me è vale 1), strDirection può essere "a" per ascendente o "d" discendente e value() è l'array

    Spero possa essere di aiuto ad altri.

    Ciao a tutti.

    function arraysort(values(),intSortCol,strDirection)
    Dim i
    Dim j
    Dim value
    Dim value_j
    dim min
    dim max
    dim temp
    dim datatype
    dim intComp
    dim intA
    dim intCheckIndex

    min = lbound(values,2)
    max = ubound(values,2)
    if lcase(strDirection) = "d" then
    intComp = -1
    else
    intComp = 1
    end if

    if intSortCol < 0 or intSortCol > ubound(values,1) then
    arraysort = values
    exit function
    end if
    intCheckIndex = min
    while len(trim(values(intSortCol,intCheckIndex))) = 0 and intCheckIndex < ubound(values,2)
    intCheckIndex = intCheckIndex + 1
    wend
    For i = min To max - 1
    value = values(intSortCol,i)
    value_j = i
    For j = i + 1 To max
    if intComp = -1 then
    if cInt(values(intSortCol,j)) < cInt(value) then
    ' Save the new smallest value.
    value = values(intSortCol,j)
    value_j = j
    end if
    else
    if cInt(values(intSortCol,j)) > cInt(value) then
    ' Save the new smallest value.
    value = values(intSortCol,j)
    value_j = j
    end if
    end if
    Next 'j
    If value_j <> i Then
    ' Swap items i and value_j.
    for intA = 0 to ubound(values,1)
    temp = values(intA,value_j)
    values(intA,value_j) = values(intA,i)
    values(intA,i) = temp
    next 'intA
    End If
    Next 'i
    arraysort = values
    End function

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.