Newsgroup: it.comp.appl.access
Titolo: moduli di classe - esempi

salve!
 
da anni programmo anche se sono sempre un po' ostico ai moduli di classe:
mi piace molto il concetto ma all'atto pratico non riesco mai a trovare lo spunto 
 
ho trovato
l'esempio
http://mirror.masterdrive.it/alessandrobaraldi/DettaglioFaq.asp%3FIdFAQ=165.html
 
 
veramente molto bello e dettagliato oltretutto con la gestione degli eventi!!!
 
ma avete altri esempi concreti alla programmazione?
 
Grazie anticipatamente
 
PFMarro



 eventi!!!
 
Io programmo Access da quando è nato e non ho mai saputo, né lo so 
tuttora, cosa siano i moduli di classe.
Dici che ho perso molto?
 
Bruno
 
 

> 
http://mirror.masterdrive.it/alessandrobaraldi
 
Ma il sito di Baraldi è di nuovo accessibile?
Tommaso
 


Si!
 
-- 
 
ac (x=y-1)

Alessandro Cara explained :

Sottoponimi un problema che tu risolveresti con un modulo di classe, un 
problema non teoria!
 
Bruno
 
 


Un btree
 
-- 
 
ac (x=y-1)

Il 08/06/2012 21.40, Alessandro Cara ha scritto:
P.S.
O una qualsiasi cosa che mi richieda piu' copie dello stesso oggetto.
-- 
 
ac (x=y-1)

Il 08/06/2012 21.40, Alessandro Cara ha scritto:
P.P.S.
O, se mi tira, il fatto di non usare variabili (se non le due contenute 
nella classe).
 
-- 
 
ac (x=y-1)

 classe).
 
Avevo chiesto problemi e non teoria...
 
Gli è che io non ho questioni in sospeso con Access, nel senso che 
tutti problemi che mi sono stati posti li ho risolti, tutti i problemi 
che si dibattono in questo NG li so risolvere e sono solo in attesa di 
conoscerne qualcuno che non si possa risolvere senza l'utilizzo dei 
moduli di classe.
 
Alessandro, avrai pure qualche programma o spezzone di programma che 
utilizza moduli di classe: fammene avere uno, ch'io sappia come son 
fatti e come si possono ottenere gli stessi risultati in modo 
alternativo.
Poi eseguiamo anche confronti di efficienza.
 
Bruno
 
 

 problema non teoria!
 
Ciao Bruno.
 
Anch'io conosco poco le classi ma non sarei così prevenuto: se guardi bene 
cosa puoi fare con WithEvents (ad esempio) capirai che in alcuni casi sono 
necessarie.
Non ho esempi sotto mano ma con WithEvents puoi impostare degli eventi per 
tutte le maschere oppure, per dire, per tutte le combo, programmandoli in un 
solo posto.
 
Non credo di essere stato chiarissimo ma se ti interessa approfondire cerco 
qualche link da postare.
 
Ciao
 
Silvio
 
 
 

 Tommaso
 
Si era dato gią un avviso..
 
http://www.newsland.it/nr/browse/it.comp.appl.access/109838.html
 
 
--
sv
 
-- 
 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it
 
 
 

 solo posto.
 
Tutte cose, a mio avviso, che attengono più all'apparenza della 
programmazione che alla sostanza.
 
Comunque, ripeto per l'ennesima volta, vorrei vedere un problema (*) 
risolto con 'sti moduli di classe e cimentarmi nella sua soluzione 
usando armi convenzionali.
Rivolgo a te lo stesso invito rivolto ad Alessandro Cara.
 
Potrei anche proporlo io un problema risolto con "armi convenzionali" e 
vedere quale migliore soluzione si prospetta usando moduli di classe.
Basta chiederlo.
 
Bruno
 
(*) ... problema che non fosse una delle solite fregnacce che da tempo 
appaiono su questo NG (cancella un record con un click su un pulsante, 
fa' scorrere n record, fa' apparire un popup, apri automaticamente una 
form alla chiusura di un'altra, cambia colore al record selezionato, 
seleziona automaticamente un controllo in subform, suona un piffero, 
etc).
 
 

 PFMarro
 
In questo NG una volta, parlo di quasi 20anni fà... era uso non fare
CROSSPOST...!!
 
Ora i vecchi Controllori sono spariti, ma cerchiamo di rispettare
questa semplice quanto banale regoletta...
 
Perchè spalmare le stesse domande in tutto lo USENET...?
 
Oltretutto gli utenti che frequentano sono sempre gli stessi, io sono
assente in questo NG da qualche mese.... ma insomma...
 
@Alex

 PFMarro
 
In questo NG una volta, parlo di quasi 20anni fà... era uso non fare
CROSSPOST...!!
 
Ora i vecchi Controllori sono spariti, ....
 
ma a volte ritornano...*__*
 
ciao bello...bentornato ;-)
 
Daniele
 
 
 


Bruno, non si tratta di vedere il problema sotto questo punto di
vista, mi sembra molto limitato...!
Il Vba standard per Access è come dici tu non ci sarebbe bisogno di
usare i moduli di Classe..... ma prima di tutto serve capire cosa sono
per capire a cosa non servono.
 
Ti faccio un'esempio stupido e banale, che probabilemente non hai mai
approciato perchè con Access è assurdo...
 
L'uso di un Socket di connessione per gestire una comunicazione...
Un socket può essere gestito in MULTIISTNZA e se il codice fosse
gestito in un modulo standard dovresti predisporre variabili o
collection per memorizzare le variabili di istanza.
 
Con una Classe, che devi vedere come un'oggetto indipendente,
l'oggetto del Socket vive di vita propria, può essere istanziato N
volte ed ognuna è una istanza indipendente...!
 
Vedi anche la MULTISTANZA della stessa Form ... è la stessa cosa,
perchè aprire una Maschera in multiistanza quando se ne ha 2 fai la
stessa cosa...?
Perchè se ne servono 3 o N non devi modificare nulla...!
 
Con VB6, e con tutti i linguaggi OOP, il concetto è molto più evidente
in quanto in una classe puoi anche istanziare Controlli senza
disegnarli, creare Override e Everload di metodi...!
 
Praticamente da una TextBox puoi creare una TextBoxEX con metodi e
proprietà CUSTOM il tutto con una Classe...
 
L'approccio al problema è da vedere in modo più ampio, non
banalizzarlo.
 
@Alex

@Alex explained :

Vedi Alex, io sono un po' duro di comprendonio e soprattutto non ho 
alcuna voglia di mettermi a studiare della teoria... alla mia veneranda 
età!
Però i problemi e le loro soluzioni originali m'interessano moltissimo.
 
Un cliente ti chiede di progettargli un database per raccogliere e 
catalogare dati.
Su questi dati dovrà poi fare delle ricerche, calcolare medie, ricavare 
correlazioni, avanzare previsioni, stampare grafici e report, etc.
Ora tu mi spiegherai dove, quando e a qual fine utilizzi un modulo di 
classe per l'esecuzione del progetto.
 
Se hai un progetto - sicuramente ce c'hai nel tuo arsenale - che 
utilizzi muduli di classe, mandamelo che cercherò di capirci qualcosa.
E se non sarò in grado di risolvere con armi convenzionali - e con pari 
efficienza - il problema, allora... champagne per tutti!
 
Bruno
 
 

 Bruno
 
Bruno come ti dicevo, stai guardano la cosa dal punto di vista
sbagliato...!
Finalizzando la gestione di un applicativo come dici è molto probabile
che non servano Classi per far funzionare il tutto.
 
Le Classi sono un'altro strumento che hai a disposizione.
 
Come ti dicevo la maggior applicazione ed applicabilità è volta
all'interfaccia non ai dati, per questo non ne vedi l'utilità.
 
Non credo che tu ti sia perso molto fino ad ora, visto che usi solo
Access, ma ad esempio se tu passassi a NET senza comprenderne la
funzionalità
non potresti fare nulla...!
 
Le stesse DLL/OCX che usava VB6 credo ti possano risultare poco
chiari... eppure sono uno strumento che ci danno e che se usato per
quello che
è meglio danno grossi vantaggi.
 
Certo se ci vedi solo la parte di manipolazione dei dati non ti sarà
possibile avere una visione positiva dell'oggetto.
 
Da dire però che gli sviluppatori sempre più si spostano verso una
divisione delle competenze, e la tecnica del DAL(Data Access Layer)
richeide appositamente CLASSI per l'iterfaccia dei dati direttamente
con il Database.(non si fa con Access ma con NET è pratica abbastanza
comune).
 
Non vedo necessario aggiungere altro...
 
@Alex

 Non vedo necessario aggiungere altro...
 
Io invece vorrei ribadire - con un po' di sarcasmo - che in tre giorni 
di discussioni non è saltato fuori un esempio di applicazione che 
utilizzi moduli di classe.
Mi chiedo a che cosa vi siano serviti...
 
Tu stesso ammetti, consapevolmente, che non mi sono perso molto usando 
solo Access.
Beh, ma la discussione è nata con riferimento all'ambito "Access" e io 
vi ho preso parte con riferimento allo stesso ambito.
Non posso e non voglio discutere di cose che non conosco.
 
Andiamoci a vedere Italia-Spagna.
 
¡Hasta la vista!
Bruno
 
 


Bruno io con la consapevolezza di chi le classi le conosce, decido se
usarle e come...
 
L'OP tuttavia ha chiesto che gli venissero forniti aiuti e supporti
sulle classi.
 
Polemica a parte, che mi sono ripromesso di non fare più, ritorno
dalla fossa nella quale ero... e lascio a voi proseguire su queste
cose...
 
@Alex

 Poi eseguiamo anche confronti di efficienza.
E' proprio su un problema di efficienza e manutenibilita' che mi sono 
convertito (a suo tempo) all'uso di classi.
 
Cmq OK, molto semplice:
Questo su un form con un centinaio di check box ne controlla la 
gestione. I ckbox rappresentano le domande di un questionario, 
all'attivazione del ckbox vengono visualizzati gli attributi della 
domanda relativa e della risposta (con eventuale commento)
Non c'e' codice dietro l'evento MouseDown di ciascun ckbox, solo la 
attivazione della [Event Procedure] (via codice sul formLoad)
Ovviamente era risolvibile secondo programmazione procedurale.
 
Option Compare Database
Option Explicit
 
Public WithEvents oCheck As CheckBox
 
Private Sub oCheck_MouseDown(Button As Integer, Shift As Integer, X As 
Single, Y As Single)
Dim aCommento As Variant
Dim oDom As cDomanda
Dim sKey As String
Dim aArr As Variant
 
oCheck.Parent.setDirty True
On Error Resume Next
If Left(oCheck.Name, 2) = "ct" Then
     Set oDom = oDomande.getItem(Int(Right(oCheck.Name, 2)))
     If Button = acRightButton Then
         If oCheck Then
             If oDom.Aggiuntive <> "" Then
                 aArr = Split(oDom.Aggiuntive, "!")
                 DoCmd.OpenForm "subf" & aArr(1), , , , , acDialog, 
Right(oCheck.Name, 2)
                 oCheck.Parent!tCommento = oDom.RisposteAggiuntive
                 oDom.Commenti = oDom.RisposteAggiuntive
             Else
                 If oCheck.Parent!tCommento.Visible Then
                     aCommento = Split(oCheck.Parent!eCommento.Caption)
                     If aCommento(1) <> Right(oCheck.Name, 2) Then
                         showCommento oDom
                     Else
                         oCheck.Parent!tCommento.Visible = Not 
oCheck.Parent!tCommento.Visible
                     End If
                 Else
                     showCommento oDom
                 End If
             End If
         End If
     Else
         oDom.RisposteAggiuntive = ""
     End If
End If
 
End Sub
Private Sub showCommento(oD As cDomanda)
     oCheck.Parent!tCommento = "" & oD.Commenti
     oCheck.Parent!eCommento.Caption = "Domanda " & oD.NumSuQuest
     oCheck.Parent!tCommento.Visible = True
     oCheck.Parent!eDomanda.Caption = Right(oCheck.Name, 2) & "-" & 
oCheck.Parent.Form("en" & Right(oCheck.Name, 2)).ControlTipText
'    oCheck.Parent!eDomanda.Caption = oD.Codice & "-" & 
oCheck.Parent.Form("en" & oD.Codice).ControlTipText
     oCheck.Parent!eDomanda.Visible = True
     oCheck.Parent!tCommento.SetFocus
End Sub
 
 
(*) oDom e' una collezione puo' essere sostituita da un array 
multidimensionale o da lettura su db
-- 
 
ac (x=y-1)
 
 

 cose...
Le vie dell'inferno sono lastricate di buone intenzioni ;-{)
Che c'entra la fossa? Dalle tue parti non fanno un altro tipo di formaggio?
 
Ahhhhhh.....come vanno le cose dalle tue parti? Problemi?
-- 
 
ac (x=y-1)
 
 

 Private Sub oCheck_MouseDown(Button As Integer, Shift As Integer, X As 
[...]
 
Che cosa me ne faccio del tuo codice?
Perchï¿œ non mi invii il database - in formato MDE - cosicchï¿œ io possa 
vedere come funziona e possa riprodurne l'esatto funzionamento usando 
la normale programmazione?
Poi io ti mando un MDE programmato convenzionalmente che tu 
rielaborerai utilizzando le classi, etc.
 
Dopodichï¿œ - MDB vs MDB - paragoniamo le efficienze.
 
Son quattro giorni che propongo queste cose: tutti han qualcosa da dire 
ma nessuno accetta la sfida.
 
Bruno
 
 


Scaricati il Frugator da accessgroup  (sezione web)
http://lnx.accessgroup.it/community/access-web/frugator-10.0.html
 
.
Quello usa un po' di classi (sono pero' nel'Mde,quindi non visibili)
 
(*) Le variabili sono tutte di tipo variant perche' il tutto (tranne i 
forms) era pensato per girare sotto Asp.
-- 
 
ac (x=y-1)
 
 

Alessandro Cara explained on 11-06-12 :

Sto usando Access10/64 e ho eseguito la normale procedura per la 
conversione a 64 bit.
Ora perï¿œ mi dï¿œ MISSING MDEAsp2003.mde per il quale perï¿œ mi dï¿œ giusta la 
location nella directory Frugator10.
Ma con regsvr32 non si registra...
MDEAsp2003.mde non si apre perchï¿œ ï¿œ stato concepito per i 32 bit.
Ora che faccio?
 
Tu intanto dimmi che versione di Access usi... che ti voglio evitare 
simili disguidi.
 
Bruno
 
 

 ac (x=y-1)
 
@Alex

 Bruno
 
Le librerie MDE non si registrano non sono DLL(Activex o Com)... si
RIALLEGANO nelle Referenze...
tuttavia credo ci siano altri inghippi nel contesto.
 
@Alex

 tuttavia credo ci siano altri inghippi nel contesto.
 
Penso anch'io.
Comunque di librerie MDE io non ne ho mai create nï¿œ allegate: non 
scrivo programmi che debbano portarsi dietro il carro attrezzi per 
funzionare.
 
Bruno
 
 

 simili disguidi.
C'e' scritto nelle note:2003
Sorry per versioni piu' evolute non funziona.
La email in oggetto e' corretta?
Se si ti mando l'mdb (relativo all'mde) e magari, se li converti, faccio 
la prova di funzionamento anche per versioni superiori.
 
-- 
 
ac (x=y-1)
 
 

Alessandro Cara wrote :

D'accordo, puoi inviare l'mdb a 
brun...@libero.it
.
Se riesco a convertire il file farï¿œ la prova.
 
Bruno