Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
.NET Framework
Numero Documento
martedì 08 marzo 2011 - 17.25
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
VB.NET
|
.NET 3.5
|
Windows XP
|
Visual Studio 2008
|
SQL Server 2008
Peppino
Profilo
| Junior Member
186
messaggi | Data Invio:
mar 8 mar 2011 - 17:25
Ciao a tutti.
Come numero incrementale dei documenti uso la seguente funzione, e funziona benissimo.
Private Function NuovoNumero() As Integer
Try
'Cerco il numero del documento più alto salvato
Dim cmd As New SqlCommand
cmd.Connection = ConnessioneDatabase
cmd.CommandText = "SELECT ID FROM Documnti ORDER BY ID DESC"
ConnessioneDatabase.Open()
Dim ris As Object = cmd.ExecuteScalar()
ConnessioneDatabase.Close()
If ris Is DBNull.Value Or ris Is Nothing Then
Return 1
End If
Return Convert.ToInt32(ris) + 1
Catch ex As Exception
Messaggi.Errore("Errore non gestito nell'individuazione del nuovo numero documento : " & _
ex.ToString, "Attenzione")
Return 0
End Try
End Function
Il problema è che in questo modo il progressivo va avanti all'infinito. Io invece vorrei che con il nuovo anno il contatore riparte da 1 (Es. da 1000/2010 a 1/2011). E' possibile risolvere il mio problema? come?. Saluto e ringrazio anticipatamente come sempre.
Ciao. Peppino.
dinoxet
Profilo
| Senior Member
484
messaggi | Data Invio:
mar 8 mar 2011 - 17:29
ma i prograssevi che memorizzi sono del tipo:
2/2010
o solo
2?
DINOXET
__________________________________________
impossible is only a word
Peppino
Profilo
| Junior Member
186
messaggi | Data Invio:
mar 8 mar 2011 - 17:35
E memorizzato numero singolo (in tabella come int e PK)
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
mar 8 mar 2011 - 17:42
Ciao
Prova così, non l'ho verificata ...
cmd.CommandText = "SELECT MAX(ID) FROM Documnti WHERE nome_del_compo_anno = DATEPART(year, CURRENT_TIMESTAMP)"
alexmed
Peppino
Profilo
| Junior Member
186
messaggi | Data Invio:
mar 8 mar 2011 - 22:51
La riga di codice è giusta infatti se faccio una simulazione di cambio anno e vado a fare un nuovo inserimento nel nuovo anno mi da come ID il numero 1. Purtroppo essendo il campo definito come PK campo univoco, quando vado per salvare i dati mi dice che il numero 1 è gia presente in archivio e giustamente non mi permette di salvare i dati inseriti con quell'ID. Ho in mente di fare delle modifiche al codice e alle tabelle per utilizzare la riga di codice che mi avete passato e penso di arrivare a risolvere il problema. Eventualmente mi farò risentire. Comunque ringrazio per la disponibilità di tutti del Forum e per la tempestiva risposta. Saluto. Ciao. Peppino.
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
mar 8 mar 2011 - 23:45
Ciao
Una soluzione potrebbe essere quella di inserire una colonna "Protocollo"
cmd.CommandText = "SELECT MAX(Protocollo) FROM Documnti WHERE nome_del_compo_anno = DATEPART(year, CURRENT_TIMESTAMP)"
Oppure, se vuoi "esagerare"
, potresti inserire una colonna "N" che rappresenta il progressivo del documento e poi la colonna (calcolata) "Protocollo" in modo che ti restituisca un valore del tipo "001/2011" derivata dalla combinazione delle colonne N e ANNO.
La formula della colonna Protocollo dovrebbe essere una cosa del genere:
((right('000'+CONVERT([varchar](3),[N],(0)),(3))+'/')+CONVERT([nvarchar](4),datepart(year,[Data]),(0)))
Ciao
alexmed
Peppino
Profilo
| Junior Member
186
messaggi | Data Invio:
mer 9 mar 2011 - 00:20
Ciao alexmed, grazie ancora per l'interessamento. Per quanto riguarda la soluzione era proprio a quello che mi hai appena suggerito che stavo pensando, solo che dovevo trovare la formula, ma vedo che hai provveduto anche a questo e che io sicuramente avrei nuovamente chiesto aiuto a proposito. Adesso spero di riuscire a inquadrare il tutto. Ringrazio nuovamente. Saluto. Ciao. Peppino.
Torna su
Stanze Forum
Elenco Threads
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 !