asp, mssql e la numerazione dell'ID!

AdriDesigner

Nuovo Utente
22 Giu 2005
28
0
0
Ciao a tutti! Chissà se vi ricordate di me! :D

ebbene, dopo tanto tempo mi ripresento con un problema abbastanza grave, però differente dai miei problemi dove mi bastava "capire" come funziona asp!

Mi sono convertito a mssql, e sto creando delle pagine dinamiche sul mio sito dove posso mandare i miei clienti (hotel, alberghi, garnì, ecc..) a gestire i loro listini prezzi in modo semplice e veloce.

Ho già previsto tutto, dall'inserimento delle varie fasce di prezzo, alla modifica o eliminazione di esse, e tengo a sottolineare che tutto funziona!

L'unico problema è questo: Quando cancello una fascia di prezzo, vado a prendere l'ID di essa e cancello tutta la riga. Ho però il problema che se elimino un ID, mi rimane il buco! (ad es. ID | 1,2,4,5 | , il 3 è stato cancellato!)

Allora ho provato con questa porzione di codice a far rinominare tutti gli id in automatico, ad ogni cancellazione:

Codice:
SQL1 = "SELECT * from listini where utente = '" & Session("nomeutente") & "'"
rs3.open SQL1, cn
x = 1000
Do While rs3.eof = false
rs3("ID") = x
rs3.update
rs3.movenext
x = x+1
loop
rs3.close

SQL1 = "SELECT * from listini where utente = '" & Session("nomeutente") & "'"
rs3.open SQL1, cn
x = 1
Do While rs3.eof = false
rs3("id") = x
rs3.update
rs3.movenext
x = x+1
loop
rs3.close

questa invece è la parte di codice che mi elimina effettivamente la fascia, e funziona alla grande:

Codice:
SQL = "delete from listini where id = " & id1 & " AND utente = '" & Session("nomeutente") & "'"
cn.Execute(SQL)

"session.nomeutente" ovviamente è il nome del cliente che gestisce i suoi listini, mi serve perchè deve ogni fascia di prezzo sul database naturalmente contiene questo nome!

Ho provato comunque ad eseguire questa pagina e non funziona, nel senso che mi cancella la fascia ma mi lascia sempre il buco :dipser:

qualcuno sa darmi una dritta? Spero di si!:crying:

Ciao e grazie! :D
 
un campo autoincrement (o contatore, che dir si voglia) non è rigenerabile su una tabella di una base dati sul qualsiasi dbms

era solo questo il problema o ho capito male?

:byebye:
 
lukeonweb ha scritto:
un campo autoincrement (o contatore, che dir si voglia) non è rigenerabile su una tabella di una base dati sul qualsiasi dbms

era solo questo il problema o ho capito male?

:byebye:

ciao luke ;)

innanzitutto che io sappia l'sql non genera id in automatico, quindi io quando vado ad inserire una fascia di prezzo, dico di inserire:
Codice:
rec = rs.recordcount + 1
e quindi vado a scrivere nella colonna id + 1 dell'ultimo valore sul database. il campo ID l'ho messo in formato numerico.

appunto per questo, quando vado ad eliminare una riga, mi rimane il buco! quindi la pagina non riesce ad elaborare la porzione di codice postata qua sopra.

Se qualcuno usa un sistema diverso sono tutt'orecchi! grazie!
 
AdriDesigner ha scritto:
Ciao a tutti! Chissà se vi ricordate di me!..

Ciao Adri, mi ricordo si di te ! (RICORDI?) ;)

Ascolta, ho notato un piccolo errore nel tuo codice, prova a correggere mettendo la parte in blu al posto della rossa:

===================
SQL1 = "SELECT * from listini where utente = '" & Session("nomeutente") & "'"
rs3.open SQL1, cn
x = 1
Do While rs3.eof = false
rs3("id") = x --> rs3(1) = x
rs3.update
rs3.movenext
x = x+1
loop
rs3.close
===================

Ovvero metti rs3(1) se l'ID è il primo campo del record, altrimenti se è il secondo metti rs3(2) e così via..

Tieni conto che però non son un grande esperto si MySql eh!
Prova così e fammi sapere, :fonzie:
SaLuT!
:byebye:
 
ciao pole! grazie per la tempestiva risposta, come sempre!

ho sostituito la parte di codice ma purtroppo il problema si riverifica :dipser:

sto cercando in giro per la rete qualche aiuto ma sembro l'unico ad avere questo "problema" :eek:

cmq se hai bisogno di ulteriori delucidazioni sn qua!

grazie ancora!
 
AdriDesigner ha scritto:
...sto cercando in giro per la rete qualche aiuto ma sembro l'unico ad avere questo "problema" :eek: ...
Eh eh, effettivamente è un problema un pò singolare!! :D

Ascolta, ora io me ne vado a casa in divano, e come sai il week-end il PC per me diventa TABU' :gun: ,
quindi casomai ci si sente lunedì, anche se spero per te che nel frattempo qualcun altro sia riuscito ad aiutarti!!! ;)

In bocca al Lupo Adri!
:byebye:
 
Allucinante... purtroppo tra me ed Aruba non corre buon sangue già da tempo e questa è una conferma del fatto che ci ho visto giusto sin dall'inizio...

Per il tuo problema fai cosi: crea un campo numerico; quando inserisci un record fai la SELECT TOP 1 del campo numerico ORDER BY data (in formatyo data) DESC ed al risultato aggiungi + 1

Fammi sapere

:byebye:
 
lukeonweb ha scritto:
Per il tuo problema fai cosi: crea un campo numerico; quando inserisci un record fai la SELECT TOP 1 del campo numerico ORDER BY data (in formatyo data) DESC ed al risultato aggiungi + 1

Fammi sapere

:byebye:

Scusa non ho ben capito, puoi spiegarmi meglio? :confused:
 
Dunque...

Quando devi inserire un record hai bisogno di incrementare il contatore, quindi farai una INSERT oppoure apri un Recordset in scrittura.

In entrambi i casi dovrai eseguire questa stringa SQL (modifica i nomi dei campi)

Dim contatore
Set contatore = connessione.Execute("SELECT TOP 1 campo_id FROM tabella ORDER BY campo_id DESC")

Poi, nel Recordset, aggiungerai questo

recordset("campo_id") = contatore("campo_id") + 1

o qualcosa del genere, se non lo testo non ho la certeza di non dire sciocchezze, ma la filosofia è questa.

Let me know ;)
 
si è praticamente la stessa cosa ke faccio io più semplificata! E infatti allo stesso modo non funziona....

Non capisco proprio.. in fondo dovrebbe essere un'operazione semplice.. rinominare dei campi... però non funziona..

comincio a pensare di tonrare al vekkio access :rolleyes:
 
Meglio di cosi significa che devo farlo io :)

In giornata scrivo un articolo (con db Access, ma basta usare la stringa di connessione di SQL Server per adattarlo).

Lo faccio pubblicare in questi giorni.

Ciao!
 
lukeonweb ha scritto:
Meglio di cosi significa che devo farlo io :)

In giornata scrivo un articolo (con db Access, ma basta usare la stringa di connessione di SQL Server per adattarlo).

Lo faccio pubblicare in questi giorni.

Ciao!

Pefetto! fammi sapere quando l'hai pubblicato! Io intanto mi scervello ancora un po'...! :dipser:

;)
 
:eek: non ci crederai luke ma ce l'ho fatta! sai cos'era???

sulla riga dove aprivo il recordset, dopo CN mancava: ,3,3

io mi chiedo, a cosa servono ste due cifre?? della serie: ho scoperto il malanno ma voglio capirci di più!

grazie! ciao! :o
 
AdriDesigner ha scritto:
..sulla riga dove aprivo il recordset, dopo CN mancava: ,3,3

io mi chiedo, a cosa servono ste due cifre??...
Allora Adri, i numeri 3,3 che seguono rappresentano rispettivamente:
il CursorType
il LockType

Il CursorType definisce il tipo di "cursore", il quale è una rappresentazione dei dati (records) e definisce anche il tipo di viste possibili su di essi.

I cursori sono di 4 tipi:

_Cursore di default valore:0 è come un cursore statico ad eccezione del fatto che permette solo spostamenti in avanti e non indietro, poiché questo cursore non deve tener traccia dei record aggiunti, modificati o cancellati da atri utenti.

_Cursore Keyset valore: 1 possono vedere le modifiche apportate da altri utenti, nonché spostarsi tra i record in avanti ed indietro. Non possono vedere i record aggiunti o cancellati da gli altri utenti.

_Cursori Dinamici valore:2 possono vedere qualsiasi cosa: modifiche, aggiunte e cancellazioni fatte da altri utenti. Supportano, inoltre tutti gli spostamenti.

_Cursori Statici valore: 3 permettono gli spostamenti in avanti ed indietro. Non sono in grado di rilevare le modifiche ai dati apportate da altri utenti.

Il valore di LockType (o di BLOCCO) determina che tipo di blocco il fornitore di dati DBMS (Data Base Management System), ossia il database realizzato con Access, deve usare quando si apre un Recordset, questo ai fini del controllo di concorrenza sugli accessi ai dati da parte di più utenti contemporaneamente.


===============================
Ho tirato giù questa spiegazione tantissimo tempo fa non mi ricordo nemmeno da dove, comunque credo ti sarà utile! ;)

SaLuT!
:byebye:
 
grazie mille pole!! ora ho capito! pensa te che per questa cosa ho lavorato 3 giorni scrivendo e riscrivendo il codice.. roba da martellarsi i .... :hammer: :D

grazie mille ancora, questo forum andrebbe premiato :D

a presto! (anche se ho la netta sensazione che tornerò presto a consultarmi con voi :rolleyes: :D )
 

Discussioni simili