J'avais un doute :aie:, merci pour cette précision :ccool:.Citation:
une clé primaire ne peut être null
Version imprimable
J'avais un doute :aie:, merci pour cette précision :ccool:.Citation:
une clé primaire ne peut être null
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 :Citation:
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 ?
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...:mouarf:)
Message de Tomlev :
La question de la relation reste posée dans mon cas, nécessaire ou pas nécessaire ?Citation:
- 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)
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
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.
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 :
Et voici la déclaration de ma colonne Expression :Code:
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
Code:
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
Yesssss, ca fonctionne......:applo::applo::applo:
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....8O:mrgreen:
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 ?
C'est bon, j'ai trouvé :
Code:MaTable.Columns("Client").Unique = True