Newsgroup: it.comp.lang.visual-basic
Titolo: Urge soccorso please sto nel pallone

Ho una tabella di relazioni strutturata cosi:
IDRelazione (contatore) |  IDPadre | IDFiglio |
e vari record all'interno... ora il mio problema è...
passato il primo padre come faccio a sapere x quel padre quali sono i figli?
la cosa non è facile come sembra xche oltre che allo stesso primo padre
possono corrispondere n° figli diretti, possono anche verificarsi situazioni
infinite di figli dei figli e cosi' via...
Come posso fare? Calcolando che uso la versione MAX di Mysql 3.23 (l'ultima
insomma). Alla fine dovrò avere, in un array, tutti gli ID dei figli e
relativi figli dei figli e cosi' via...
Vi chiedo una funzione abbastanza generica che funzioni bene pero'...
Grazie... scusate ma anche la mia logica è andata nel pallone soprattutto x
calcolare gli n° figli dei figli dei figli ecc... :o( sigh....
Ancora grazie...


Non so se sto andando fuori tema ma ad esempio:
Gianni č padre di Mario
Mario č padre di Marco
costruisco cosi il mio RecordSet
IdUnivocoDelRecord    IndiceDelPadre    Nome
1                                   Null                     Gianni
2                                    1                        Mario
3                                    2                        Marco
poi ti crei una self-join e ti estrai quello che ti serve.

 Mario è padre di Marco


 1000 grazie comunque...
il tuo problema si risolve con una procedura ricorsiva, cmq dici di aver
provato tante soluzioni, se questa rientra fra quelle che hai provato,
scusa per la perdita di tempo nel leggere il post... ma secondo me la
ricorsione
è la soluzione che più si adatta al tuo problema
p.s. per le prossime volte cerca di quotare in maniera più decente

 ha scritto nel messaggio
news:ahjptk$kco$1...@panco.nettuno.it...


 > > Mario č padre di Marco



1) Scegli il codice del padre FatherID = 'x'
2)In una variabile di tipo testo: mySql = "Select * From 'Tabella' Where
IndiceDelPadre = " & FatherID
3)Inizializza il vettore di uscita:   Dim tuoArray() as long
                                                redim tuoArray(0)
4)Richiami una funzione ricorsiva a cui passi come parametro la stringa SQL
Public sub SearchSoon(byref mySql As String, byref tuoArray() as long)
//apri un recordset con la stringa SQL in ingresso
While Not myRs.EOF --> //condizione di uscita della procedura ricorsiva
    redim preserve tuoArray(ubound(tuoArray)+1)
    tuoArray(ubound(tuoArray))=myrs("IndiceDelFiglio")
//richiami la procedura ricorsiva
mySql = "Select * From 'Tabella' Where IndiceDelPadre  = " &
myRs("IndiceDelFiglio
")
    call SearchSoon(mySql, tuoArray())
    myRs.MoveNext
Wend
End Sub
con le opportune integreazioni in questo modo avrai in uscita, nella
variabile tuoArray
l'elenco dei figli , partendo da tuoArray(1),
cmq se vuoi puoi sfruttare anche la posizione 0
p.s.questa sub non è molto ottimizzata, dato che corri il rischio di avere
molti recordset aperti
contemporanemtente e come tutte le sub/function ricorsive tende ad
utilizzare molte risorse
di sistema, tutto questo legato al numero di volte che viene richiamata.
p.p.s Se non vuoi utilizzare i recordset puoi caricare i dati della tabella
in una matrice
e lavorare su quelli senza accedere continuamente al DB
--
bye BlackMagic
ICQ: 85485468
Aiuta la ricerca sul cancro 
http://members.ud.com
Join
at:
http://members.ud.com/services/teams/team.htm?id=2E71C62A-8E67-48DB-B472-
BCA129B35412

 ha scritto nel messaggio
news:ahll1p$u1rf6$1...@ID-150836.news.dfncis.de...


 idea???
la tuoa idea puņ andare, ma mi sembra che in questo modo
tu faccia un' operazione inutile, perchč hai deciso
di usare una stringa e non direttamente un array?
al limite invece di usare una sub, come ti ho suggerito
puoi usare una function del tipo
function SearchSoon (.....) as long()
e nel client:
dim arrExit() as long
arrExit=tuaDll.SearchSoon(...)

 ha scritto nel messaggio
news:aho7ag$udp5j$1...@ID-150836.news.dfncis.de...


 cmq 1000 grazie ankora...
di niente
