Newsgroup: it.comp.lang.visual-basic
Titolo: Quando viene inzializzato il controllo data?

Sarò io che non so leggere? Oppure c'è ualcosa di nascosto che non va?
Allora, testuali parole della MSDN: "Il controllo Data viene inizializzato
prima dell'evento iniziale Form_Load per il form nel quale si trova. Se
durante questa fase di inizializzazione si verificano degli errori, viene
generato un errore non intercettabile. " (con tanto di "prima" in corsivo)
Bene allora perchè se io scrivo questo codice
Private Sub Form_load()
 Set Data2.Recordset = Data2.Database.OpenRecordset("SELECT Codice, Nome,
Indirizzo, Comune FROM Clienti WHERE clienti.codice=" & codice)
 End Sub
mi dice "Errore di run-time 91: Variabile oggetto o variabile del blocco
with non impostata"
mentre se lo stesso codice lo scrivo sotto l'evento form_activate funziona
senza problemi?
Non ho trovato nulla che mi allertasse su questo comportamento. Chi di voi
sa aiutarmi? grazie mille!

 funziona senza problemi?
Evidentemente la guida non è corretta o lo è solo parzialmente.
Prova a vedere, eseguendo passo-passo, la proprietà Data2.Database.
Noterai che è Nothing finchè ci si trova nell'evento Load (e quindi non può
essere usata per la OpenRecordset), è invece l'oggetto database assegnato da
progetto appena si entra nell'evento Activate...

ovviamente! :-) grazie mille...
e, diciamo, come soluzione a questo piccolo problemino (escludendo
l'utilizzo dell'evento activate e l'abolizione dei data :-))??

 l'utilizzo dell'evento activate e l'abolizione dei data :-))??
C'ho provato con un DoEvents e non ha funzionato.
Viste le condizioni che poni, consigierei un martelletto, costruito col
"Meccano", da usarsi a ritmo frequente (Timer1.Interval=1000) con sana
goduria sui propri gioielli...

lo sapevo.... ho provato anche io con un doEvents (lo vedi che piano piano
inizio a ragionare? :-)
ok, ci tengo particolarmente ai miei gioielli quindi troverò un altro modo
:-)

 ok, ci tengo particolarmente ai miei gioielli quindi troverò un altro modo
:-)
Saggia decisione, però toglimi una curiosità? Perchè non usare l'evento
Activate?
Per evitare che tutto si ripeta se la form perde e riprende il fuoco, ti
basta una variabile boolean visibile a tutto il form che setti nell'evento
Load (per esempio a True) e testi nell'Activate. Se è True la poni
definitivamente a False e fai quel che devi, viceversa non fai nulla perchè
è un Activate successivo al primo assoluto...

ho risolto così :-)
nel codice del form scrivo:
dim attivo as boolean  'attivo conterrà FALSE
private sub data2_reposition () 'che si verifica quando viene inizializzato
il controllo
    with data2.recordset
     if not (.eof and .bof) and attivo then
     .... istruzioni
     end if
end sub
private sub form_activate ()
  ...istruzioni
  attivo = true
end if
cosa ne pensate? Incorrerei in qualche altro fastidiosissimo errore
nascosto?grazie mille della disponibilità

infatti era questa la motivazione per cui non utilizzavo l'evento
activate...
e ho postato una soluzione simile, anche se la tua č piů elegante :-)
grazie mille



[*Paolo C.* = 
pc...@fastwebnet.it
 in
news:gFbTb.19290$
VS6....@tornado.fastwebnet.it
] ha scritto:

Può andare, ma dove chiami la data2_reposition?
Io la vedo più pulita così:
Dim considera_activate as Boolean
Private Sub Form_Load
    considera_activate=True
End Sub
Private Sub Form_Activate
    If considera_activate=True Then
        considera_activate=False
'            Fai quel che devi solo al primo Activate
'        ...
    End If
End Sub

si, hai ragione...
che la data2 reposition ho notato (con l'esecuzione passo passo) che viene
eseguita prima dell'evento activate