Newsgroup: it.comp.appl.access
Titolo: Sottoporrei alla vostra attenzione un esperimento che ho fatto con Access

Vorrei tanto conoscere il vostro parere, se possibile.
Chiedo scusa gia' da ora per  banalita' e/o cretinate
varie ed eventuali. :-))
Se voi nel modulo di una maschera M1 scrivete
Private X as MIA_STRUTTURA
----------------------------------------------
PUBLIC function P( X as MIA_STRUTTURA) as MIA_STRUTTURA
      X.nome = "ciccillo"
      Y.cognome = "detto 'o mariuolo"
P = X
end function
E se poi da una maschera M2 chiamate la P di M1
passandogli la struttura, per esempio scrivete :
sub tasto_click( )
      dim M1 as form
      dim Y   as MIA_STRUTTURA
      docmd.openform "M1" ...
      set M1 = forms("M1")
  ' punto importante :
      Y = M1.p(Y)
 end sub
il compilatore vi dira' :
Solo i tipi pubblici definiti dall'utente definiti in moduli di
oggetto
pubblici possono essere utilizzati come parametri o tipi restituiti
per routine pubbliche di moduli di classe o come campi di tipi
pubblici definiti dall'utente Cause e soluzioni dell'errore:
Si è cercato di utilizzare un tipo pubblico definito dall'utente come
parametro o tipo restituito per una routine pubblica di un modulo
di classe o come campo di un tipo pubblico definito dall'utente.
È possibile utilizzare in questo modo solo i tipi pubblici definiti
dall'utente in un modulo di oggetto pubblico.
Ma se voi, invece di una struttura, dichiarate nel modulo di M1
una variabile pubblica del tipo ad esempio :
public T as long
allora tutto filera' liscio come l' olio e voi potrete accedere alla
T di M1 in questo modo : X = M1.T. Od anche M1.T = 100.
In pratica, la P( X) e' un vero e proprio METODO, e la T
una proprieta' bella e buona. Cercavo allora di forzarlo a fare
lo stesso con strutture qualunque, perche' questo mi avrebbe
consentito di RI-programmare (praticamente) l' oggetto
maschera aggiungendoci metodi e proprieta' mie SENZA
ricorrere alle classi. Invece NISBA.
Perche' access consente di far cio',  ma non con i tipi
definiti dall' utente ?

 wrote:
Ho scritto troppe  scemenze ?

 Ho scritto troppe  scemenze ?
O non si e' capito nulla di quello che ho scritto ?
Devo dirlo meglio ?


MIA_STRUTTURA non esiste...
Gli oggetti li definisci con le classi.

 MIA_STRUTTURA non esiste...
In che senso non esiste ? Non capisco.


Come e dove hai definito MIA_STRUTTURA?
Questo:
	Private X as MIA_STRUTTURA
Non dice un granche'
-- 
ac (x=y-1)

>
Ma scusate, leggete quello che scrivo ?

 Ma scusate, leggete quello che scrivo ?
Il problema non e' se lo leggiamo noi, ma se lo leggi tu. Sia la tua che 
la nostra parte.
Cosi' come hai definito MIA_STRUTTURA non va' bene, non ti puoi 
*inventare* tipi. I sarchiaponi che inventi devono essere 
riconoscibili/riconducibili dall/all'ambiente/linguaggio.
La *simadura* (*) che descrivi non e' fattibile.
(*) se ti chiedi cose' *simadura* -parola inventata- sei vicino alla 
soluzione del problema.
-- 
ac (x=y-1)

 riconoscibili/riconducibili dall/all'ambiente/linguaggio.
Ma scusa, io non capisco di che stai parlando francamente.
CERTO che *va bene* !
*Ovviamente* in un modulo pubblico
(e non in quello di una specifica form) ho scritto :
public TYPE MIA_STRUTTURA
       y as string
       x as string
end TYPE
Lo davo per scontato, confidavo nel fatto che
qua siete tutti molto preparati, e non c'e' bisogno
di scrivere tutto dall' inizio.  Questo post non l' ho
messo per spiegare a voi come si definiscono le
strutture,  ma per farvi vedere un problema che sortisce
usando in un *certo modo* quelle strutture !
Mi sono spiegato ?


Le strutture da passare tra Form e Classi(che poi sono lo stesso
concetto)
devono essere dichiarate Public nella Classe Oggetto non in un Modulo.
@Alex


Appena cominciato.
Allora, non offenderti, tu sei il tipico "idiot savant" il problema e' 
che non si capisce dove finisce l'uno e comincia l'altro o viceversa e 
non si sa mai se rivolgersi all' *idiot* o al *savant*.
Sul NG finiscono tipi diversi di persone e troppe volte cio' che pare 
scontato scontato non e'. Io avevo *immaginato* che forse avevi scritto 
una type ma me lo ero "inzoggnato". Con le type se non ricordo male ci 
sono dei problemi che poi non ho indagato piu' di tanto perche' ho 
semplicemente cominciato ad usare le classi, cosa che ti ha consigliato 
di fare pablitomf (Maurizio Facciuti).
Fai una classe e definisci il metodo all'interno della classe stessa e 
non hai nemmeno bisogno di fare quell'accrocchio di passare e ricevere 
di ritorno la struttura e puoi farne la *new* il numero di volte che ti 
pare.
Come dice @Alex *maschera* non e' altro che una istanza di una classe 
*form*. Access e' limitato in quanto a estensione ed eredita', ma questo 
e', ed e' una *non utile* perdita di tempo cercare di *piegare* un 
sistema, non e' forse meglio *assecondarlo* ?
-- 
ac (x=y-1)

 meglio *assecondarlo* ?
La risposta giusta e' (secondo me) : dipende.
Ma diciamo di *SI* e quindi andiamo oltre :
Supponiamo allora che io voglia incapsulare l' oggetto
form di access (gia' fatto) in una classe mia, in modo
da poter *aggiungere* ad essa tutti i metodi e le proprieta'
che voglio, ma nel contempo risparmiarmi di scrivere da
zero una classe che mi implementi una maschera.
E' possibile fare una cosa del genere ? Come ?
Grazie. E soprattutto : pace fratello, pace.

 devono essere dichiarate Public nella Classe Oggetto non in un Modulo.
Lo so, hai ragione.
Ma sai ... Speravo che ... Va be'.
Vorresti cortesemente dare una occhiata alla risposta
(ultima) che ho dato ad Alessandro Cara ?
Grazie.


Non hai incapsulato, e questo è il primo problema... , al massimo hai
dichiarato un'oggetto Form
ereditandolo dall'esterno, questo non è incapsulare...!
Puoi certamente fare una classe generica nella quale ereditare per
associazione un'oggetto esterno... ereditandone Metodi e proprietà...
ma non otterrai
mai quello che dici, che è esattamente il contrario...!
Dovresti usare NET per qualche giorno, con NET puoi fare esattamente
quello che dici...!
In pratica dichiari una Classe nella quale Incapsuli l'oggetto(textBox
ad esempio) ne erediti metodi e proprietà, ne implementi di Nuovi ed
il nuovo Oggetto Classe espone tutti i metodi/eventi/proprietà nativi
più quelli aggiunti, consente Override dei metodi ed Overload...
Il tutto ovviamente senza che l'oggetto TextBox sia reale... come
invece richiede Access.
Insomma hai sbagliato linguaggio...
@Alex
dell'oggetto

 Grazie. E soprattutto : pace fratello, pace.
Cos'e'? Sei diventato un comboniano?
-- 
ac (x=y-1)

 Insomma hai sbagliato linguaggio...
LOL ! :-))
E' sicuro, questo. Anche mestiere, probabilmente.
Pero' ti dico che prima o poi passero' a NET. Magari fra un
anno ma ci passero'. Decisioni aziendali, PARE ! FORSE !
Qui da noi sai com' e' ...

 Ma questa cosa non la avevamo gia' vista un po' di tempo fa'?
1 L' avevamo gia' vista
2 non c'entra con quello che dicevo io
3 ma mi interessa molto lo stesso perche'
  mi puo' servire e me la sono dimenticata.
Grazie.

 Grazie.
-- 
ac (x=y-1)

 Class MIA_STRUTTURA
Si, ok.  E' quella la strada maestra.
Ma l' istanza oMy non la posso utilizzare
come se fosse una maschera.
Devo riscrivere tutto l' oggetto maschera
daccapo. VIsta la risposta di @Alex ?
Pare proprio che non si possa fare ...

 come se fosse una maschera.
Mi stai innescando la voglia, a quanti mila sievert non so, di 
sodomizzar.....la ministra dell'ambiente.
Ariporc@#[#@@ la pupazza, e' l'esempio di "Pannello Dati", la base della 
classe te la da il disegno di un form di default (nel mio caso "Pannello 
Dati"), dentro quel form scrivici tutte le putt�#@#@#te che vuoi e poi 
usalo come classe di origine.
Mi pare evidente che a quel punto ti "becchi" sempre e comunque la 
struttura ed il codice che hai associato a quel form di default.
-- 
ac (x=y-1)