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 :

L'index interne DataTable est endommagé : '5'.


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Par défaut L'index interne DataTable est endommagé : '5'.
    Bonjour à tous,
    J'ai vraiment besoin de votre aide devant ce problème que je ne comprends pas du tout.
    J'ai un formulaire pour éditer chaque ligne d'un DataTable à partir de Bindingsource.current.
    Je valide mes changements par un BindingSource.EndEdit.

    Cela fonctionne sans problème lorsque j'édite les colonnes autres que la colonne CLIENT qui est ma clé primaire.
    Lorsque je veux modifier la valeur de ma colonne CLIENT, j'obtiens des erreurs dans le cas suivants :
    - Si j'édite celle-ci avec une valeur qui ne modifie pas l'ordre de tri sur ma colonne CLIENT (l'ordre de tri pouvant être observé dans mon DataGridView), dans ce cas je n'ai pas d'erreur.
    - Si j'édite celle-ci avec une valeur qui modifie l'ordre de tri, je n'obtiens pas d'erreur la première fois mais la deuxième fois j'obtiens le message d'erreur citée dans le titre.

    J'espère que vous pourrez m'aider. En vous remerciant d'avance.

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    une clé primaire n'est pas fait pour être modifiée, c'est une des principales règles sur les bases de données
    ca ne doit pas non plus être représentatif pour l'application (= pas une donnée affichée à l'utilisateur)
    ca sert juste à identifier une ligne de manière unique, et à faire les liens entre les tables
    idéalement c'est aussi une colonne auto incrément
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Tout à fait d'accord avec Pol63, une clé primaire n'a pas à être modifiée. Si tu as besoin de la modifier, alors ça ne doit pas être ta clé primaire. Crée une nouvelle colonne (nombre auto incrémenté par exemple) et définit la comme clé primaire à la place de la clé actuelle.

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Par défaut
    Bonjour et merci de m'avoir répondu.
    Ma colonne ID représente (entre autres) des noms de client et sur le coup ca me semblait evident de définir ma clé Primaire sur cette information puisque le nom du client doit être unique.
    - Savez vous comment faire simplement pour que le nom du client reste unique si je définie ma clé Primaire en tant que colonne auto-incrémentée ?
    - Ensuite dans mon code j'utilise la méthode Find de l'objet DataTable pour atteindre mon enregistrement Client depuis une autre table (qui affiche le nom du client et pas l'ID), cette méthode ne recherche que les clés Primaire. (Pensez vous que je dois ajouter l'information de colonne ID dans ma deuxieme table pour pouvoir faire fonctionner ma méthode Find ? j'aimerais éviter si on peux faire autrement). (Je précise qu'il ne s'agit pas du relation un à plusieurs, je peux trés bien laisser le champs 'Nom du Client' vide dans ma deuxieme table).

    Merci pour vos précisieuses informations.

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    tu peux ajouter un index unique sur la colonne nom sur la base de données, en cas de tentative de doublon ca génèrera une erreur

    en principe sur une base de données, il y a un id auto incrément par table, et c'est cet clé qu'on utilise dans les autres tables pour faire la liaison
    car si le nom du client est modifié, il faudrait alors le changer dans toutes les tables où il est utilisé, ce qui niveau performance est loin d'être le mieux
    avec une clé qui ne change pas il n'y a pas de soucis
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Par défaut
    Merci pour la réponse Pol63,
    Je crois que j'ai compris le principe.
    J'espère ne pas abuser en posant une derniere question, est t'il contre indiqué de conserver mes colonnes 'Non du Client' dans mes tables enfants en plus de la nouvelle colonne que je doit rajouter portant l'ID de ma table parent ?
    Je dit ca parce que je sait d'avance que j'ai besoin d'afficher le nom du client à partir de ces tables et que ca m'évite d'écrire des routines pour rechercher l'information dans la table parent.

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

Discussions similaires

  1. Test si la dataTable est vide
    Par lion13 dans le forum JSF
    Réponses: 3
    Dernier message: 16/04/2008, 11h06
  2. Réponses: 3
    Dernier message: 09/04/2008, 11h24
  3. Indexer une datatable
    Par olibara dans le forum C#
    Réponses: 3
    Dernier message: 18/03/2008, 09h18
  4. Mon lecteur DVD est endommagé
    Par Abdelkaoui dans le forum Composants
    Réponses: 4
    Dernier message: 14/09/2007, 16h21
  5. [DataSet] Pourquoi la DataTable est en lecture seule?
    Par SirKus dans le forum Accès aux données
    Réponses: 2
    Dernier message: 16/07/2007, 10h49

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