Newsgroup: it.comp.appl.access
Titolo: Tabelle dinamiche e struttura ad albero

Data una tabella progetto con ID (contatore e chiave primaria) e
descrizione (testo 255) ed un tabella fasi con Id (numerico e chiave
in relazione uno a molti con tabella progetto), IDfase  (contatore e
chiave primaria), descrizione fase (testo 255), è possibile creare per
ogni fase della tabella fasi n altre fasi che a loro volta creano
altre n fasi senza aver preventivamente costruite le tabelle?
Esempio:
ProgettoN
7
 FaseN (collegato al progetto 7)
7.1
7.2
7.3
Fin qui è tutto ok.
Fase 7.1 (creare n altre fasi per 7.1, ma la tabella non esiste per
diventare poi:)
7.1.1
Fase 7.1.1 (creare n altre fasi per 7.1.1, ma la tabella non esiste
per diventare poi:)
7.1.1.1
Fase 7.1.1 .1(creare n altre fasi per 7.1.1.1, ma la tabella non
esiste per diventare poi:)
7.1.1.1.1
E via dicendo.
Il fatto è che non conosco a priori quante fasi e sottofasi può avere
un progetto.
C'è una via d'uscita? Grazie

 ha scritto nel messaggio 
news:c21afcd4-478c-4dc0...@s8g2000prg.googlegroups.com...





-----------------------------------------
Conosco poco le strutture ad albero, però mi viene in mente che potresti 
inserire tutto nella stessa tabella a patto di :
1) definire un nodo padre, per ogni nodo. (questo ti permetterà di risalire 
il ramo)
2) la ricerca andrà fatta su ogni nodo che abbia un padre con radice il nodo 
in esame meno un riferimento (quindi il padre)
es.
7.1.1.3 avrà padre 7.1.1 che a sua volta è figlio di 7.1 per arrivare a 7: 
nodo radice.
Le scansioni andranno fatte riuscendo a determinare i 'gruppi' nel nome. Il 
gruppo di 7.1.1.3 è di quarto livello (4 punti o separatori). Qualche riga 
di VBA ti permette di percorrere i rami all'indietro. Con una query puoi 
cercare qualsiasi figlio di un nodo.
IvanDaBologna
PS
se organizzi bene le procedure VBA non dovresti nemmeno aver bisogno di 
definire il campo padre, essendo deducibile dal nome del nodo stesso.

 ha scritto nel messaggionews:c21afcd4-478c-4dc0...@s8g2000prg.googlegroups.com...

Grazie per la tempestività,
purtroppo anche io conosco poco la struttura ad albero e quindi
cercavo scappatoie.


su accessgroup c'è un esempio di treeview per query ricorsive.

 - Mostra testo tra virgolette -
Nessun altro suggerimento, muore cosi?

Nessun altro suggerimento, muore cosi?
Sinceramente non è che abbia capito molto bene cosa vorresti fare,
soprattutto quando dici: "... senza aver preventivamente costruite le
tabelle" e "... ma la tabella non esiste per diventare poi ...".
Magari fornisci qualche dettaglio in più sul contesto e sulle
funzionalità che vorresti implementare.
Vincenzo Turturro 
Certificato Eucip Core Level 
ITA 0000-002299 del 14/05/2007 
--------------------------------------------- 
il sito comune di it.comp.appl.access: 
http://www.sitocomune.com
 
--------------------------------------------- 
risorse Access: 
http://www.accessgroup.it
 
--------------------------------------------- 
Il sito comune di it.comp.as400 
http://www.faq400.com
 
---------------------------------------------

 Nessun altro suggerimento, muore cosi?
Ciao :)
Potresti implementare la struttura del LCN (LSA Control Number).
In pratica un campo di testo di 50 caratteri  lo consideri composto da
25 coppie di caratteri.
Ogni coppia identifica un livello della tua struttura, e ti permette
di codificare un max di 36^2=1296 elementi.
Quindi, nel tuo caso, una possibile struttura di chiavi sarebbe:
07
0701
070101
07010101
07010102
07010103
070102
0702
0703
070301
Ovviamente il livello di un oggetto è dato dalla Len(ChiaveLcn)/2, il
padre sarà Left(ChiaveLcn,Len(ChiaveLcn)-2), tutti i figli saranno Lcn
LIKE (ChiaveLcn & "??") e tutta la sua genealogia sarà Lcn LIKE
(ChiaveLcn & "*").
HTH Roberto


Penso che sia buono, ma non saprei come crearlo.
Mi spiego meglio: ho creato nel mio db solo due tabelle Progetto (7) e
Fasi (7.1) relazione uno a molti. Ora la mia necessità è quella di
creare sottofasi (7.1.1, 7.1.2, 7.1.3) collegata alla fase (7.1)
relazione uno a molti, ma non ho una tabella che ospiti le sottofasi;
poi continuare ancora creare subsottofase (7.1.1.1) collegata alla
sottofase (7.1.1) ma neanche qui ho una tabella subsottofasi, e
continuare così teoricamente all'infinito. Il fine di questo db è
quello di gestire procedure qualità o progetti, ma chiaramente non
conosco preventivamente tuttte le attività con subattività e via
discorrendo. Questo tipo di db l'ho visto in Ms Project in cui da una
radice posso creare infinite attività con fasi e subfasi. Scusate la
prolissità, e grazie ancora al team.

 - Mostra testo tra virgolette -
non l'ho trovo


Che equivale a dire, se la tua tabella Fasi contenesse (fra gli altri)
i campi LcnFase e NomeFase:
01 Fase
0101 Sottofase 1^
0102 Sottofase 2^
010201 Subsottofase 1
010202 Subsottofase 2
0103 Sottofase 3^
Non hai, quindi, tabelle diverse che contengono fasi, sottofasi,
subsottofasi, ... ma una sola tabella che contiene tutti questi
elementi.
Non dovrai, perciò, preoccuparti di relazioni di alcun genere perché,
per andare da un padre (ad es.: sottofase) ad un figlio (ad es.:
subsottofase) ti sarà sufficente spostarti di record.
Quel che ti voglio dire è: secondo te l'albero genealogico della tua
famiglia lo descrivi creando una nuova tabella ad ogni nuova
generazione o usando, in una sola tabella, delle chiavi che realizzino
il legame padre/figlio?
Roberto

prolissità, e grazie ancora al team.
Ti ripropongo la soluzione di Ivan che, fra parentesi, è quella
ottimale dal punto di vista del disegno concettuale e logico:
Fasi
---------------
ID
Codice
Descrizione
CD_Padre (chiave esterna sulla colonna ID della medesima tabella)
Esempio di contenuto
ID	Codice Descrizione CD_Padre
-------------------------------------------------------------
1	7.1	Fase 7.1	0
2	7.2	Fase 7.2	0
3	7.2.1	Fase 7.2.1	2
4	7.2.1.1	Fase 7.2.1.1	3
5	7.1.1	Fase 7.1.1	1
In questo modo non hai limiti sui livelli di classificazione: e con
una sola tabella !
Nella form di gestione puoi anche assegnare automaticamente il codice:
quando l'utente seleziona il "padre" con una combo, il codice del
record corrente è dato dal codice del "padre" selezionato concatenato
con il risultato di una opportuna Dmax sulla colonna Codice
selezionando solo i "figli" di quel "padre".


 - Mostra testo tra virgolette -
Ciao Roberto, certo usando delle chiavi.
MA non sono capace di creare quello che dici con Access.

 - Mostra testo tra virgolette -
Nel frattempo provo con le soluzioni di Ivan e Vincenzo, vi farò
sapere.

 - Mostra testo tra virgolette -
Ciao ho provato la soluzioni di Ivan e Vincenzo ma sicuramente non ho
capito.
Ho creato un'unica tabella fasi:
ID= contatore
Codice= testo
Descrizione=testo
CD_Padre= numerico (chiave esterna con ID della medesima tabella
relazione uno a molti)
Che significa CD_Padre? Rappresenta il livello? Forse 0 = radice, ma
7.2.1 è figlia di 7.2 e quindi non dovrebbe essere CD_padre=1


 - Mostra testo tra virgolette -
Mi accorgo ancora di più di non averci capito un' emerita m...a! Mi
viene da piangere
Dopo aver creato la tabella sono passato alla form (chiaramente sempre
senza sapere chi è CD_Padre),
"Nella form di gestione puoi anche assegnare automaticamente il
codice:
quando l'utente seleziona il "padre" con una combo (la combo ha come
origine che cosa'), il codice del
record corrente è dato dal codice del "padre" selezionato concatenato
con il risultato di una opportuna Dmax sulla colonna Codice
selezionando solo i "figli" di quel "padre". Come si fa? "
Porca paletta con i padri i figli e i nodi che vengono sempre al
pettine

5       7.1.1   Fase 7.1.1      1
Ed infatti la fase inviduata dal codice 7.2.1 ha CD_Padre=2 proprio ad indicare che è figlia della fase individuata dal
codice 7.2 il cui ID è 2 ...
Cosa c'è che non va ?



Vincenzo Turturro


 - Mostra testo tra virgolette -
1) Creata la struttura tabella fasi:
ID= contatore
Codice= testo
Descrizione=testo
CD_Padre= numerico (chiave esterna con ID della medesima tabella
relazione uno a molti) DEVE ESSERE relazione 1 (Fasi_1 campo ID) a
molti (Fasi campo CD_Padre) tipo join 1, Applica Integrità
referenziale = vero???
2) se questo fosse giusto, partendo dalla semplice tabella
visualizzata come foglio dati per aggiungere un nuovo record non
riesco a capire come dover lavorare perchè mi dice l'apporto non è
riuscito perchè si è cercato di modificare i valori dell'indice. Se
parto dal primo record con
ID	Codice	Descrizione  CD_Padre
2	7.1	novita
mi viene visualizzato il formato master/detail, nel detail che devo
inserire 7.1.1 e poi vado al record successivo e poi?
Non capisco
Potrei postarti la tabella ?

Binario, >Plurimo, >inventiamoci qualcosaltro
Se(SE ... citando Mauro Gamberini) avessimo solo alberi binari allora ogni 
nodo avrebbe UN SOLO PADRE !
Ma(MA ... autocitazione) se un nodo può AVERE PIU' PADRI allora tutto è da 
studiare!!!!
es.  3.5.8   4.4.8  1.7.8   2.6.8  5.3.8   6.2.8 !!!
in una somma 8 può essere generato da INFINITE!!!! somme, se stai 
percorrendo l'ALBERO DELLE SOMME!
Restano da identificare : tipo di grafo, convenzioni, strutture 
ammissibili....
Mi sono perso ... scusate!
IvanDaBologna

 > > > > radice posso creare infinite attività con fasi e subfasi.
il grande vantaggio è che MSproject ti permette di 'visualizzare' questo 
tipo di strutture.
Infatti il problema è proprio come visualizzare questi segmenti del grafo. A 
proposito ho dato un'occhiata a svariati softwares per la costruzione di 
mappe mentali o strutture ad albero e la questione viene affrontata in 
maniere anche molto diverse. Un punto chiave di tutti è proprio l'immissione 
dei concetti principali e dipendenti in una struttura testuale tipo Outline. 
Per intenderci un elenco del tipo
Mammiferi
    Terra
        Elefante
        Giaguaro
    Acqua
        Delfini
            Stenella
            Tursiope
....
La struttura è analoga a quella che stiamo affrontando noi e potremmo 
'numerarla'
01 Mammiferi
0101 Terra
010101 Elefante
010102 Giaguaro
0102 Acqua
010201 Delfini
01020101 Stenella
01020102 Tursiope
...
SELECT * FROM nodi WHERE [nodo] LIKE '010201*'
ci restituirà tutti i nodi di padre Delfini {Stenella,Tursipoe,...}
Il problema resta la visualizzazione .... ma l'esempio dell'Outline può 
aiutarci nella prima interpretazione. Quindi un elenco di righe che hanno 
tanti TABs, in testa, quanti sono il loro padri. Quindi Tursiope avrebbe 
nTABS = Len(nodo)/2 e verrebbe scritta
            Tursiope
L'ordine degli elementi è assicurato dall'ordine alfabetico! di [nodo].
Non vedo altri problemi (almeno fino a questo punto)
IvanDaBologna


Ciao Ivan sciogli nodi,  e tutti voi altri marinai che avete provato a
farmi sciogliere questo nodo
non ho capito un gran che ma di sicuro mi avete indicato l'argomento
da studiare ed approfondire,
tabelle autoreferenziate, query ricorsive e treeview. Grazie a tutti

 e quindi credo sia una strada percorribile!).
CUT
Ciao Ivan!
Grazie, non farmi arrossire :D e complimenti anche a te per la
ricerca ;)
Solo una piccola precisazione: il LCN (e varianti ... varie!) viene
utilizzato per assegnare un codice univoco agli elementi che
compongono un oggetto complesso.
E dato che con questo sistema è possibile gestire, usando solo 10
coppie di caratteri, la configurazione di una nave (di una *grande*
nave) sino all'ultima delle viti, è facile immaginare che ricadute si
potrebbero avere nell'applicare il LCN ad un controllo tree-view ...
Come nota a margine: lo standard militare che richiamavi in realtà è
una strada percorsa quotidianamente da diverse organizzazioni (non
solo militari).
Roberto

 e quindi credo sia una strada percorribile!).
Il famoso Lisandras Defendibilis sottospecie Yankees Protocollis. Specie 
rara,endemica nel District of Columbia (U.S.A.). Famiglia delle 
Binariacee, genere Annodatis.
P.S. Mi vado cercando un "vaffa"
-- 
ac
y-1=x

 ha scritto nel messaggio 
news:b107834b-5103-4540...@e67g2000hsc.googlegroups.com...

CUT

CUT



Roberto
---------
Ehilà,
ho capito due cose da questa lunga discussione in cui tutti abbiamo cercato 
di mettere 'del nostro':
1) è più facile gestire un albero binario, cosiccome le ricerche o qualsiasi 
cosa di 'binario' abbia la radice (tranne FS!).
** binario vuol dire in un senso o nell'altro, bianco o nero, 0(zero) o 1, 
.... connaturato a quasi tutto ciò che l'uomo crea. Forse per poter tenere 
saldamente in mano le redini del discorso!
2) in natura si presentano le più molteplici forme di linee decisionali. Un 
grafo su una mappa non è percorribile in un solo senso, ma nelle varie 
combinazioni che sono rese possibili dal tessuto del grafo stesso.
CONCLUSIONE.
Non perdiamoci di animo .... abbiamo sviluppato strumenti per affrontare 
queste sfide! altri ne svilupperemo per superare ostacoli e vicoli ciechi. 
Inno alla gioia per avere la possibilità di affrontare questi argomenti!!! 
(momento mistico)
IvanDaBologna 

 ha scritto nel messaggio 
news:2Mx9j.17392$8j3....@tornado.fastwebnet.it...

de escursus non est pettinandum! Sursum corda senzas nodis !
Purtroppo le mejo idee vengon sempre per calpestare l'erba del vicino ... un 
giorno faremo la : OpenWar (guerra aperta a tutti e senza munizioni, ognuno 
potrà contribuire e tutti vivremo felici e contenti ... ;)))   )
IvanDaBologna
PS
vaffa..re un caffè che serve pure a me!

 
Urca! Finalmente un  compagno di bagordi.  (Un altro!)
[IT] Ivan complimenti hai fatto passi da gigante.
Il giorno che mi darai una sonora legnata sulle nocche delle dita 
brindiamo. Cerca di sbrigarti!
-- 
ac
y-1=x

 P.S. Mi vado cercando un "vaffa"
<MenoGentile>
Ahooo ... a Zorooo!!!
</MenoGentile>
Comunque, annodatis et intricatis et prufundamente obscuris ma un
pregio ce l'hanno: dimostrano che una analisi fatta *per benino* porta
sempre ad una soluzione.
Certo, fare in Access una cosa che la morte sua è il Cobol a volte ci
vuole del coragg^h^h^h^h^h^h^hla sana pazzia, però "si ... può ...
fare!!!" [1] :D
Roberto
[1] Sì, perché una analisi completa e perfetta per funzionare ha
sempre bisogno di una bella botta di culo.

 brindiamo. Cerca di sbrigarti!
Uè Bagordi ... c'è un bicchierino di Napoleon pronto, qua ... :D
Roberto

 sempre bisogno di una bella botta di culo.
Verita' indiscutibile.
-- 
ac
y-1=x

 Ma dai?! Un "volgare" piano dei conti.
Azz, ma quello in una "qualsiasi" contabilità generale sta a tre
livelli e si porta dietro solo i saldi ... qua stiamo parlando di
campi X(5) che in realtà sono A9(4) con il primo carattere che può
contenere 'A', 'B', 'C' per dirti di moltiplicare la parte numerica
per 10, 100, o 1000 a seconda ...
Roberto