Newsgroup: it.comp.lang.visual-basic
Titolo: [!]Per Meimi (Collection)

Ok, ora ho letto il tuo msg.
E' come pensavo: la collection è una classe e pertanto non puoi salvarla su
disco, in quanto tenteresti di salvarne un'istanza.
Questo non è possibile e la cosa effettivamente ha una sua logica: quanto
tenteresti di recuperare l'oggetto da file tenteresti di ripescare un'istaza
che non esiste e non solo il suo contenuto.
Non so se sono stato chiaro.
E' un peccato, ma funziona così.
Per salvare tutto su disco dovresti farti un ciclone e salvarti chiavi e
valori uno per uno.
Ciao.

 Ciao.
Stavo leggendo l'altro giorno su Visual Basic Journal che il VB6 ha
inserito un comando per rendere persistenti le classi.
Purtroppo in questo momento non ho a portata di mano la rivista, se vi
interessa ve la recupero.

interessa ve la recupero.
No, no grazie.. il problema č risolto ^_^
Poi VB6 chi ce l'ha ;___;
Ciao

...

Io ce l'ho (il VB6), e poi mi dici come hai risolto il problema, invece di
fare tanto la misteriosa?
ciao.


Noto un po' di irritazione nelle tue parole. Se una cosa non me la chiedi
non vedo come possa immaginare che vuoi saperla... mah
Comunque, supponiamo che tu abbia una classe chiamata MiaClasse. Ovviamente
hai dichiarato l'apposito modulo e inserite le funzioni Property Get e Let
per ciascuna proprietà da te inserita. Supponiamo ancora che la classe
MiaClasse abbia due proprietà: Nome e Indirizzo, accessibili tramite i
metodi Get e Put con la seguente sintassi: MiaClasse.Nome e
MiaClasse.Indirizzo.
Nel tuo programma vuoi creare una collezione contenente oggetti e ciascun
oggetto deve essere di tipo MiaClasse. In un modulo o Nella sezione General
di una form ti crei una istanza alla classe MiaClasse:
    Global varClasse As New MiaClasse
e una nuova collezione vuota:
    Global collezione As New Collection
Per riempire la collezione di oggetti si fa in questo modo:
    varClasse.Nome = "unNome"
    varClasse.Indirizzo = "Via ..."
    collezione.Add varClasse, varClasse.Nome
In questo modo ho assegnato come key dell'oggetto, la proprietà nome
dell'oggetto stesso. Questo lo faccio per mia comodità, ma è possibile anche
assegnare un indice o una chiave generica.
A questo punto hai la collezione riempita di tutti questi oggetti e vuoi
salvarla su un file binario. Scusa questa intro, ma è utile per i Newbie ^_^
Per salvere usi la seguente funzione:
Public Sub salvaFile()
    Dim file As Integer
    Dim temp As String * 255
    Dim oggetto As MiaClasse
    Dim numero As Integer
    If Dir$(App.Path & "\nomeFile.dat") <> vbNullString Then Kill (App.Path
& "\nomeFile.dat")
    file = FreeFile
    numero = collezione.Count
    Open App.Path & "\nomeFile.dat" For Binary As #file
        Put #file, 1, numero
        For Each oggetto In collezione
            temp = oggetto.Nome
            Put #file, , temp
            temp = oggetto.Indirizzo
            Put #file, , temp
                 Next
           Close #file
End Sub
Praticamente così ti crei una variabile di tipo MiaClasse, apri il file e
salvi sequenzialmente le proprietà di ciascun oggetto separate e ciascuna
proprietà è una stringa di 256 caratteri.
Per leggere il file:
Public Sub leggiFile()
    Dim file As Integer, conta As Integer
    Dim temp As String * 255
    Dim oggetto As New MiaClasse
    Dim numero As Integer
    Set collezione = Nothing
    Set collezione = New Collection
    If Dir$(App.Path & "\nomeFile.dat") = vbNullString Then Exit Sub
    file = FreeFile
    Open App.Path & "\nomeFile.dat" For Binary As #file
        Get #file, 1, numero
               For conta = 1 To numero
            Get #file, , temp
            oggetto.Nome = Trim(temp)
            Get #file, , temp
            oggetto.Indirizzo = Trim(temp)
                      collezione.Add oggetto, oggetto.Nome
            Set oggetto = Nothing
            Set oggetto = New server
        Next
    Close #file
End Sub
Devo aggiungere che questo metodo me l'ha spiegato Zeross (c) ^_^
Ciao

non vedo come possa immaginare che vuoi saperla... mah
Non te la prendere, non c'č mai irritazione in me, al massimo un po' (spesso
molta) d'ironia.
Il fatto era che hai risposto n mucchio di volte che avevi risolto il
problema e la cosa mi ha incuriosito.
Comunque pensavo a qualche soluzione un pochino piů trascendentale di quella
che hai usato, dato che non "volevi" svelare il segreto.
Mi sono sbagliato.
Scusa.
Ciao.


Ma chi l'ha detto che non volevo... non mettetemi in bocca parole che non ho
dette per favore... se nessuno me lo chiede come faccio ad immaginare che
serve.
Ciao

...

Per fortuna che ho messo le virgolette...

Devo aggiungere che questo metodo me l'ha spiegato Zeross (c) ^_^
Bien.. allora aggiungi questo:
al posto di Dir$() usa Len(Dir$()), cioè:
 If Len(Dir$(App.Path & "\nomeFile.dat")) <> 0 Then Kill (App.Path &
"\nomeFile.dat")
If Len(Dir$(App.Path & "\nomeFile.dat")) = 0 Then Exit Sub
Così sono più veloci ^__^
Zeross


Scusa.
Ciao ^_^


Beh, si da il caso che e' cosa buona e giusta su un NG, postare anche le
soluzioni trovate da soli, dato che potrebbero servire ad altri.
Poi ognuno puo' fare come vuole...
P.S. il "volevi" di Zanna era tra virgolette, niente cattiveria quindi ;-)
--
Roal Zanazzi
z...@iol.it


Infatti gli ho già chiesto scusa.
Ciao