[débutant]Problemem d'incrementation d'une variable
Bonjour a tous
Mon probleme releve peut etre plus du VBscript que du SQL, je ne sais pas trop en fait, mais dans le doute j'ai posté ici :)
Je tourne en oracle 9 et mon projet ett sous asp/vbscript
J'ai une table Rubrique qui contient un champ ID et un champ NOM_RUBRIQUE (et Type_Rubrique). Dans un formulaire j'ai un bouton ajouter qui ajoute une ligne a ma table, en definissant un nouvel ID donc.
Je sais que vous allez me dire de creer une sequence, mais j'ai essaye et cela ne fonctionne pas, elle existe bien pourtant sur ma base oracle, mais je ne parviens pas a lui faire comprendre de ne pas commencer a 1 :(
Je procede donc comme suis : je cree une requete pour connaitre le max des IDs deja present et je l'incremente de 1, et j'entre la ligne a cet ID.
Le probleme vient de mon incrementation qui ne fonctionne pas :
Voici mon code :
Code:
1 2 3 4 5 6 7 8
|
sSQL = "select max(ID" & ") FROM " & myTable
Dim rsID, n
Set rsID = DbObj.Execute(sSQL, , adCmdText)
n = rsID(0)
n = n + 1
sSQL = "INSERT INTO " & myTable & " (ID, NOM_RUBRIQUE , TYPE_RUBRIQUE) VALUES ( " & n &", '" & QuoteDB(Request("libelle")) & "', " & CLng(Request("id_parent")) & " )" |
ca bloque au n=n+1 : erreur de type !
pourtant, si j'enleve cette ligne, le message d'erreur suivant sera : erreur d 'unicite sur le champ ID (normal une ligne avec cet ID existe deja), ce qui veut dire qu'il passe bien un nombre dans la clé VALUES non ? pourquoi ne puis je donc pas incrementer ce nombre n ?
Voila ma question ^^
Re: [débutant]Problemem d'incrementation d'une variable
Et si par hasard tu es toujours en vie :
Citation:
Envoyé par sakuragikan
je ne parviens pas a lui faire comprendre de ne pas commencer a 1 :(
Dans ton instruction de création de séquence, tu peux indique START WITH mavaleur. Si elle existe déjà et que tu ne souhaites pas la récréer, tu peux l'appeler via une petite boucle autant de fois que tu veux, pour "l'initialiser" selon tes besoins.
Si tu persistes avec ta solution sans séquence, essaye :
Code:
1 2 3 4 5 6 7 8
| sSQL = "select max(ID) + 1 AS max_Cptr FROM " & myTable
Dim rsID as RecordSet
Dim n as Long
Set rsID = DbObj.Execute(sSQL, , adCmdText)
n = rsID(0)!max_Cptr
'n = n + 1 : plus besoin de +1 ici, il est fait dans la requête
... |
Le type de ta variable n n'était pas précisé, donc c'était un variant :? , ton erreur venait sans doute de là. J'ai repris ton code en ajoutant un Alias pour ta valeur Max et en faisant le +1 directement dans la requête.
Je me permet au passage d'en remettre une couche suite à l'avetissement de SQLPro, j'ai été confronté au problème de concurrence avec les MAX + 1, avec 3 utilisateurs qui saississaient manuellement pourtant (pas d'insertion massive donc). Mais suite à des problèmes de lenteur, il arrivait que 2 utilisateurs se voient attribuer la même valeur, avec tous les ennuis que l'on imagine par la suite (erreur de violation de PK, enregistrements fils pointant vers le mauvais parents (oui, il n'y avait pas de gestion de transactin à l'époque ...), etc.)