Newsgroup: it.comp.appl.access
Titolo: [OT] ma non troppo: FAQ sulle add-in di Access

Prima dell'estate ero stato invitato a scrivere qualcosa sulle add-in per
gli utenti che non le conoscono.
Si era pensato ad un faq. C'ho provato è il risultato è stato scarso (mi
dilungavo troppo nei dettagli), così ho buttato via tutto e ho ricominciato.
Questo è quello che ne è venuto fuori, non è un faq ma una semplice
descrizione che secondo me potrebbe far scaturire in ognuno di voi delle
domande. Se le postate, io e chiunque altro abbia competenze e voglia,
risponderemo. Spero che questa sia una buona idea. Il risultato di questa
interazione potrebbe essere messo a posto e pubblicato sul sito comune.
<INIZIO DESCRIZIONE>
Una add-in è una estensione di Access. In una installazione "full" di
Access, esistono una trentina di add-in. Chiunque abbia usato Access per più
di 10 minuti è incappato in una add-in: Gestore tabelle collegate, wizards
per la creazione di documenti (Autocomposizione maschera), Generatore
Espressioni, Generatore stringhe di connessione, ecc.
Qual'è il formato di una add-in? E' un eseguibile? Una dll?
Le add-in di Access97 sono dei normali file access, con estensione mdb, mda
o mde.  Microsoft Office 2000 Developer, prevede anche la creazione di
add-in in formato dll.
Un sottoinsieme delle add-in sono le autocomposizioni (wizard). Un altro
sottoinsieme è quello dei generatori (builder). Tutto ciò che non è né
autocomposizione ne generatore resta add-in.
Le autocomposizione creano documenti (credo che l'autocomposizione più nota
del mondo sia l'autocomposizione maschera).
I generatori invece creano stringhe, usate come pezzi di codice, valori di
proprietà ecc. (il generatore espressioni ne è un esempio).
Perchè sono così largamente usate?
Perchè non intaccano la struttura generale del progetto msaccess.exe, pur
consentendo una estensione delle sue funzionalità.
Perciò le add-in sono il modo per estendere Access.
Chiunque pensi che un problema debba far parte del corredo standard di
access, può realizzare la relativa add-in e avere così una versione "estesa"
di access.
<FINE DESCRIZIONE>
Elementi sicuramente da introdurre e approfondire sono:
CodeDb vs CurrentDB
e
USysRegInfo
Attendo le domande.
Saluti
Michele Amato

Attendo le domande.
Che mi dici di CodeDb vs CurrentDb?
E che cos'e' USysRegInfo?
<:-)))
--
Lorenzo Coronati
--
<<Come posso dunque sprotegere il database? 
Esiste un crack o qualcosa del genere 
che mi faccia accedere ai dati?>>
(Cocco, 17/10/2000)
--

 Michele Amato
Qual'è la differenza tra un mdb-mde e un mda, come si crea un mda?
ciao
Paolo

 Michele Amato
un file di tipo mda lo posso utilizzare come un componente activex?
ossia, nel mio caso, posso inserirgli dento delle classi che mi fanno accesso ai
dati, che mi gestiscano le regole di aggiornamento ecc.?
ciao
Paolo
--
-------------------------------------------------------------------------------
Un giorno le macchine riusciranno a risolvere tutti i nostri problemi.
Ma nessuna macchina sarà in grado di porne uno.
-------------------------------------------------------------------------------

 dati, che mi gestiscano le regole di aggiornamento ecc.?
Tu puoi comunque inserire delle classi in un mda. ATTENZIONE però le classi
definite in una libreria (mda) non sono visibili direttamente da un mdb con
un riferimento all'mda. Questa è una sfiga. Non ho ancora verificato se con
A00 questa sfiga è stata superata. Credo e spero di sì visto che M$ ha
sbandierato ai 4 venti che la versione VBA di Office 2000 è "allineata"
(dicono loro) a VB6.
Io comunque ho superato il problema definendo delle interfacces (funzioni)
che wrappano le classi.
Non so se sono stato chiaro.
In altre parole il problema è questo
tu definisci una classe nella tua libreria "LibreriaFunzioniAccess97.mda"
una classe clsTabella.
A questo punto ti aspetti di poter definire della tua applicazione
"ApplicazioneConUnRiferimentoALibreriaFunzioniAccess97.mdb" di poter usare
in un modulo una dichiarazione di questo tipo
Dim lo1 as New clsTabella
invece non lo puoi fare. Per il compilatore clsTabella non esiste.
Il problema può essere risolto?
Io l'ho risolto in questo modo: nella libreria definisco una funzione per
ogni metodo della classe.
Questa funzione ha tanti parametri quanti sono le proprietà associate al
metodo (supponiamo uno ProprietaAssociataAlMetodo1)
E il suo corpo (body)  è
Public Function FunzioneCheWrappaIlMetodo1(rProprietaAssociataAlMetodo1 as
...)
    dim loClasse as New clsTabella
    loClasse.ProprietaAssociataAlMetodo1 = rProprietaAssociataAlMetodo1
    loClasse.Metodo1
End Function
In questo modo tutto funziona bene, perchè la funzione è definita nello
stesso mdb/a della classe, ed è invocabile da tutti gli mdb che abbiano un
riferimento ad esso.
Spero di essere stato chiaro.
Per qualsiasi approfondimento riposta.
Michele Amato
P.S.
Scusami/te ma non ho il tempo di rileggere con calma il tutto, se ci sono
strafalcioni spero mi perdoniate. Ho preferito postarlo subito piuttosto che
domani ;-)
--
{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}
Sulla mia pagina personale
http://utenti.worldonline.it/micheleamato
è possibile trovare una add-in per Access97-2000:
          Access Navigator 2.0
comincia a esserci anche un pò di documentazione...
ho pubblicato anche la prima parte di un TUTORIAL
sull'uso di questo strumento
è in arrivo la 2.5
un'interfaccia migliore dell'explorer-like, l'ho chiamata Tabbed-MDI...
{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}

Michele Amato ha scritto:

direi di si, in quanto sono riuscito a creare e ad usare un mda.
Ho imprecato un pò a capire come doveva funzionare la tabella USysRegInfo, ma
poi ce l'ho fatta, quali cose è necessario sapere in proposito?
in effetti il fatto che non veda le classi fa perdere un pò di tempo a inserire
funzioni interne all'mda che le richiamino...
altre domande:
in una situazione di sviluppo FE - BE, con BE centralizzato e FE distribuito sui
client, è possibile posizionare l'aggiunta nel lato server e farla veder alle
applicazioni lato client?
se si, se inserisco delle funzioni che mi ritornano dei recordset eseguendo
delle query, queste query vengono eseguite nel server, diminuendo il traffico di
rete o nel client?
sempre se si, per eseguire operazioni sul BE deve essere installato Jet anche
sul BE?
ti ringrazio per le risposte
ciao
Paolo

 sul BE?
Ricordati sempre che Access NON è C/S (client/server), ad eccezione di A2000
in modalità ADP.
Quindi quando tu dividi il db, posizioni il B_E su un computer e il F_E su
tanti computer, non hai realizzato un'architettura C/S!
Stai semplicemente usando un'architettura con file system distribuito. In
altre parole è cose se invece di avere un solo hard disk, tu ne avessi
tanti, interconnessi e vedessi tutto come un'unico hard disk. Sì il sistema
operativo ti maschera i problemi relativi a questa gestione ma se tu chiedi
un file che fisicamente è memorizzato su un hard disk accessibile solo con
un canale con una scarsa banda, non ti puoi aspettare buone performance.
Proprio perchè "gira" tutto sulla tua macchina. Secondo me non ha alcun
senso parlare di Client e di Server quando c'è di mezzo Access, se non
nell'accezione di server inteso come FILE SERVER.
La situazine non cambia introducendo la libreria. La sua posizione è solo un
problema di file system.
Ancora, non confondere il FILE SERVER, con il DATABASE SERVER.
Se vuoi possiamo approfondire il discorso, non vorrei dirti cose che magari
già sai.
Saluti
Michele Amato

 a proposito.
riporta più o meno quello che c'è su MSDN, però io sono riuscito a utilizzare il
mio mda solo quando lo registrato (passami il termine) come add-in e ho inserito
nell'mda) la riga specifica nella tabella USysRegInfo. Come posso fare
altrimenti?, ovvero come funziona il 'caso libreria'

conosco abbastanza le problematiche di access su applicazioni distribuite, in
realtà la mia domanda era per capire se potevo 'simulare' il comportamento di
un'activex.
In un progetto che ho svolto non molto tempo fà, infatti, ho creato un'activex
che mi eseguiva accesso ai dati ed era residente sulla macchina ove risiedeva il
DB, dai front end (che non avevano tabelle collegate, nè query, ma solo
maschere, report e moduli di codice) questo veniva istanziato e veniavano
richiamati i suoi metodi che mi restituivano recordset caricati con delle query
eseguite dall'activex; queste query venivano eseguite sulla macchina con il DB,
riducendomi notevolmente il traffico di rete. Questo per me era un grosso
vantaggio, perchè alcuni front end si connettevano al DB attraverso linea ISDN,
per cui puoi immaginare la lentezza nel caricare recordset interi........
La mia curiosità era rivolta, oltre che a conoscere cose che non ho mai usato,
al fatto di poter sostituire un activex con un'aggiunta access.
Ciao e grazie
