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

Access Discussion :

créer un ID unique par incrementation [Débutant(e)]


Sujet :

Access

  1. #1
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 11
    Par défaut créer un ID unique par incrementation
    Bonjour de nouveau à tous ,

    j ai cherché et j ai pas trouvé , je sais que la solution est "culcul", mais je ne suis pas une bête dans les structures de contrôle .

    données du problème :

    colonne = Tblmain2.shp_id

    je veux créé un id unique pour chaque ligne de tblmain2 dans la colonne shp_id, en vba.
    je créé mon recordset et à chaque fois que je passe au recordset suivant j incremente de 1.

    j ai essayé et ce me renvoi toujours 1 partout ... donc j ai pas tout compris aux structures de contrôles ..

    merci encore pour votre aide .

    JC

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Par défaut
    Et le type NuméroAuto te conviens pas ?

  3. #3
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 11
    Par défaut
    Salut Goshiz,

    non car la table est créée par une query, donc personne ne saisie d'info, et par la même occasion incremente de 1 l'id pour chaque ligne.

    quand la table est créée par la query j execute un script pour ajouter une colonne "shp_id", puis j aimerais attribuer à chaque ligne un no unique.

    je pensais donc qu un petit " do ... until " ferait l'affaire .. mais NON

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Par défaut
    disons qu'on peut faire une fonction mais c'est très très gourmand en ressources.


    Si tu as une création de table je te conseille plutot de laisser ta table tel qu'elle et ton champ shp_id en type "NuméroAuto"

    et au lien de faire une création de table, tu fais 2 requetes :
    - une requete suppression
    - une requete ajout

    Et normalement c'est bon.


    Si tu ne peux pas voila la fonction que tu doit faire :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Public function calc_id() as long
    dim rs as DAO.recordset
     
    set rs="SELECT COUNT(shp_id) as compteur FROM TA_TABLE"
    If rs.recordcount>0 then
        If not isnull(rs![compteur]) then
            calc_id=rs![compteur]+1
        else
            calc_id = 0 '(ou 1 si tu veux commencé à 1)
        end If
    Else
            calc_id=0 '(ou 1 si tu veux commencé à 1)
     
    End If
     
    End function

    et dans ta requete de création tu met calc_id() dans la colonne


    voila

    PS : je la tape à la volée ici je sais pas si elle va marcher telle quelle

  5. #5
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    Sinon, tu lances une 'tite requête qui te crée ta colonne en N° auto dans la foulée. Après la création de la table si tu y tiens.

    ALTER TABLE Tblmain2 ADD COLUMN shp_ID COUNTER
    devrait faire l'affaire... non ?

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Par défaut
    Citation Envoyé par ZeMenace
    Sinon, tu lances une 'tite requête qui te crée ta colonne en N° auto dans la foulée. Après la création de la table si tu y tiens.

    ALTER TABLE Tblmain2 ADD COLUMN shp_ID COUNTER
    devrait faire l'affaire... non ?
    J'ai honte !

    Voila la meilleur solution !

  7. #7
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 11
    Par défaut
    une nouvelle fois merci .. et ca marche comme d hab .. de toute facon les 3 solutions sont bonnes .. mais dans un soucis d efficacité la 3em est bien la meilleur ...

    merci bcp.

    ciao

    jc

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 05/02/2013, 08h07
  2. [Interbase]Comment créer une source ODBC par programme ?
    Par touhami dans le forum Bases de données
    Réponses: 1
    Dernier message: 13/03/2006, 16h40
  3. créer une clé varchar auto-increment
    Par guns17 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 14/02/2006, 19h30
  4. Créer un champ unique sous Entreprise Manager
    Par Kokito dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/11/2004, 09h54
  5. Comment créer un nouveau dossier par programmation ?
    Par annecyrond dans le forum Langage
    Réponses: 3
    Dernier message: 27/03/2003, 07h59

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