Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

aggiornamento automatico tramite query di update

302 views
Skip to first unread message

valeria

unread,
Mar 26, 2009, 11:40:55 AM3/26/09
to
Ciao a tutti, ho una tabella di dettaglio che contiene il dettaglio di
tutte le spedizioni

esempio
testata spedizione :
codice 11
descrizione bla bla

primo dettaglio spedizione
codice testata 11
numero pacco 0

secondo dettaglio spedizione
codice testata 11
numero pacco 1


terzo dettaglio spedizione
codice testata 11
numero pacco 2


quindi ogni volta che aggiungo un dettaglio, numero il pacco


il problema è che se viene cancellato un dettaglio, esempio il secondo


secondo dettaglio spedizione
codice testata 11
numero pacco 1


il mio campo "numero campo" presenta un "buco"

come posso fare un update (una query che lancerei alla fine del processo
di inserimento) che mi aggiorna i progressivi del campo numero pacco?
(rendendoli continui 0,1,2,3,4,5,6,7... in caso di "buchi")
ovviamente ogni spedizione ha il suo progressivo, non si tratta di un
progressivo comune a tutte le spedizioni

Grazie

David Martin

unread,
Mar 26, 2009, 12:23:20 PM3/26/09
to
valeria wrote:

> come posso fare un update (una query che lancerei alla fine del processo
> di inserimento) che mi aggiorna i progressivi del campo numero pacco?
> (rendendoli continui 0,1,2,3,4,5,6,7... in caso di "buchi")
> ovviamente ogni spedizione ha il suo progressivo, non si tratta di un
> progressivo comune a tutte le spedizioni

Non ho capito.
Dopo ciascun inserimento, vuoi rinumerare il campo 'numero pacco' di
tutte le spedizioni presenti nella tua tabella?
Oppure vuoi, per ciascun inserimento, che ti venga recuperato un 'numero
pacco' che vada a 'tappare' gli eventuali buchi causati dalle cancellazioni?

--
David Martin

valeria

unread,
Mar 26, 2009, 1:20:56 PM3/26/09
to
Grazie per la risposta!!

Vorrei aggiornare (ovvero ricreare il contatore) dopo ogni inserimento,
dato che se l'utente mi crea una spedizione con 3 righe di dettaglio e
mi cancella quella in mezzo o la prima il contarore non è progressivo...
io vorrei invece che nel dettaglio il campo inizi sempre da 0 (se ho una
sola riga di dettaglio) e proceda con numeri contigui ... 1,2,3,4


quindi dopo ogni inserimento, aggiornamento, cancellazione eseguirei
questa query di controllo, solo che non so come gestire l'update del
contatore

grazie ancora


David Martin

unread,
Mar 26, 2009, 2:21:04 PM3/26/09
to
valeria wrote:
> Grazie per la risposta!!
>
> Vorrei aggiornare (ovvero ricreare il contatore) dopo ogni inserimento,
> dato che se l'utente mi crea una spedizione con 3 righe di dettaglio e
> mi cancella quella in mezzo o la prima il contarore non è progressivo...
> io vorrei invece che nel dettaglio il campo inizi sempre da 0 (se ho una
> sola riga di dettaglio) e proceda con numeri contigui ... 1,2,3,4

Ma vuoi aggiornare il contatore solo della spedizione che l'operatore ha
aggiornato, oppure il contatore di tutte le spedizioni, comprese quelle
non toccate?


> quindi dopo ogni inserimento, aggiornamento, cancellazione eseguirei
> questa query di controllo, solo che non so come gestire l'update del
> contatore

Scusa, sembrerò ficcanaso, ma perché devi tenere un contatore privo di
buchi?
E poi, perché cancellare le righe (creando i buchi) e non marcarle ad
esempio come annullate ma mantenendole nella tabella?

--
David Martin

valeria

unread,
Mar 26, 2009, 4:40:54 PM3/26/09
to

> Ma vuoi aggiornare il contatore solo della spedizione che l'operatore ha
> aggiornato, oppure il contatore di tutte le spedizioni, comprese quelle
> non toccate?

solo di quella spedizione

considera che io ho già l'ID della testata, quindi dovrestsi solo
aiutarmi a creare l'update di quella specifica spedizione ... o meglio
del contatore delle righe di dettaglio

> Scusa, sembrerò ficcanaso, ma perché devi tenere un contatore privo di
> buchi?
> E poi, perché cancellare le righe (creando i buchi) e non marcarle ad
> esempio come annullate ma mantenendole nella tabella?

E' un discorso un po' complicato, è legato ad una codifica interna

Grazie per l'aiuto!

David Martin

unread,
Mar 27, 2009, 4:42:52 AM3/27/09
to
valeria wrote:
>
>> Ma vuoi aggiornare il contatore solo della spedizione che l'operatore ha
>> aggiornato, oppure il contatore di tutte le spedizioni, comprese quelle
>> non toccate?
>
> solo di quella spedizione
>
> considera che io ho già l'ID della testata, quindi dovrestsi solo
> aiutarmi a creare l'update di quella specifica spedizione ... o meglio
> del contatore delle righe di dettaglio

Ok, capito.
Riesci a postare lo script t-sql di creazione delle tabelle coinvolte?

--
David Martin

Valeria

unread,
Mar 27, 2009, 7:12:44 AM3/27/09
to
Grazie per l'aiuto


CREATE TABLE `DB`.`spedizionidettaglio` (
`id` int(10) unsigned NOT NULL auto_increment,
`idSpedizioni` int(10) unsigned NOT NULL,
`numeroPacco` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `FK_webspedizionidettaglio_1` (`idSpedizioni`),
CONSTRAINT `FK_webspedizionidettaglio_1` FOREIGN KEY (`idSpedizioni`)
REFERENCES `webspedizioni` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=631 DEFAULT CHARSET=latin1;


CREATE TABLE `DB`.`spedizioni` (
`id` int(10) unsigned NOT NULL auto_increment,
`idCliente` int(10) unsigned default NULL,
`idWebRubrica` int(10) unsigned default NULL,
`destRagioneSociale` varchar(255) default NULLdefault NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=379 DEFAULT CHARSET=latin1;


il campo da aggiornare è numeroPacco

che deve essere un progressivo "continuo" (con partenza da zero)
all'interno della stessa "spedizionidettaglio.idSpedizioni" ovvero
spedizioni.id

Grazie ancora!!!

David Martin

unread,
Mar 27, 2009, 9:24:29 AM3/27/09
to
Valeria wrote:

> il campo da aggiornare č numeroPacco


>
> che deve essere un progressivo "continuo" (con partenza da zero)
> all'interno della stessa "spedizionidettaglio.idSpedizioni" ovvero
> spedizioni.id

Premesso che questo ng č dedicato a Microsoft SQL Server, emntre tu stai
probabilmente usando Mysql (e quindi anche le sintassi sono un pochino
differenti), puoi provare con qualcosa di simile a questa procedura, da
richiamare quando fai le operazioni che devono scatenare la
rinumerazione del 'numeropacco'.

---------------
CREATE PROCEDURE usp_aggiorna_numero_pacco (@SpedizioneDaAggiornare AS INT)
AS

BEGIN

DECLARE @IDunivoco INT, @numeroPacco int

SET @numeroPacco = 0

DECLARE crsDettaglio CURSOR FAST_FORWARD FOR
SELECT [id]
FROM spedizionidettaglio
WHERE [idSpedizioni] = @SpedizioneDaAggiornare
ORDER BY [id]

OPEN crsDettaglio

FETCH NEXT FROM crsDettaglio INTO @IDunivoco

WHILE @@FETCH_STATUS = 0

BEGIN

UPDATE spedizionidettaglio
SET numeroPacco = @numeroPacco
WHERE [id] = @IDunivoco

SET @numeroPacco = @numeroPacco + 1

FETCH NEXT FROM crsDettaglio INTO @IDunivoco

END

CLOSE crsDettaglio
DEALLOCATE crsDettaglio

END
---------------

Poi magari in Mysql c'č qualche modo piů semplice, ma non lo conosco.

--
David Martin

0 new messages