IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

[débutant]Problemem d'incrementation d'une variable


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3
    Points : 4
    Points
    4
    Par défaut [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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ^^

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 861
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 861
    Points : 53 003
    Points
    53 003
    Billets dans le blog
    6
    Par défaut
    D'avance tu es mort !!!!

    A lire : http://sqlpro.developpez.com/cours/clefs/

    A +

  3. #3
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.)

  4. #4
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par sakuragikan
    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
    Drop ta séquence et recrée là

    Citation Envoyé par Doc ORACLE
    CREATE SEQUENCE [schema.]sequence
    [INCREMENT BY integer]
    [START WITH integer]
    [MAXVALUE integer | NOMAXVALUE]
    [MINVALUE integer | NOMINVALUE]
    [CYCLE | NOCYCLE]
    [CACHE integer | NOCACHE]
    [ORDER | NOORDER]
    Sinon ... tu es mort !

Discussions similaires

  1. dernier auto-increment vers une variable
    Par H-bil dans le forum C#
    Réponses: 22
    Dernier message: 06/06/2008, 08h09
  2. [débutant]Tester l'existance d'une variable
    Par Death83 dans le forum Langage
    Réponses: 7
    Dernier message: 19/08/2006, 15h37
  3. Incrémentation d'une variable
    Par tarzanjane dans le forum Langage
    Réponses: 10
    Dernier message: 17/07/2006, 16h04
  4. Réponses: 37
    Dernier message: 02/03/2006, 01h58
  5. [Débutant] Probleme d'incrémentation d'une variable
    Par sakuragikan dans le forum ASP
    Réponses: 2
    Dernier message: 25/08/2005, 13h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo