Numeratore automatico

mercoledì 07 novembre 2012 - 10.43
Tag Elenco Tags  C#  |  .NET 4.0  |  Visual Studio 2010  |  SQL Server 2005  |  Crystal Reports 2008

teo256 Profilo | Newbie

Buongiorno a tutti,

è possibile avere una colonna di una tabella con autoincremento resettabile?
Per essere più precisi:
Avendo una tabella ed una sottotabella collegate da una colonna, vorrei sapere se nella sottotabella è possibile impostare che una certa colonna (numero di riga dell'ordine, per esempio) sia ad autoincremento ma che si resettasse per ogni nuovo record della tabella madre?

Tutto questo con db MS SQL e Visual Studio.
Grazie.

ridaria Profilo | Expert


>ad autoincremento ma che si resettasse per ogni nuovo record
>della tabella madre?

cioè ogni volta che si aggiunge un record nella tabella (madre) nella tabella collegata (figlia) la colonna (ex Progressivo) venga rinumerata!

Faccio fatica seguirti.

Non c'è già il campo numeratore (id) della figlia che segue un ordinamento progressivo?
Ma di sicuro non è questo quello che vuoi!.

Se ho ben capito, non puoi far altro che ad ogni inserimento di record riesegui la numerazione sulla tabella figlia (via codice)

Fammi sapere

Ciao

Riccardo D'Aria

pieroalampi Profilo | Expert

si puo fare se ho capito bene con una select per leggere i valori ed un update per modificarli ma dovresti essere più preciso
SE RITIENI CHE LA RISPOSTA SIA RISOLUTIVA CHIUDI IL POST CLICCANDO SU ACCETTA
LA PRIMA FRASE DI UN PROGRAMMATORE HELLO WORD ...... ANCHE L'ULTIMA

teo256 Profilo | Newbie

Ciao,

la colonna ID (primary key) è già presente sia nella tabella madre che in quella figlia. Però questo campo mi serve solo per mantenere l'unicità di ogni riga.
Quello che vorrei fare è aggiungere un'altra colonna alla tabella figlia, ID_riga, che per ogni record della tabella madre, ripartisse da 1 ad incremento +1

teo256 Profilo | Newbie

Ciao,

volevo evitare l'uso di query in quanto non sarebbe una numerazione che avviene in automatico durante l'inserimento di ciascuna riga della tabella figlia.
Se non ho capito male, tu vorresti fare un update di una certa serie di record della tabella figlia aggiornando il campo in questione; questo però è possibile solo dopo aver inserito tutti i dati. Oppure andrebbe fatto dopo l'inserimento di ogni riga e poi andrebbe effettuato un nuovo fill del datagridview in modo da poter visualizzare il campo aggiornato.

ridaria Profilo | Expert

>Ciao,

>Quello che vorrei fare è aggiungere un'altra colonna alla tabella
>figlia, ID_riga, che per ogni record della tabella madre, ripartisse
>da 1 ad incremento +1

ok perfetto.
A questo punto non ti resta che, ad ogni aggiunta di record nella tabella madre, riscrivere i valori della numerazione nella colonna ID_riga facendo un update su di essa.
Per la precisione dovresti a termine dell'inserimento del record nella tabella madre:

Contare i record della tabella figlia; se usi access e ADODB esisteva proprio una proprietà count che restituiva il numero di record estratti nella query;

Fare un loop sulla tabella figlia, e per ogni record fare un update della colonna ID-riga inserendovi il valore appropriato che puoi ottenere inserendo nel loop un numeratore ad incremento unitario del tipo:
dim count as integer
count = count +1

Spero di essere stato chiaro.

CIAO

PS vediamo se alampi non ti suggerisce le stesse cose che ti ho appena detto, con la bella dicitura clicca su accetta :-)






Riccardo D'Aria

teo256 Profilo | Newbie

Il problema è che nel momento in cui creo il nuovo record nella tabella madre, non esistono record nella tabella figlia collegati al nuovo record della tabella madre.
Spero di essermi spiegato.

Grazie

ridaria Profilo | Expert

>Il problema è che nel momento in cui creo il nuovo record nella
>tabella madre, non esistono record nella tabella figlia collegati
>al nuovo record della tabella madre.
>Spero di essermi spiegato.


e allora quando appiono i record nella tabella figlia?

Questo almeno lo sappiamo? :-)




Riccardo D'Aria

teo256 Profilo | Newbie

Dopo aver riempito tutti i campi della tabella madre, si passa a compilare le varie righe della tabella figlia.

ridaria Profilo | Expert

>Dopo aver riempito tutti i campi della tabella madre, si passa
>a compilare le varie righe della tabella figlia.


OK
allora l'operazione di rinumerazione come ti ho detto sopra la devi fare al temine della compilazione delle righe della tabella figlia.


Riccardo D'Aria

teo256 Profilo | Newbie

come scriveresti la query di update?

ridaria Profilo | Expert


cosa usi?

ACCES?
SQL SERVeR?

VB.NET?
C?

Riccardo D'Aria

pieroalampi Profilo | Expert

Ridaria: quella dicitura sta nella firma !!! ma ho capito che ti dispiace la quindi tolgo, Ovviamente spero che lo facciano anche gli altri.
SE RITIENI CHE LA RISPOSTA SIA RISOLUTIVA CHIUDI IL POST CLICCANDO SU ACCETTA
LA PRIMA FRASE DI UN PROGRAMMATORE HELLO WORD ...... ANCHE L'ULTIMA

ridaria Profilo | Expert

>Ridaria: quella dicitura sta nella firma !!! ma ho capito
>che ti dispiace la quindi tolgo, Ovviamente spero che lo facciano
>anche gli altri.

.... complimenti per la buona volontà.



Riccardo D'Aria

pieroalampi Profilo | Expert

prego ma figurati suscitare le ire di qualcuno non è mai buono, chiudiamo la discussione che almeno per me non è produttiva
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LA PRIMA FRASE DI UN PROGRAMMATORE HELLO WORD ...... ANCHE L'ULTIMA

ridaria Profilo | Expert


>chiudiamo la discussione che almeno per me non è produttiva

giusto, non lo è neanche per me.

CIAO

Riccardo D'Aria

DomA Profilo | Expert

Ciao,
se ho capito bene quello che vuoi fare allora ti aspetta un gran lavoro perché devi farlo manualmente (da codice).

Cercherò di essere breve:
1) nella Tabella figlia il campo ID deve essere un campo numerico (NON AUTOINCREMENTANTE);
2) Trovi il max valore dell'id con una select (che chiamerò vecchioid) , dove la condizione è data dall'ID record della tabella madre (io utilizzerei un datareader poiché è più performante); la select è piuttosto semplice. Siccome a te interessa trovare ID MAX dato l'ID_madre io la imposterei così:
"SELECT TOP 1 ID FROM Figlia WHERE ID_MADRE = " & ID del record madre & " ORDER BY ID Desc"
3) dichiari una variabile (es. nuovoid) e la utilizzi come valore x il campo ID della tabella figlia.

Per fare ciò ti serve una if poiché se il datareader non trova alcun valore allora nuovoid = 1 altrimenti nuovoid = vecchioid + 1

spero di essere stato chiaro.


--------------------------------------------------------------------



http://www.infomidia.it

Domenico
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5