Newsgroup: it.comp.lang.visual-basic
Titolo: passaggio array

Salve, 
ho la procedura f che riceve un array dinamico (variant dichiarato con Dim v()
as variant).
f scandisce un recordset e inserisce in v con una riga simile alla seguente:
v(i) = Array(rs(0), rs(1), rs(2), rs(3))
se lancio f(pippo) dove pippo è un array dinamico (dichiarato sempre con Dim
pippo() as variant), mi aspetto che pippo sia un array del tipo NxM dove M=4.
Invece ottengo un errore se cerco di accedere a pippo(i)(j).
Dov'è che sbaglio?
Grazie a tutti,
Nicola.
-- 
Posted from  [194.243.32.12] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
| Invece ottengo un errore se cerco di accedere a pippo(i)(j).
Hai provato con pippo(i,j) ?

> Hai provato con pippo(i,j) ?
Sě e ottengo errore ugualmente. Mentre con pippo(i)(j) ottengo errore
3420-oggetto non valido o non impostato, con pippo(i,j) ottengo errore 9-indice
non compreso nell'intervallo.


 ha scritto nel messaggio
| f scandisce un recordset e inserisce in v con una riga simile alla seguente:
| v(i) = Array(rs(0), rs(1), rs(2), rs(3))
|
| se lancio f(pippo) dove pippo è un array dinamico (dichiarato sempre con Dim
| pippo() as variant), mi aspetto che pippo sia un array del tipo NxM dove M=4.
| Invece ottengo un errore se cerco di accedere a pippo(i)(j).
Fai attenzione che, da come inizializzi v in
    v(i)(j)
j appartiene all'intervallo [0-3].
i appartiene all'intervallo [0-N].

per quanto ne so io per usare un array dinamico i passi sono questi:
Dichiari l'array dinamico = dim pippo() as variant
Lo inizializzi = redim pippo(5,0)
lo carichi
dopo di che aumenti la dimensione preservando i dati= redim preserve
pippo(5,1)
Bada bene che con l'istruzione redim preserve puoi incrementare la
dimensione solo della variabile piu esterna mi spiego meglio con un esempio:
var(1,2,3,n) puoi incrementare solo n

 ha scritto nel messaggio
news:35b48d98b016cc5da37...@mygate.mailgate.org...


 var(1,2,3,n) puoi incrementare solo n
Uso un ciclo sullo stile
while not rs.eof 
   i = i + 1
   ReDim Preserve v(i)
   v(i) = Array(rs(0), rs(1), rs(2), rs(3))
   rs.movenext
wend
nella funzione f. Se ho ben capito non è corretto?
-- 
Posted from  [194.243.32.22] 


 i appartiene all'intervallo [0-N].
Per evitare questo errore, in fase di debug ho stampato v(0)(0), v(0)(1),
v(1)(0), v(1)(1), ma purtroppo l'errore che mi restituisce non cambia.
-- 
Posted from  [194.243.32.22] 


 stato invalidato da qualche altra operazione all'interno del prog.
Credo di aver capito dove i dati vengano invalidati. Il codice di f è qualcosa
di simile a
while not rs.eof 
   i = i + 1
   ReDim Preserve v(i)
   v(i) = Array(rs(0), rs(1), rs(2), rs(3))
   rs.movenext
wend
Ho paura che la ReDim invalidi i dati. Che ne pensi?
-- 
Posted from  [194.243.32.22] 


 ha scritto nel messaggio
| f scandisce un recordset e inserisce in v con una riga simile alla seguente:
| v(i) = Array(rs(0), rs(1), rs(2), rs(3))
Prova ad esplicitare i campi
v(i) = Array(rs(0).value, rs(1).value, rs(2).value, rs(3).value)

 ha scritto
| Credo di aver capito dove i dati vengano invalidati. Il codice di f è qualcosa
| di simile a
|
| while not rs.eof
|    i = i + 1
|    ReDim Preserve v(i)
|    v(i) = Array(rs(0), rs(1), rs(2), rs(3))
|    rs.movenext
| wend
|
| Ho paura che la ReDim invalidi i dati. Che ne pensi?
Prova cosi'
i=0
while not rs.eof
   ReDim Preserve v(i)
   v(i) = Array(rs(0), rs(1), rs(2), rs(3))
   rs.movenext
   i = i + 1
wend

Mhmhmhmhmhmm...
Non risolverò il tuo problema, ma... ti proporrò di girarci intorno...
Perché non crei un tipo definito dall'utente?
Tipo:
Public Type pippo
    pluto as variant
    paperino as variant
End Type
Dim nonno()s pippo
redim nonno(10)
redim nonno(0).pluto(100)
ecc...
O ancora meglio una classe che supera le limitazioni che VB6 da ai tipi
definiti dall'utente...
                    Ciao
                                    Allanon