Newsgroup: it.comp.lang.visual-basic
Titolo: [?] curiosita' su oggetti e classi

Ciao a tutti,
ho creato una dll per la gestione di db con dao (GestDbDao.dll) che mi
faciliti la vita con la creazione di tabelle ed indici.
All'interno del modulo di classe ho dichiarato pubblici degli enum , dei
type e degli oggetti.
Fra gli altri, al fine di non dover inserire all'interno del progetto che
richiama la dll una versione diversa del dao, ho reso pubblico un oggetto
GestioneRecord As Recordset.
Nel progetto chiamante:
Option Explicit
    Dim MioData As GestDbDao
Private Sub Form_Load()
    Set MioData = New GestDbDao
End Sub
Private Sub Form_Unload(Cancel As Integer)
    Set MioData = Nothing
End Sub
A questo punto nel codice, ogni qualvolta richiamo MioData, mi compaiono
tutte le proprieta' e i metodi legati a questa classe e tra gli altri anche
MioData.GestioneRecord, che, a sua volta, seguito dal punto, mi visualizza,
giustamente, tutte le proprieta' e i metodi di un oggetto Recordset.
Allora io ASTUTO!!! ;o) dichiaro:
Dim MioSet as Object '//chiaramente non recordset
'//perche' dao non compare fra i riferimenti diretti del progetto
poi:
RIPROVA:
Set MioSet = MioData.GestioneRecord
quindi:
MioSet. <-- (ho messo il punto) ... ??? ... !!! <IL NULLA> :o(
Da sottolineare che in ogni caso il progetto funziona senza alcun problema
in tutte e due le salse
Allora giusto per curiosita' inserisco fra i riferimenti il dao, dichiaro
MioSet come recordset e Goto RIPROVA
Da questo salto incondizionato avrete capito il risultato
Ora la mia domanda e': ho omesso o mi e' sfuggito qualcosa relativamente
all'oggetto recordset o tale funzionamento vi risulta corretto e motivato??
TIA
beppe
-----------------------------------------------------------
Visita il sito del WWF AltoFerrarese
http://www.comune.cento.fe.it/wwfaf
-----------------------------------------------------------

 writes:
MG> Dim MioSet as Object
MG> Set MioSet = MioData.GestioneRecord
A questo punto hai (per il VB):
	una dichiarazione di oggetto generico 
	uno statement sintatticamente corretta (sulla semantica
	ancora non può dire nulla).
A runtime  viene interrogato  l'oggetto di cui  hai un  riferimento in
MisSet e  viene fatta la  reflection per verificare i  metodi offerti,
gestione record è trovato e funziona tutto.
Non so,  forse con un riferimento a  DAO nel progetto non  c'è solo la
comodità nel richiamare le  proprietà, forse risulta possibile qualche
ottimizzazione in più.
--
Gian Uberto| main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
Lauri      |                        David Korn, 1987 ioccc best one liner 
(aka saint)|-------------------------------------------------------------------
em@ail: 
sa...@eng.it
 ( vedere X-nospam nello header - see X-nospam in header )

 all'oggetto recordset o tale funzionamento vi risulta corretto e
motivato??
Corretto e motivato: il famigerato IntelliSense (la lista dopo il ".") si
basa sulla dichiarazione di variabile per sapere che type library guardare
per proprieta' e metodi; avendo dichiarato la variabile come Object
ovviamente non e' in grado di stabilire a che classe farai riferimento a
runtime, anche perche' potresti usarla per 100 classi diverse, e quindi non
ti fa vedere nulla.
Casomai l'effetto "strano" e' l'altro, cioe' che ti funzioni
GestDbDao.GestioneRecord.<lista>
ma infatti funziona fino ad un certo punto; se tu avessi esposto un oggetto
che ha proprieta' o parametri con qualche enum (ad esempio un recordset ADO
invece di DAO) e provato a fare
GestDbDao.GestioneRecord.CursorType=
avresti visto la lista delle costanti correttamente ma scegliendone una ti
sarebbe apparso un messaggio di errore che appunto segnala che la libreria a
cui fa riferimento qual simbolo non e' referenziata nel progetto.
Ciao
--
Luca Dormio
luca....@tin.it

type e degli oggetti.
[snip]
Scusate tutti, forse mi confondo, ma...
Se la tua dll è stata compilata significa che ha tutti i riferimenti a
posto.
Quindi de le varie propiretà Public/Private sono a posto, una volta che tu
referenzi la dll, non hai più bisogno di referenziare anche ADO/DAO (a meno
che tu non lo usi direttamente anche nel tuo progetto).
Insomma, la dll, essendo un progetto a sè, ci pensa lei a trovarsi tutto
quello che gli serve.
Poi, se dichiari un oggetto come Object generico dai luogo al cosìdetto
"late binding".
In pratica VB non sà come è fatto quell'oggetto, e se richiami un metodo che
esiste bene, sennò VB si arrabbia, ma solo a runtime.
Ciao

 ha scritto nel messaggio
news:vSMX6.8628$i51.1...@news2.tin.it...
