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
> 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
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
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
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!
Ok, capito.
Riesci a postare lo script t-sql di creazione delle tabelle coinvolte?
--
David Martin
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!!!
> 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