Distinte basi e funzioni ricorsive PDF Stampa E-mail
Scritto da Lorenzo(pyx) Demarchi   
Mercoledì 30 Novembre 2005 01:00

Molto spesso sorge la necessita' di creare un applicativo in grado di gestire delle distinte basi senza conoscere a priori il livello di profondita' realmente necessario.

 

La soluzione proposta si basa sul concetto di legame dove ogni oggetto è composto da altri oggetti che a loro volta sono composti da altri oggetti e così via.

Per realizzare una simile soluzione ci basta una tabella che contenga il legame (padre-figli) e una funzione ricorsiva. Tralasciando la maschera di interfaccia utente che serve solo a mostrare l' utilizzo della soluzione possiamo vedere nell'allegato come l' esplosione della distinta base viene realizzata mediante la chiamata ad una singola funzione ricorsiva (ovvero che richiama sè stessa). La funzione di modulo:

Esplosione(Display As Control, codice$, Optional ByVal livello)

prende come parametri un controllo per la visualizzazione dei risultati (in applicazioni reali potrebbe essere una tabella di elaborazione temporanea) e il codice del quale si desidera avere l'esploso. Il terzo parametro identifica il livello della profondata della distinta, ramo per ramo, ed e' calcolato automaticamente dalla funzione (non va inserito nella chiamata iniziale).

 

E importante notare che in access i parametri sono per default ByRef o per riferimento. Questo significa che se una funzione modifica al suo interno una variabile parametro, questa modifica si propaga anche al codice chiamante. Nel nostro caso questo comportamento non e' ammesso e quindi il parametro livello e' dichiarato ByVal ovvero per Valore.

Volutamente il codice attivo di ricerca e' una stringa SQL in modo da funzionare con piccole modifiche anche su archivi non Access, per esempio MS-SQL.

Sempre in applicazioni reali i due campi della tabella Distinte che costituiscono il legame saranno preferibilmente dei numeri Interi (ID-Articolo) e faranno capo ad una tabella anagrafiche. Se nella colonna [Padri] si desidera visualizzare solo i primi livelli o codici Master, basterà aggiungere un flag che li identifichi. Se si desidera avere anche l' esplosione non in termini unitari di impiego ma come quantità totali di utilizzo basterà aggiungere un parametro relativo alla quantita' cosi' come e' riportato nella funzione

Esplosione1(Display As Control, codice$, Qta, Optional ByVal livello)

Con la soluzione proposta si ha normalmente il minimo impegno in termini di spazio occupato e una notevole semplicità nel codice.

 


Sistema operativo: Win32
Applicazioni: Access 2002/XP, Access 2003

 

Allegati:
FileDescrizioneDimensione del File
Scarica questo file (Distinta.zip)Distinta.zip 30 Kb
Ultimo aggiornamento Lunedì 06 Luglio 2009 22:42