2009-09-26 18 views
7

Mi sto chiedendo alcune idee che possono migliorare il processo di progettazione delle soluzioni utilizzando il linguaggio di programmazione Access e VBA. Ovviamente non sto parlando delle migliori pratiche di programmazione in generale, ma solo di queste direttamente correlate ad Access e VBA.Best practice in Programmazione degli accessi

Tutti sanno che VBA ha un supporto di programmazione orientato agli oggetti, non c'è ereditarietà, polimorfismo e così via. Quindi, come garantire l'ASCIUTTO e il KISS contemporaneamente? Ci sono alcune soluzioni su come implementare in comune modelli e strategie in VBA, ma, francamente, sono spesso complicate. Quale di questi vale la pena implementare?

Prima di iniziare un nuovo progetto di Access (se presente;)), desidero raccogliere la raccolta delle migliori pratiche, perché dalla mia esperienza so che con VBA in Access (e con Access in sé) è molto difficile evitare cattivi concetti di design e terminare con codice multipla disordinato, illeggibile e ripetuto.

+2

Voglio solo dire che questa è una grande domanda. Ci vuole molta disciplina per evitare l'accesso a DRY, ma può essere fatto. Ma non c'è assolutamente alcun impedimento nel mescolare la logica ui e biz. Ma penso che sia importante ricordare che THE point of Access è uno sviluppo estremamente rapido. Access è la piattaforma di sviluppo più veloce là fuori per lo sviluppo di app per Windows. Quindi ha un posto. Seth –

risposta

2

Vorrei aggiungere qui altre domande e risposte correlate in un modo o nell'altro allo stesso problema. I puntatori potrebbero portare alla mia risposta a queste domande, ma non esitare a sfogliare le risposte di altri!

MS Access as enterprise software

Best way to test an MS-Access application

Working with multiple programmers on MS-Access

Recommendations on using SQL server GUIDS from MS-Access

devo ammettere che uno dei principali vincoli di accesso è il modello a oggetti limitato. Sono stato particolarmente infastidito dalla mancanza di possibilità di aggiungere le mie proprietà e metodi all'oggetto Form.Recentemente ho trovato una svolta efficace a questo problema creando 2 oggetti aggiuntivi:

  • l'oggetto "AllMyForms", che di fatto a mantenere 2 raccolte di oggetti: uno è la collezione standard forme di accesso, l'altro è un raccolta di tutte le istanze dell'oggetto "customForm". Entrambe le raccolte sono indicizzate con la proprietà hwnd di una forma aperta (o, per essere più specifici, la proprietà hwnd dell'istanza di un modulo, permettendomi di aprire più istanze dello stesso modulo).

  • l'oggetto "customForm", che elenca le mie proprietà e metodi di istanza di una forma

In questo modo personalizzato, posso fare riferimento a proprietà quali:

accessForms: riferimento alle proprietà e metodi standard

AllMyForms.accessForm(hwnd).name 

riferisce al .nam e proprietà del modulo accesso attraverso il suo valore .hwnd

Tra l'altro, la seguente Debug.Print poi mi danno lo stesso risultato:

? screen.ActiveForm.name 
? AllMyForms.accessForm().name 'default value for hwnd is screen.activeForm.hwnd' 

moduli personalizzati: proprietà

AllMyForms.customForm(hwnd).selectClause 

farà riferimento alla clausola SELECT utilizzata per creare il recordset sottostante dell'istanza del modulo

Moduli personalizzati: metodi

Il metodo .regregate, disponibile per un oggetto CustomForm, calcola la somma/min/max/avg di un modulo "colonna" (ovvero la somma di valori per un controllo in un modulo continuo) :

AllMyForms.customForm().agregate("lineAmount","sum") 

mi darà la somma di tutti i valori "lineAmount" visualizzato sullo istanza corrente/attiva di un modulo.

+0

Suppongo che il tuo punto sulle proprietà/metodi del cliente sia che non puoi aggiungerli tutti in un posto, cioè che per impostazione predefinita devi aggiungerli nel modulo di classe di ogni modulo? Ma questo può essere realizzato con un wrapper di moduli di classe standalone attorno ai moduli, e sembra proprio che sia esattamente quello che hai fatto. Puoi chiarirlo? –

+0

Mentre comprendo il valore del wrapper customForm(), non riesco a vedere il valore della raccolta di moduli personalizzati. Non vedo cosa stia fornendo che non è già disponibile con le raccolte Access esistenti. –

+0

Alcuni chiarimenti: l'idea di base è di poter aggiungere le mie proprietà/metodi ai moduli (ovvero le istanze dei moduli di accesso). Ho una procedura unica per aprire una tale istanza, con un metodo "allMyForms.open myFormName, mySelectQuery (se presente), ecc.".Ogni volta che viene chiamato questo metodo, aggiungo un membro alla raccolta privata o_AccessForms, essendo una nuova istanza di un modulo esistente. Aggiungerò anche un membro alla raccolta o_CustomForms, essendo una nuova istanza del mio oggetto "customForm". In questo modo posso accedere sia alle proprietà standard che alle proprietà personalizzate dei miei moduli aperti. –

2

La fonte definitiva per le migliori pratiche in programmazione L'accesso è questo libro:

accesso Manuale del 2002 Desktop Developer
http://www.amazon.com/Access-2002-Desktop-Developers-Handbook/dp/0782140092

Si dovrebbe ottenere una copia, se siete seriamente di programmazione in Access. Questi ragazzi sono gli esperti.

Mi rendo conto che il libro sembra datato, ma tutte le informazioni sono ancora valide. Suppongo che non sia mai stato aggiornato perché questo tipo di sviluppo è un po 'un'area di nicchia. Ma Access non è cambiato molto internamente (è uno degli unici strumenti di sviluppo software rimasti che utilizza ancora ciò che equivale a un dialetto di VB6) e la maggior parte delle informazioni nel libro è ancora buona.

Il libro compagno che si concentra su client/server di sviluppo è qui: Handbook

Access 2002 Enterprise Developer
http://www.amazon.com/Access-2002-Enterprise-Developers-Handbook/dp/0782140106

+0

Due dei miei libri preferiti di sempre. Ho avuto ogni edizione del primo. –

0

Una cosa che ho sempre avuto a che fare quando ho fatto la programmazione L'accesso è stato l'uso di molti campi nascosti per motivi vincolanti. Mi sono assicurato di rendere il campo invisibile e ho anche cambiato il colore del campo in primo piano con il bianco e lo sfondo rosso in modo che la gente sapesse che questo era un campo nascosto.

Un'altra best practice che ho utilizzato utilizzava moduli per tutto il mio codice condiviso. Prendi l'abitudine di inserire molto del tuo codice riusabile nei moduli.