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

  1. #21
    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
    une clé primaire ne peut être null
    J'avais un doute , merci pour cette précision .

  2. #22
    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 : 44
    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
    Citation Envoyé par BasicZX81 Voir le message
    A l'époque j'avais déjà mis en place une relation (entre mes colonnes connexes 'Nom de client') dans l'unique but de profiter des mises en jours en cascade (avec MaCléEtrangére.Update.Rule = Rule.cascade). Mais le fait de mettre en place cette relation m'obligé a renseigner le nom du client dans ma table enfants avec un nom de client existant dans ma table parent pour pouvoir créer un enregistrement. Autrement dit je ne pouvais pas créer un enregistrement avec un champ 'Non de Client' vide.
    Est ce que j'ai loupé quelque chose ou c'est le fonctionnement normal de la relation. la mise en place d'une relation sur les colonnes Id pose le même problème je pense.
    J'ai pas trop compris... Pourquoi tu aurais besoin de mise à jour en cascade si les tables enfant ne contiennent plus le nom de client ?

  3. #23
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Citation Envoyé par tomlev Voir le message
    J'ai pas trop compris... Pourquoi tu aurais besoin de mise à jour en cascade si les tables enfant ne contiennent plus le nom de client ?
    P-e pour des suppressions en cascade ?

    (Mais je trouve que c'est une pratique "dangeureuse".)

  4. #24
    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
    J'ai pas trop compris... Pourquoi tu aurais besoin de mise à jour en cascade si les tables enfant ne contiennent plus le nom de client ?
    C'était un essai que j'avais effectué mais a l'époque je n'avais pas de colonnes ID, c'est le nom du client qui servait de Clé Primaire. Et ce que je voulais réaliser par l'intermédiaire d'une liaison c'est :
    La mise à jour du nom du Client dans les tables enfants en cas de modification dans la table Parent.
    L'écriture d'une valeur DBNull dans ma table enfant (avec SetNull) dans le cas ou je supprime le client de ma table Parent.

    EDIT : il y avait une ambiguité sur les noms de colonnes dans mon premier post d'ou la question posé par Tomlev. C'est rectifié.
    EDIT2 : (Quand on est plus au boulot est qu'on ne fait plus 2 choses à la fois ca va tout de suite mieux...)
    Message de Tomlev :
    - Clic droit, ajouter une relation (ou un truc comme ça, j'ai plus la commande exacte en tête)
    - Tu indiques quelle table est le parent de la relation (Client) et quelle est sa clé primaire (Id), quelle table est l'enfant de la relation (Enfant) et quel est la clé étrangère (ClientId)
    La question de la relation reste posée dans mon cas, nécessaire ou pas nécessaire ?

  5. #25
    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
    Derniere vérification avant de ma lancer :
    A priori la présence de colonnes calculées ne devrait pas poser de problèmes au CommandBuilder :
    http://msdn.microsoft.com/fr-fr/library/tf579hcz.aspx

  6. #26
    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 : 44
    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
    Citation Envoyé par BasicZX81 Voir le message
    La question de la relation reste posée dans mon cas, nécessaire ou pas nécessaire ?
    Oui, si tu as besoin de pouvoir accéder aux propriétés du client à partir de la table enfant

  7. #27
    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 beaucoup tomlev,
    Je suis en train de modifier toutes mes tables et le code qui va avec.
    C'est un peu chaud, j’aurais du faire les bons choix dés le départ mais, je pense que c'est faisable.

  8. #28
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Citation Envoyé par BasicZX81 Voir le message
    C'est un peu chaud, j’aurais du faire les bons choix dés le départ
    C'est toujours le problème quand on débute. On se dit qu'on se lance et qu'on verra au fur et à mesure et en fait, faudrait faire le contraire...

    Mais j'imagine qu'on est tous passés par là. En tout cas, ce fut mon cas (enfin je n'en suis p-e pas encore sorti^^)

  9. #29
    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
    Rebonjour à tous,
    C'est l'heure de vérité, J'ai modifié tous mon code sans trop de problèmes et j'en suis à la déclaration d'une nouvelle colonne expression.
    Je rencontre un problème à ce niveau là, c'est surement un problème de synthaxe ou un truc comme ça, vous pouvez m'aider ?

    Voici comment je déclare ma relation dans le Dataset :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     ' Ajout de la relation entre la table Clients (Parent) et Commandes (Child) :
            DRelat = New DataRelation("Rl9", objDBDataSet.Tables("Clients").Columns("ID_CLIENT"), objDBDataSet.Tables("Commandes").Columns("ID_CLIENT"), True)
            objDBDataSet.Relations.Add(DRelat)
            FKCont = CType(MaTable.Constraints.Item("Rl9"), ForeignKeyConstraint)
            With FKCont
                .AcceptRejectRule = AcceptRejectRule.None
                .DeleteRule = Rule.SetNull
                .UpdateRule = Rule.Cascade
            End With
    Et voici la déclaration de ma colonne Expression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ' Ma colonne "Nom du Client" dans la table parent s'appelle 'CLIENT'
    MaTable = objDBDataSet.Tables("Commandes")
     
            MaTable.Columns.Add("EXP_CLIENT", Type.GetType("System.String"))
            MaTable.Columns("EXP_CLIENT").Expression = "Parent(Rl9).CLIENT"  ' Ça plante sur cette ligne

  10. #30
    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
    Yesssss, ca fonctionne......
    Un grand merci à vous tous.
    Je ne connaissais pas les colonnes expressions c'est trop génial.....
    Et dire que j'écrits des procédures d'une vingtaine de lignes de codes que je peux remplacer par une expression....

  11. #31
    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, je pensais toucher au but mais il y a un détail que j'ai oublié (j'aurrais du y penser avant.....)
    Avant de faire ces modifications, ma clé Primaire était définie sur la colonne Nom du Client ce qui me permettais d'éviter les doublons dans les 'noms de clients'.
    Maintenant que ma clé Primaire est définie sur l'ID je ne sais plus comment empêcher ces doublons.

    Est ce que l'on peux définir une clé Primaire composées de 2 colonnes ?
    Si oui est ce que je ne vais pas retomber sur le même problème de corruption d'index en modifiant le nom des clients ?
    Et comment définir la relation avec une clé primaire sur plusieurs colonnes ?

    Pouvez vous me venir en aide ?

  12. #32
    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
    C'est bon, j'ai trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaTable.Columns("Client").Unique = True

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

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