Discussione:
Distinta Base
(troppo vecchio per rispondere)
Andrea
2004-07-08 12:08:42 UTC
Permalink
Buongiorno a tutti, mi chiamo Andrea e questa è la prima volta che chiedo un
vero aiuto ed ho pensato ai newsgroup.
La mia necessità è quella di effettuare l'esplosione di una distinta e di
poterla stampare a video o su carta con una struttura ad albero a seconda
dei livelli di cui è composta).
Le tabelle usate sono
- TabDistinta
- TabComponenti
Ogni distinta ha un progressivo che la lega ai suoi componenti e c'è poi la
possibilità di avere delle distinte con altre sottodistinte al suo interno.
Dal punto di vista della query ho una mezza idea su come caricare la
distinta (se avete qualche suggerimento sarà ben accettato) ma non riesco a
trovare una soluzione che mi permetta di risolvere
il problema della visualizzazione ad lbero... come posso fare?
Spero di essere stato esauriente e confido in un aiuto... a presto.


--------------------------------
Inviato via http://arianna.libero.it/usenet/
Martino Serri
2004-07-08 12:24:56 UTC
Permalink
Post by Andrea
Buongiorno a tutti, mi chiamo Andrea e questa è la prima volta che chiedo un
vero aiuto ed ho pensato ai newsgroup.
Ciao andrea,
Post by Andrea
La mia necessità è quella di effettuare l'esplosione di una distinta e di
poterla stampare a video o su carta con una struttura ad albero a seconda
dei livelli di cui è composta).
Le tabelle usate sono
- TabDistinta
- TabComponenti
Ogni distinta ha un progressivo che la lega ai suoi componenti e c'è poi la
possibilità di avere delle distinte con altre sottodistinte al suo interno.
Dal punto di vista della query ho una mezza idea su come caricare la
distinta (se avete qualche suggerimento sarà ben accettato) ma non riesco a
trovare una soluzione che mi permetta di risolvere
il problema della visualizzazione ad lbero... come posso fare?
Spero di essere stato esauriente e confido in un aiuto... a presto.
IMHO dipende molto da come sono strutturate le tabelle.

Presumo che in TabComponenti ci sia un riferimento a TabDistinta, in
modo da dare profondità infinita alla distinta base, giusto?

Sicuramente puoi sfruttare un algoritmo ricorsivo che si sviluppa su
tutto il ramo prescelto, che è dato dalla chiave di tabdistinta.

Per ogni componente che trovi che ha un rif. a tabdistinta hai un
componente da esplodere e richiami la funzione stessa passandogli come
punto di entrata il nuovo id di tabdistinta, altrimenti prosegui.

M.
a***@luparense.com
2004-07-08 12:40:19 UTC
Permalink
Post by Martino Serri
Post by Andrea
Buongiorno a tutti, mi chiamo Andrea e questa è la prima volta che chiedo un
vero aiuto ed ho pensato ai newsgroup.
Ciao andrea,
Post by Andrea
La mia necessità è quella di effettuare l'esplosione di una distinta e di
poterla stampare a video o su carta con una struttura ad albero a seconda
dei livelli di cui è composta).
Le tabelle usate sono
- TabDistinta
- TabComponenti
Ogni distinta ha un progressivo che la lega ai suoi componenti e c'è poi la
possibilità di avere delle distinte con altre sottodistinte al suo interno.
Dal punto di vista della query ho una mezza idea su come caricare la
distinta (se avete qualche suggerimento sarà ben accettato) ma non riesco a
trovare una soluzione che mi permetta di risolvere
il problema della visualizzazione ad lbero... come posso fare?
Spero di essere stato esauriente e confido in un aiuto... a presto.
IMHO dipende molto da come sono strutturate le tabelle.
Presumo che in TabComponenti ci sia un riferimento a TabDistinta, in
modo da dare profondità infinita alla distinta base, giusto?
Sicuramente puoi sfruttare un algoritmo ricorsivo che si sviluppa su
tutto il ramo prescelto, che è dato dalla chiave di tabdistinta.
Per ogni componente che trovi che ha un rif. a tabdistinta hai un
componente da esplodere e richiami la funzione stessa passandogli come
punto di entrata il nuovo id di tabdistinta, altrimenti prosegui.
M.
Hai capito perfettamente il problema e ti ringrazio della risposta, però
dalla mia conoscenza non ci sono possibilità di creare comandi SQL di tipo
ricorsivo e poi anche se riuscissi a recuperare i record voluti non avrei un
riferimento per riuscire a creare una struttura ad albero.

Se ti può essere utile uso SQL SERVER e vorrei sviluppare il tutto con
Delphi, ma se hai qualche consiglio a proposito del software di sviluppo
sarà ben accetto.

Ti ringrazzio vivamente dell'attenzione.

A.

--------------------------------
Inviato via http://arianna.libero.it/usenet/
Martino Serri
2004-07-08 13:16:12 UTC
Permalink
Post by a***@luparense.com
Post by Martino Serri
IMHO dipende molto da come sono strutturate le tabelle.
Presumo che in TabComponenti ci sia un riferimento a TabDistinta, in
modo da dare profondità infinita alla distinta base, giusto?
Sicuramente puoi sfruttare un algoritmo ricorsivo che si sviluppa su
tutto il ramo prescelto, che è dato dalla chiave di tabdistinta.
Per ogni componente che trovi che ha un rif. a tabdistinta hai un
componente da esplodere e richiami la funzione stessa passandogli come
punto di entrata il nuovo id di tabdistinta, altrimenti prosegui.
M.
Hai capito perfettamente il problema e ti ringrazio della risposta, però
dalla mia conoscenza non ci sono possibilità di creare comandi SQL di tipo
ricorsivo,
In effetti con il solo SQL non saprei come tirare fuori una struttura
ricorsiva, e forse non c'è la possibilità (metto il condizionale perché
non ho mai affrontato il discorso da questo punto di vista)
Post by a***@luparense.com
e poi anche se riuscissi a recuperare i record voluti non avrei un
riferimento per riuscire a creare una struttura ad albero.
Come no? Da qualche parte ci sarà pure un riferimento, altrimenti il
dato non esiste. Se non esiste il dato, puoi usare quello che vuoi ma
non tirerai mai fuori una cippa ;)
Post by a***@luparense.com
Se ti può essere utile uso SQL SERVER e vorrei sviluppare il tutto con
Delphi, ma se hai qualche consiglio a proposito del software di sviluppo
sarà ben accetto.
E' indifferente in questo caso cosa usi, si tratta semmai di capire come
sono strutturate le tabelle (o come le strutturerai) e quale
procedimento seguire.

Ad esempio qualcosa di rapido da implementare (non necessariamente
efficente) è:

tb_articoli:
art_id
art_s_nome

tb_dbase
dbs_id
dbs_art_id -- reference all'art.
dbs_dbs_id -- reference interna al padre

così ad esempio hai
1, "Penna a sfera", null -- non ha padre quindi è radice dell'albero
2, "Tappo", 1 -- il padre è penna
3, "Refil", 1
4, "Inchiostro", 3 -- il padre dell'inchiostro è "refil" non "penna"...
5, "Corpo", 1
6, "Sfera", 3 -- la sfera è nel refil


Per sapere quanti figli ha un padre ricerchi sul campo dbs_dbs_id quelli
che hanno l'id del padre e per ogni riga ottenuta, effetti nuovamente la
ricerca usando la stessa funzione.

M.
Andrea
2004-07-08 13:31:06 UTC
Permalink
Post by Martino Serri
Post by a***@luparense.com
Post by Martino Serri
IMHO dipende molto da come sono strutturate le tabelle.
Presumo che in TabComponenti ci sia un riferimento a TabDistinta, in
modo da dare profondità infinita alla distinta base, giusto?
Sicuramente puoi sfruttare un algoritmo ricorsivo che si sviluppa su
tutto il ramo prescelto, che è dato dalla chiave di tabdistinta.
Per ogni componente che trovi che ha un rif. a tabdistinta hai un
componente da esplodere e richiami la funzione stessa passandogli come
punto di entrata il nuovo id di tabdistinta, altrimenti prosegui.
M.
Hai capito perfettamente il problema e ti ringrazio della risposta, però
dalla mia conoscenza non ci sono possibilità di creare comandi SQL di tipo
ricorsivo,
In effetti con il solo SQL non saprei come tirare fuori una struttura
ricorsiva, e forse non c'è la possibilità (metto il condizionale perché
non ho mai affrontato il discorso da questo punto di vista)
Post by a***@luparense.com
e poi anche se riuscissi a recuperare i record voluti non avrei un
riferimento per riuscire a creare una struttura ad albero.
Come no? Da qualche parte ci sarà pure un riferimento, altrimenti il
dato non esiste. Se non esiste il dato, puoi usare quello che vuoi ma
non tirerai mai fuori una cippa ;)
Post by a***@luparense.com
Se ti può essere utile uso SQL SERVER e vorrei sviluppare il tutto con
Delphi, ma se hai qualche consiglio a proposito del software di sviluppo
sarà ben accetto.
E' indifferente in questo caso cosa usi, si tratta semmai di capire come
sono strutturate le tabelle (o come le strutturerai) e quale
procedimento seguire.
Ad esempio qualcosa di rapido da implementare (non necessariamente
art_id
art_s_nome
tb_dbase
dbs_id
dbs_art_id -- reference all'art.
dbs_dbs_id -- reference interna al padre
così ad esempio hai
1, "Penna a sfera", null -- non ha padre quindi è radice dell'albero
2, "Tappo", 1 -- il padre è penna
3, "Refil", 1
4, "Inchiostro", 3 -- il padre dell'inchiostro è "refil" non "penna"...
5, "Corpo", 1
6, "Sfera", 3 -- la sfera è nel refil
Per sapere quanti figli ha un padre ricerchi sul campo dbs_dbs_id quelli
che hanno l'id del padre e per ogni riga ottenuta, effetti nuovamente la
ricerca usando la stessa funzione.
M.
Ti ringrazio vivamente, ora mi metto sotto e cerco di creare queta
procedura.
Andrea

--------------------------------
Inviato via http://arianna.libero.it/usenet/
Andrea
2004-07-08 15:37:42 UTC
Permalink
Tanto per spaventare un po' volevo farvi vedere la struttura delletabelle
che uso per la gestione della distinta.

Le tabelle usate sono:

1.DISTINTAARTCOMPOSTI la quale contiene tutti i codici che hanno una
distinta.
I campi sono:
progressivo
artcomposto (riferimento alla tabella degli articoli)

1.DISTINTABASE la quale contiene tutti i codici che compongono la distinta
base
I campi sono:
rifprogressivo (chiave esterna alla tab distintaartcomposti)
nrriga (ordine nella distinta)
codcomponente (riferimento alla tabella degli articoli)


Forse io non ho mai progettato data base ma come faccio ad esplodere una
distinta con sottodistinte con questa struttura?
Forse sono io ma mi sembra un tantino complicato... :-(
Grazie ancora per i link e l'aiuto Andrea



--------------------------------
Inviato via http://arianna.libero.it/usenet/
artemis.alpeia
2004-07-08 17:37:36 UTC
Permalink
Post by Andrea
Tanto per spaventare un po' volevo farvi vedere la struttura delletabelle
che uso per la gestione della distinta.
prima o poi ne vedrai di tabelle complesse davvero :))
--
./artemis.alpeia
Gabriele Palma
2004-07-08 19:56:40 UTC
Permalink
Post by artemis.alpeia
Post by Andrea
Tanto per spaventare un po' volevo farvi vedere la struttura
delletabelle
Post by artemis.alpeia
Post by Andrea
che uso per la gestione della distinta.
prima o poi ne vedrai di tabelle complesse davvero :))
^_^

lol
Andrea
2004-07-09 06:56:51 UTC
Permalink
Post by Andrea
Post by artemis.alpeia
Post by Andrea
Tanto per spaventare un po' volevo farvi vedere la struttura
delletabelle
Post by artemis.alpeia
Post by Andrea
che uso per la gestione della distinta.
prima o poi ne vedrai di tabelle complesse davvero :))
^_^
lol
Ragazzi... di vederne delle belle sono d'accordo e altrimenti che gusto ci
si trova, però bisogno che una base logica ci sia e non risulti super
contorta... Cmq grazie dell'aiuto e dei link.


--------------------------------
Inviato via http://arianna.libero.it/usenet/
Stefano Zamboni
2004-07-08 13:46:36 UTC
Permalink
Il 08 Lug 2004, 14:24, Martino Serri
<***@hotmail.com> ha scritto:
[snip]
Hai capito perfettamente il problema e ti ringrazio della risposta, però
dalla mia conoscenza non ci sono possibilità di creare comandi SQL di tipo
ricorsivo e poi anche se riuscissi a recuperare i record voluti non avrei un
riferimento per riuscire a creare una struttura ad albero.
Se ti può essere utile uso SQL SERVER e vorrei sviluppare il tutto con
Delphi, ma se hai qualche consiglio a proposito del software di sviluppo
sarà ben accetto.
Ti ringrazzio vivamente dell'attenzione.
prova a leggere qui.. per me è stato illuminante.. ;-)

http://www.sitepoint.com/article/hierarchical-data-database

saluti

Stefano
giorgio rancati
2004-07-08 21:55:55 UTC
Permalink
Post by Andrea
Buongiorno a tutti, mi chiamo Andrea e questa è la prima volta che chiedo un
vero aiuto ed ho pensato ai newsgroup.
La mia necessità è quella di effettuare l'esplosione di una distinta e di
poterla stampare a video o su carta con una struttura ad albero a seconda
dei livelli di cui è composta).
Le tabelle usate sono
- TabDistinta
- TabComponenti
Ogni distinta ha un progressivo che la lega ai suoi componenti e c'è poi la
possibilità di avere delle distinte con altre sottodistinte al suo interno.
Dal punto di vista della query ho una mezza idea su come caricare la
distinta (se avete qualche suggerimento sarà ben accettato) ma non riesco a
trovare una soluzione che mi permetta di risolvere
il problema della visualizzazione ad lbero... come posso fare?
Spero di essere stato esauriente e confido in un aiuto... a presto.
Ciao Andrea,
prova a vedere se puoi prendere qualche spunto da questo thread
-----------------
http://www.google.it/groups?q=query+ricorsiva+group:microsoft.public.it.sql&hl=it&lr=&ie=UTF-8&selm=e%23Blz5ENEHA.3400%40TK2MSFTNGP09.phx.gbl&rnum=1
-----------------

Ciao Giorgio
Andrea
2004-07-09 06:57:42 UTC
Permalink
Il 08 Lug 2004, 23:55, "giorgio rancati"
Post by Andrea
Post by Andrea
Buongiorno a tutti, mi chiamo Andrea e questa è la prima volta che
chiedo
Post by Andrea
un
Post by Andrea
vero aiuto ed ho pensato ai newsgroup.
La mia necessità è quella di effettuare l'esplosione di una distinta e di
poterla stampare a video o su carta con una struttura ad albero a seconda
dei livelli di cui è composta).
Le tabelle usate sono
- TabDistinta
- TabComponenti
Ogni distinta ha un progressivo che la lega ai suoi componenti e c'è poi
la
Post by Andrea
possibilità di avere delle distinte con altre sottodistinte al suo
interno.
Post by Andrea
Dal punto di vista della query ho una mezza idea su come caricare la
distinta (se avete qualche suggerimento sarà ben accettato) ma non
riesco
Post by Andrea
a
Post by Andrea
trovare una soluzione che mi permetta di risolvere
il problema della visualizzazione ad lbero... come posso fare?
Spero di essere stato esauriente e confido in un aiuto... a presto.
Ciao Andrea,
prova a vedere se puoi prendere qualche spunto da questo thread
-----------------
http://www.google.it/groups?q=query+ricorsiva+group:microsoft.public.it.sql&hl=it&lr=&ie=UTF-8&selm=e%23Blz5ENEHA.3400%40TK2MSFTNGP09.phx.gbl&rnum=1
Post by Andrea
-----------------
Ciao Giorgio
Grazie mille per il link... molto interessante.
Andrea

--------------------------------
Inviato via http://arianna.libero.it/usenet/
Andrea Sollazzo
2004-07-31 23:26:35 UTC
Permalink
Ciao Ragazzi.
Ho appena sottoscritto questo newsgroup ed è la prima volta che posto quì.
Ho letto con molto interesse la problematica sollevata da Andrea (Tralatro
mio ononimo) perchè la stessa me la ritrovo io per la gestione degli
Articoli e delle materie prime.
Uso Sql Server ed ho pensato di risolvere la selezione della distinta ad n
Livelli in questa maniera...
Ragazzi vi avvisoooo. Io sono di base un programmatore Visual Basic... è da
poco che realizzo procedure di una certa complessità sul database in
T-SQL... non inorridite :-)
Creo una Stored Procedure ed una function.

RICHIAMANDO LA STORED PROCEDURE:
- Prepara un nvarchar contente la SELECT (Con delle sum)
- Alla Stringa concatena il risultato di una funzione non valorizzando il
parametro @ValoreIniziale
--------------------------------------------------------------------
-----------------------------
-- RICHIAMANDO LA FUNCTION: [Parametri @IDArticolo,
@ValoreIniziale]
- Controlla se un parametro @ValoreIniziale NVARCHAR è
valorizzato
- In caso affermativo memorizza nella variabile @Result (La
funzione termina con Result @Result )
@Result = @ValoreIniziale + 'UNION '
- Valorizza @Result Con la condizione di Select delle materie di
@IDArticolo prime che non sono Articoli composti
da altri articoli
- Se @IDArticolo è composto da Articoli composti da altri
Articoli
Apro un cursore su questi articoli composti
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @Result = Richiamo la stessa funzione con i
parametri IDComponente, @Result
END
-Restituisce @Result
--------------------------------------------------------------------
-----------------------------
-Completo la Stringa con le condizioni di Group By
- Lancio sp_ExecuteSql

Vabbè l'ho detta in maniera molto maccheronica... Spero di essermi spiegato
bene.
Il mio problema ora è questo ... vorrei utilizzare lo stesso procedimento
per una funzione che mi restituisca il Costo dell'Articolo. Ma non è
possibile!!
IN UNA FUNCTION NON POSSO USARE LA PROCEDURA sp_ExecuteSql...
Mi dice che nelle function si possono utilizzare solo StoredProcedure
Estese... Ma Boia di un giuda! sp_ExecuteSql non è una sp estesa?! Posso
ovviare a questo problema in qualche modo riuscendo ad ottenere i vantaggi
delle Function?
Grazie e ciao a tutti
Andrea
Post by Andrea
Buongiorno a tutti, mi chiamo Andrea e questa è la prima volta che chiedo un
vero aiuto ed ho pensato ai newsgroup.
La mia necessità è quella di effettuare l'esplosione di una distinta e di
poterla stampare a video o su carta con una struttura ad albero a seconda
dei livelli di cui è composta).
Le tabelle usate sono
- TabDistinta
- TabComponenti
Ogni distinta ha un progressivo che la lega ai suoi componenti e c'è poi la
possibilità di avere delle distinte con altre sottodistinte al suo interno.
Dal punto di vista della query ho una mezza idea su come caricare la
distinta (se avete qualche suggerimento sarà ben accettato) ma non riesco a
trovare una soluzione che mi permetta di risolvere
il problema della visualizzazione ad lbero... come posso fare?
Spero di essere stato esauriente e confido in un aiuto... a presto.
--------------------------------
Inviato via http://arianna.libero.it/usenet/
Loading...