OVH Cloud OVH Cloud

DataRow / DataSet

5 réponses
Avatar
Stéphane L.
Bonjour,

Dans mon formulaire Form1, j'ai ajouté 1 contrôle DataSet1 directement dans
le Concepteur.

Dans ce DataSet1, j'ai 2 tables :
Table1 avec 1 clef primaire Clef_Primaire_T1 et 1 champs Column2_T1
Table2 avec 1 clef primaire Clef_Primaire_T2 et 1 champs Column2_T2 et 1
clef secondaire Clef_Secondaire_T1_T2

J'ai également 1 relation :
Lien_T1_T2 avec T1.Clef_Primaire_T1 et Clef_Secondaire_T1_T2

T1 ne contient qu'un nombre fini d'enregistrements alors que T2 grandit au
fur et à mesure.

J'aurais donc voulu remplir tous les enregistrements de T1, mais je ne vois
pas de collections le permettant dans le DataSet.
J'ai vu dans l'aide qu'il faut utiliser la classe DataRow. Je ne trouve pas
ce contrôle pour le mettre dans le Concepteur.
Peut-être que cela ne s'indique que dans le Code ?

Merci d'avance pour votre réponse

--
Cordialement,

Stéphane L

5 réponses

Avatar
Eric Guillemette
En effet, le Dataset ne peut être empli via le Designer.
Le code qui suit va insérer un enregistrement dans le dataset:

Dim r As DataSet.Table1Row = Me.DataSet1.Table1.NewTable1Row
r.Champ1 = "Bonjour"
r.Champ2 = "Toto"
Me.DataSet1.Table1.AddTable1Row(r)

Il faut noter que le code présenté ci-haut fonctionne seulement si tu as un
dataset typé.

Pour un dataset non typé:

Dim r as DataRow = Me.DataSet1.Tables("Table1").NewRow
r("Champ1") = "Bonjour"
r("Champ2") = "Toto"
Me.DataSet1.Tables("Table1").Rows.Add(r)



Eric

"Stéphane L." wrote in message
news:%
Bonjour,

Dans mon formulaire Form1, j'ai ajouté 1 contrôle DataSet1 directement


dans
le Concepteur.

Dans ce DataSet1, j'ai 2 tables :
Table1 avec 1 clef primaire Clef_Primaire_T1 et 1 champs Column2_T1
Table2 avec 1 clef primaire Clef_Primaire_T2 et 1 champs Column2_T2 et 1
clef secondaire Clef_Secondaire_T1_T2

J'ai également 1 relation :
Lien_T1_T2 avec T1.Clef_Primaire_T1 et Clef_Secondaire_T1_T2

T1 ne contient qu'un nombre fini d'enregistrements alors que T2 grandit au
fur et à mesure.

J'aurais donc voulu remplir tous les enregistrements de T1, mais je ne


vois
pas de collections le permettant dans le DataSet.
J'ai vu dans l'aide qu'il faut utiliser la classe DataRow. Je ne trouve


pas
ce contrôle pour le mettre dans le Concepteur.
Peut-être que cela ne s'indique que dans le Code ?

Merci d'avance pour votre réponse

--
Cordialement,

Stéphane L




Avatar
DP
Bonjour,

Permettez moi de saisir la balle au bond.
Quelle est la différence entre un DataSet typé et un DataSet non typé.

Merci de bien vouloir m'éclairer
Avatar
Eric Guillemette
Un DataSet typé contient une structure prédéfinie soit par le programmeur,
soit par une génération avec l'outil de Visual Studio. Le DataSet typé
contient des tables explicitements nommées. Ex. Employe, Client, Inventaire,
etc... Les champs de chaque tables sont identifiés par un nom ainsi qu'un
type de données. Ex. Integer, Double, String Date, etc.. L'avantage d'un
dataset typé permet de déceler les erreurs pendant la compilation car si on
essai par exemple de mettre une string dans un integer, le compilateur va
générer une erreur, donc ça ne compilera pas.

Supposons que j'ai une table Employe qui contient 2 champs, Nom qui est une
string et Age qui est un Integer.

Supposons que je veux modifier le premier enregistrement de la table Employe

Avec un dataset typé, on peut le faire de cette manière:
MonDataSet.Employe(0).Nom = "Toto Latouche" 'Ici, le champ nom s'attend de
recevoir une string
MonDataSet.Employe(0).Age = 26 'Ici, le champs Age s'attend a recevoir un
integer

Avec un dataset non typé, on doit accéder aux éléments avec des index ou le
nom des éléments eux-mêmes
MonDataSet.Table("Employe").Rows(0).Item("Nom") = "Toto Latouche"
MonDataSet.Table("Employe").Rows(0).Item("Age") = 26

Si je fais une erreur de frappe avec le nom de la table ou le nom d'un
champ, le compilateur de générera aucune erreur, mais lors de l'exécution de
l'application, ça va planter. Item("Nom") s'attend de recevoir un type
Object, donc même si tu avais mis une date au lieu du nom, encore ici, une
exception sera générée lors de l'exécution seulement.

Donc en gros, les champs d'un dataset typé s'attendent à recevoir une valeur
de type spécifique tandis que dans un dataset non typé, tout les champs sont
considérés comme étant de type object par le compilateur. Il est donc plus
facile de programmer avec un dataset typé et ça évite des erreurs
potentielles qui peuvent êtres difficiles à déceler.

Pour terminer, je t'invite à consulter ce lien, je crois que tu y trouveras
toutes les réponses à tes questions en ce qui concerne les datasets
http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/cpguide/html/cpconworkingwithtypeddataset.asp

Eric


"DP" a écrit dans le message de
news:
Bonjour,

Permettez moi de saisir la balle au bond.
Quelle est la différence entre un DataSet typé et un DataSet non typé.

Merci de bien vouloir m'éclairer




Avatar
DP
Merci pour ces explications très claires.
Avatar
Stéphane L.
Merci Eric


"Eric Guillemette" a
écrit dans le message de news:
Un DataSet typé contient une structure prédéfinie soit par le programmeur,
soit par une génération avec l'outil de Visual Studio. Le DataSet typé
contient des tables explicitements nommées. Ex. Employe, Client,


Inventaire,
etc... Les champs de chaque tables sont identifiés par un nom ainsi qu'un
type de données. Ex. Integer, Double, String Date, etc.. L'avantage d'un
dataset typé permet de déceler les erreurs pendant la compilation car si


on
essai par exemple de mettre une string dans un integer, le compilateur va
générer une erreur, donc ça ne compilera pas.

Supposons que j'ai une table Employe qui contient 2 champs, Nom qui est


une
string et Age qui est un Integer.

Supposons que je veux modifier le premier enregistrement de la table


Employe

Avec un dataset typé, on peut le faire de cette manière:
MonDataSet.Employe(0).Nom = "Toto Latouche" 'Ici, le champ nom s'attend de
recevoir une string
MonDataSet.Employe(0).Age = 26 'Ici, le champs Age s'attend a recevoir un
integer

Avec un dataset non typé, on doit accéder aux éléments avec des index ou


le
nom des éléments eux-mêmes
MonDataSet.Table("Employe").Rows(0).Item("Nom") = "Toto Latouche"
MonDataSet.Table("Employe").Rows(0).Item("Age") = 26

Si je fais une erreur de frappe avec le nom de la table ou le nom d'un
champ, le compilateur de générera aucune erreur, mais lors de l'exécution


de
l'application, ça va planter. Item("Nom") s'attend de recevoir un type
Object, donc même si tu avais mis une date au lieu du nom, encore ici, une
exception sera générée lors de l'exécution seulement.

Donc en gros, les champs d'un dataset typé s'attendent à recevoir une


valeur
de type spécifique tandis que dans un dataset non typé, tout les champs


sont
considérés comme étant de type object par le compilateur. Il est donc plus
facile de programmer avec un dataset typé et ça évite des erreurs
potentielles qui peuvent êtres difficiles à déceler.

Pour terminer, je t'invite à consulter ce lien, je crois que tu y


trouveras
toutes les réponses à tes questions en ce qui concerne les datasets



http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/cpguide/html/cpconworkingwithtypeddataset.asp

Eric


"DP" a écrit dans le message de
news:
> Bonjour,
>
> Permettez moi de saisir la balle au bond.
> Quelle est la différence entre un DataSet typé et un DataSet non typé.
>
> Merci de bien vouloir m'éclairer
>
>