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

VB.NET Discussion :

Auto-increment sur un champ


Sujet :

VB.NET

  1. #1
    Invité
    Invité(e)
    Par défaut Auto-increment sur un champ
    Bonjour,

    Je cherche juste comment définir le champ de clé primaire comme auto-incrémentation. Est-ce que quelqu'un est au courant ?

    Harry Potter

  2. #2
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 83
    Par défaut
    De memoire avec certaines bases, type access tu peux selectionner cette option "auto increment" avec sql je n'ai pas trouve ce genre de choses. J'avais du le gerer moi meme en recuperant la valeur la plus elevee de ma cle et au moment de mon insertion passer en parametre la valeur de la cle + 1....

    C'est pas bien long a faire, ca demande 5 lignes de codes de plus.

    J'espere avoir repondu a ta question
    @+

  3. #3
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    recuperant la valeur la plus elevee de ma cle et au moment de mon insertion passer en parametre la valeur de la cle + 1
    ...houla, pas bieeeeen...


    En sql server, tu vas en mode design, tu mets Identity a yes, Identity seed a 1 et increment a 1...


    pis ca y'est, tu as ton auto-incrementation...

    apres, en Oracle, tu dois faire des triggers, si je me rappelle bien...mais dans l'ensemble, tu dois avoir moyen de faire ca sur toutes les sgbd

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  4. #4
    Membre chevronné Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Par défaut
    Citation Envoyé par nico_pouchet Voir le message
    en recuperant la valeur la plus elevee de ma cle et au moment de mon insertion passer en parametre la valeur de la cle + 1....
    Non ! comment gérez-vous la concurrence d'accès ?


    pvialatte a raison, identity sous sql server, séquences + trigger sous oracle, séquences affectées sous postgres, etc.
    quel est votre SGBD ?

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 83
    Par défaut
    Citation Envoyé par pvialatte Voir le message
    ...houla, pas bieeeeen...


    En sql server, tu vas en mode design, tu mets Identity a yes, Identity seed a 1 et increment a 1...


    pis ca y'est, tu as ton auto-incrementation...

    apres, en Oracle, tu dois faire des triggers, si je me rappelle bien...mais dans l'ensemble, tu dois avoir moyen de faire ca sur toutes les sgbd

    Merci pour l'info, au moins je vais plus m'embeter a gerer tout ca a la mano.

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Une remarque générale sur les champs auto-incrémentés : je comprends qu'on l'utilise si on en a absolument besoin, mais, dans l'absolu c'est rare.

    Personnellement, surtout si le SGBD cible du projet est Sql Server, je n'utilise presque jamais de champs auto-incrémentés et préfére utiliser en clef primaire pour ce type de cas un champs "uniqueidentifier" (dans lequel on stocke un GUID).

    Le seul inconvénient de cette méthode est l'impossibilité d'utiliser ce champs dans une clause ORDER ou dans un sort pour lister les entrées créées dans l'ordre où elles l'ont été, mais un champs Timestamp ou date/time en plus sur la table permet de contourner le problème.

    L'avantage que présente l'utilisation de l'uniqueidentifier est que l'on peut instancier l'objet métier qui sera ensuite écrit "as is" dans la base sans avoir à s'occuper de concurence d'accés, et sans avoir à récupérer une information "a posteriori" (donc, on peut ensuite confier la tâche de persistance en mode "lazzy" à une entité applicative, sans avoir à réinterroger cette entité applicative pour savoir la valeur qu'aura prise la clef primaire).

    Attention : je ne dis pas qu'il ne faut jamais utilisé les séquences/champs auto-incrémentés, etc ... mais simplement qu'ils ne constituent pas toujours la solution la plus simple même si elle saute (un peu trop souvent à mon goût) aux yeux comme solution évidente.

  7. #7
    Membre chevronné Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    ...
    Vaste débat : http://sql.developpez.com/clefs/#L2

    J'approuve les arguments que vous avancez, et tout le monde est d'accord sur le fait que l'existence d'une contrainte unique "métier" est indispensable.
    Cela dit doubler cette contrainte unique par une clé primaire numérique type identity ne me choque pas du tout, et me réjouit même sur de gros schémas en apportant de réels gains en terme de performance et de stockage.

  8. #8
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Pour les GUID, je suis assez d'accord, ca presente pas mal d'avantages (tu peux faire des fusions entre bases sans risques, meilleures perf...)

    Par contre, va vendre ca a ton chef qui "fait" des bases de donnees depuis 15 ans (et auquel t'as déja eu beaaaaucoup de mal a expliquer les formes normales)..je te souhaites bon courage

    En fait, perso, le gros desavantage que je vois aux GUID, c'est que si tu dois faire "Select * from table where fk_toto = '05a6eeba-ae1b-11dc-8314-0800200c9a66'"....bah tu pleures...

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  9. #9
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par pvialatte Voir le message

    Par contre, va vendre ca a ton chef qui "fait" des bases de donnees depuis 15 ans (et auquel t'as déja eu beaaaaucoup de mal a expliquer les formes normales)..je te souhaites bon courage
    En général, mes clients ne discutent pas mes recommandations. (je confesse que c'est parfois un peu plus dur avec les DBA, mais avec un peu de temps, on arrive à les mettre au pas ).

    Pour info, je "fais" aussi de la base de données depuis plus de 15 ans; c'est bien pour cela que j'exprime ma position supra

    En fait, perso, le gros desavantage que je vois aux GUID, c'est que si tu dois faire "Select * from table where fk_toto = '05a6eeba-ae1b-11dc-8314-0800200c9a66'"....bah tu pleures...
    Désolé, mais le cas ne se produit jamais a priori (ou alors, le design de ta DAL -entre autre - est à revoir de A à Z).

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour All,

    Hé ben dis donc, je vois que j'ai trouvé le sujet à discussion.

    En tout cas, merci Nico (même si ta solution a été beaucoup critiquée), merci Pvaliatte, merci Bluedeep !

    Bien que je n'ai pas trop trouvé comment vous avez pu faire...

    Pvaliatte, je vois pas où t'as vu ce identity, quand je vais dans la table (comme pour rajouter des champs), j'ai bien regardé mais non y'a pas. Sauf peut-être le truc où c'est marqué 'Est d'identité' et où il faut mettre oui ?
    Bluedeep, par contre, j'ai déjà essayé ton truc du uniqueidentifier, mais il me met un message d'erreur (Zut, je voulais vous le montrer en retrouvant uniqueidentifier, mais je sais plus où j'ai vu cela déjà, arf...). Mais toute façon, je n'ai pas réussi à le faire marcher.
    Et Nico, finallement, j'ai essayé de faire un truc "mano" comme toi, parce que sinon je me serai peut-être trop pris la tête. J'ai donc réussi comme ça à faire une auto-incrémentation, ou une sorte d'auto-incrémentation...

    Harry Potter
    Dernière modification par Invité ; 19/12/2007 à 13h44.

  11. #11
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 83
    Par défaut
    Citation Envoyé par Harry_Potter Voir le message
    Bonjour All,

    Hé ben dis donc, je vois que j'ai trouvé le sujet à discussion.

    En tout cas, merci Nico (même si ta solution a été beaucoup critiquée), merci Pvaliatte, merci Bluedeep !

    Bien que je n'ai pas trop trouvé comment vous avez pu faire...

    Pvaliatte, je vois pas où t'as vu ce identity, quand je vais dans la table (comme pour rajouter des champs), j'ai bien regardé mais non y'a pas. Sauf peut-être le truc où c'est marqué 'Est d'identité' et où il faut mettre oui ?
    Bluedeep, par contre, j'ai essayé ton truc déjà du uniqueidentifier, mais il me met un message d'erreur (Zut, je voulais vous le montrer en retrouvant uniqueidentifier, mais je sais plus où j'ai vu cela déjà, arf...). Mais toute façon, je n'ai pas réussi à le faire marcher.
    Et Nico, finallement, j'ai essayé de faire un truc "mano" comme toi, parce que sinon je me serai peut-être trop pris la tête. J'ai donc réussi comme ça à faire une auto-incrémentation, ou une sorte d'auto-incrémentation...

    Harry Potter
    Bon ca marche ca te permet de tester tes fonctions, masi penche toi sur les methodes d autoincrementation ci-dessus car c'est quand meme mieu niveau securite et surtout si tu comptes tout gerer a la mano tu dois prevoir le cas ou plusieurs utilisateurs veulent se connecter et inserrer en meme temps des donnes.... C'est pas evident alors que si sql gere tout seul, hop plus de prob

    @+

  12. #12
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par nico_pouchet Voir le message
    Bon ca marche ca te permet de tester tes fonctions, masi penche toi sur les methodes d autoincrementation ci-dessus
    Peut être vaut-il mieux, IMNSHO, qu'il se penche sur la manière de designer un schema qui ne l'utilise pas.

  13. #13
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 83
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Peut être vaut-il mieux, IMNSHO, qu'il se penche sur la manière de designer un schema qui ne l'utilise pas.
    c'est pas faux

  14. #14
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Désolé, mais le cas ne se produit jamais a priori (ou alors, le design de ta DAL -entre autre - est à revoir de A à Z).
    Pardon, je me suis mal exprime...

    Je voulais dire quand a la mimine, tu veux aller verifier quelque chose dans la base de donnees, et que tu tapes ta requete dans sqlplus

    Ma DAL va bien, merci , le jour ou je lui fais ce genre de chose, elle risque de me faire la tete

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  15. #15
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 129
    Par défaut
    Hello!

    J'ai choisi l'option de pvialatte (clic sur identity à yes, et Identity seed a 1 et increment a 1 mais quand je souhaite faire un enregistrement, ça m'indique que la colonne en question (qui est la clé primaire) n'accepte pas de valeur nulle...
    il me manque quelque chose?

    Merci d'avance pour vos contributions.

Discussions similaires

  1. colonne auto incremental sur sharepoint
    Par hbennou dans le forum SharePoint
    Réponses: 5
    Dernier message: 04/05/2008, 20h20
  2. Auto incremente sr un champ Varchar
    Par mr.net dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 10/09/2007, 13h40
  3. Auto Increment sur champs numérique
    Par Sami Xite dans le forum Access
    Réponses: 19
    Dernier message: 09/02/2007, 16h40
  4. [debutant]Auto incrementation sur sql-server 2000
    Par syl2095 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 18/11/2004, 18h00
  5. Pb d'auto-incrément sur une table v7
    Par Nivux dans le forum Paradox
    Réponses: 9
    Dernier message: 26/12/2002, 12h05

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