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

C# Discussion :

pb pour l'auto-incrémentation


Sujet :

C#

  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 137
    Par défaut pb pour l'auto-incrémentation
    Bonjour,

    Après avoir rechercher un peu partout sur le net, je n'arrive toujours pas à trouver une solution concernant le problème suivant :

    je possède les données suivantes :

    1, Durant
    2, Dupont
    6, Petit

    Après avoir effacer mon 3, 4 et 5ème enregistrement dans ma base de donner MySql pour supprimer des clients, je souhaiterais utiliser le numéro 3 ainsi que les autres numéros (4,5,7,...) pour d'autres clients.

    Existe t'il un code pour régler ce problème ? une réinilialisation de l'auto-incrémentation est possible ?

    Merci d'avance

  2. #2
    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
    Bonjour,

    Je n'ai pas la réponse à ta question (du moins pas dans le cadre de l'usage avec MySql) mais te suggére de la mettre plutôt dans le forum ad-hoc (SGBD ....) où tu aurais sans doute plus de chance d'avoir une réponse, puisque ton problème ne dépend absolument pas du langage de programmation utilisé.

  3. #3
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Ou sinon un moyen en utilisant le langage de programmation est de se faire sa fonction de traitement. Pour chaque ajout tu récupère l'id de tous les clients, et tu parcour ta liste d'id, et lorsque tu trouve un troue dans la liste, tu ajoutes le client avec l'id correspondant.

  4. #4
    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 ced600 Voir le message
    Ou sinon un moyen en utilisant le langage de programmation est de se faire sa fonction de traitement. Pour chaque ajout tu récupère l'id de tous les clients, et tu parcour ta liste d'id, et lorsque tu trouve un troue dans la liste, tu ajoutes le client avec l'id correspondant.
    Attention aux conflits entre utilisateurs !!!!

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 137
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Attention aux conflits entre utilisateurs !!!!
    je pense aussi mais concernant ce sujet c'est pour mon développement en c# et peut etre qu'il y a un code permettant de le réinitilaliser

  6. #6
    Membre chevronné
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Par défaut
    Ou alors, quand tu supprimes une ligne tu mets son id dans une Queue.
    Au moment d'ajouter l'élément tu récupères l'id dans la Queue et tu l'assignes à ton élément.

  7. #7
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 137
    Par défaut
    Le mettre dans une Queue c'est-à-dire ???

  8. #8
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Citation Envoyé par matinho Voir le message
    Le mettre dans une Queue c'est-à-dire ???
    C'est une pile du style: "dernier entré, dernier sorti"

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Par défaut
    Citation Envoyé par Thomas Lebrun Voir le message
    C'est une pile du style: "dernier entré, dernier sorti"
    On dit pas plutot "Premier entré, premier sortit" (FIFO?)

    Mais dans son cas, s'il supprime dans l'ordre : 6 - 4 - 5, il faut ensuite trier, car il doit attribuer 4 avant 6?

  10. #10
    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
    Oulalala .... le terme de pile désigne en général un LIFO. Quand on un FIFO on parle plutôt de pipe. (ou un Queue, en effet, mais ce n'est pas une pile).

  11. #11
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 137
    Par défaut
    serait-il possible d'avoir un exemple svp ?

  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 matinho Voir le message
    Après avoir rechercher un peu partout sur le net, je n'arrive toujours pas à trouver une solution concernant le problème suivant :
    .....
    Existe t'il un code pour régler ce problème ? une réinilialisation de l'auto-incrémentation est possible ?
    Reprenons depuis le début.

    En dehors de l'aspect technique, quel est ton besoin fonctionnel ici ?

    J'ai en effet un peu de mal à comprendre pourquoi tu veux utiliser une auto-incrémentation pour, ensuite, décider de réutiliser les entrées, ce qui est quelque peu antinomique. Ne faudrait il pas recommencer par là ? le "pourquoi".

  13. #13
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    ********-------------------------
    j'entre ->**********************-> je sors
    ********-------------------------



    Ok c'est moi qui sort

  14. #14
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    A mon avis, on est surtout sur le mauvais forum. C'est un problème totalement indépendant du langage qui devrait être envoyé dans le forum MySQL.

  15. #15
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 137
    Par défaut
    En faite, je fais une fiche d'inscription pour enregistrer des clients et dans ma base de donnée j'utilise une auto-incrémentation pour ne pas saisir les numéros de client lors de l'inscription.

    Je voudrais savoir si je peux revenir sur les numéros qui ont été supprimé par l'intermédiaire de code en c# ...

    (je ne pourais répondre que demain matin à partir de 9h, je ne vais pas avoir de connection internet pour ce soir)

    merci d'avance si vous arrivez à trouver une solution

  16. #16
    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 Kaidan Voir le message
    A mon avis, on est surtout sur le mauvais forum. C'est un problème totalement indépendant du langage qui devrait être envoyé dans le forum MySQL.
    C'est en substance le contenu de ma première réponse. cf supra.

  17. #17
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Bha il est clair que le mieux est que la base de données fassent se traitement.
    Mais s'il insiste pour le faire en C# c'est son droit, et donc là une recherche sur le net au sujet des éléments devraient être suffisant.

  18. #18
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Si besoin, voici une requête SQL qui récupère le prochain numéro en "bouchant les trous" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT COALESCE(MIN(id) + 1, 0) AS NEXTVALUE
      FROM matable r
     WHERE NOT EXISTS (SELECT id 
                         FROM matable r2
                        WHERE r2.id = r.id + 1)
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  19. #19
    Membre éprouvé

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 68
    Par défaut
    Tout es possible bien entendu, mais tout n'est pas profitable.

    Si le fait de récupérer les identifiants 'perdus' est justifié par une raison conceptuelle fondamentale, alors je comprends, sinon, c'est véritablement se donner beaucoup de mal pour pas grand chose. Il ne faut pas avoir peur de 'perdre' des Ids. Si ils sont codés sur 32 bits cela fait plus de 4 milliards d'entrée possibles... Cela laisse de la marge tout de même. Et au pire, il y a la possibilité de les coder sur 64 bits.

    Maintenant, si cette fonctionnalité est indispensable alors il faut bien trouver une solution.

    Pour ce qui me concerne, j'ai tenté d'adapter la reqête précédente à SQL serveur mais je ne suis pas parvenu à un résultat satisfaisant (J'en profite pour demander à SaumonAgile de l'expliquer car je ne vois pas comment elle peut répondre à la problématique. Mais que si elle y répond, je ne veux pas passer à coté). Quoi qu'il en soit, le temps de traitement d'une telle requête est directement lié au nombre d'enregistrements. Ce qui risque de poser de gros problèmes de performance. A moins vraiment que le nombre d'enregistrements reste limité. Mais si il est limité, pourquoi y-a-t-il tant besoin de récupérer les 'trous' ?

    Cela ne me parait pas non plus très sage de conserver en mémoire les Ids 'perdus' car la mémoire c'est précieux et volatile.

    Une solution consiterait à avoir recours à une petite table pour stocker les Ids 'perdus' et les retrouver par la suite.

    Autre possibilité, plutôt que de supprimer les enregistrement, il pourrait être marqués. Il suffirait de mettre un des champs dans un état particulier. Il serait alors facile de trouver les 'trous' et donc les Ids disponibles. Le problème c'est qu'alors il faudrait modifier toutes les requêtes SQL sur cette table pour qu'elles n'intègrent pas les client marqués comme étant supprimés.

    Quelque soit la solution, il faudra bien entendu tenir compte de la possibilité d'accès concurrentiels, à moins d'être dans le cas d'une application mono-utilisateur.

    Bref, il faut vraiment en avoir besoin pour chercher à implémenter un tel mécanisme.

    Mais je suivrai cette conversation avec intéret pour le cas ou elle aboutirait à une idée béton.

    Bon courage.

  20. #20
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    En quoi ma requête réponds à la problématique ? C'est tout simple, l'idée est de réutiliser les id des lignes supprimées d'une table. Ma requête renvoie le prochain id utilisable pour la table en question en tenant compte des id qui ont été supprimés.
    Concernant ta remarque à propos des 32bits, voire 64bits, sache qu'il est parfois nécessaire d'inter-opérer avec des systèmes beaucoup plus anciens qui par exemple ne savent pas gérer des id sur 32bits. Il faut donc économiser les id.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

Discussions similaires

  1. Valeur explicite pour colonne auto-incrémentée
    Par Pongten dans le forum Entity Framework
    Réponses: 7
    Dernier message: 16/01/2012, 15h38
  2. Réponses: 11
    Dernier message: 19/07/2010, 23h48
  3. Erreur 1060 régulière pour un auto-incrément dévalué
    Par sergeh dans le forum Administration
    Réponses: 0
    Dernier message: 06/07/2009, 16h13
  4. Condition pour l'auto incrémentation
    Par Strange-Days dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/03/2008, 21h03
  5. Séquences pour auto incrémentation?
    Par Yassine2006 dans le forum Oracle
    Réponses: 3
    Dernier message: 15/03/2007, 07h58

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