OVH Cloud OVH Cloud

Colonne de dataset typé

2 réponses
Avatar
Patrice Ongla
Bonsoir à tous,

Je viens d'observer un truc qui m'étonne.

Lors d'un test, j'ai généré un dataform avec l'assistant sur une connexion
Access. L'assistant m'a généré un dataset typé, "MonDataset". Il ne comporte
qu'une seule table "MaTable", laquelle a un seul champ "MonChamp" de type
string (à l'image de ma table de test dans la base Access).
Eh bien je ne peux pas référencer directement MonChamp via la propriété du
datarow typé, en écrivant par exemple dans le code du dataform qqchose comme
:

MonDataset.MaTable.Rows(0).MonChamp = "toto"

J'ai une erreur de type (et évidemment la complétion ne propose pas
"MonChamp")

En revanche sur le test suivant :

---------------------------------------------------------------------------------------------------
If objMonDataset.MaTable.Rows(0).GetType.Name = "MaTableRow" Then
MsgBox("ok")
CType(objMonDataset.MaTable.Rows(0), MonDataset.MaTableRow).MonChamp =
"toto"
Else
MsgBox("ko")
End If
---------------------------------------------------------------------------------------------------

là, ça compile, et à l'exécution j'obtiens bien "ok" mais le cast échoue.

Je ne suis pas encore rentré dans le détail du code généré mais j'aimerais
déjà savoir si le pb est général.

D'avance merci.

Patrice

2 réponses

Avatar
Patrice Ongla
2 précisions :
1) Après redémarrage de VS, le cast n'échoue plus.
2) L'erreur de type sur l'expression "MaTable.Rows(0).MonChamp" est :
'MonChamp' n'est pas un membre de 'System.Data.DataRow'."
A la compilation, le compilateur voit donc "objMonDataset.MaTable.Rows(0)",
instance de "MaTableRow", comme une instance de sa superclasse "Datarow"
alors qu'à l'exécution il vous dit que
objMonDataset.MaTable.Rows(0).GetType.Name = "MaTableRow"

Bizarre quand même... Y'a sûrement une explication simple mais je sèche...




"Patrice Ongla" a écrit dans le message de news:
42069e4e$0$505$
Bonsoir à tous,

Je viens d'observer un truc qui m'étonne.

Lors d'un test, j'ai généré un dataform avec l'assistant sur une connexion
Access. L'assistant m'a généré un dataset typé, "MonDataset". Il ne
comporte qu'une seule table "MaTable", laquelle a un seul champ "MonChamp"
de type string (à l'image de ma table de test dans la base Access).
Eh bien je ne peux pas référencer directement MonChamp via la propriété du
datarow typé, en écrivant par exemple dans le code du dataform qqchose
comme :

MonDataset.MaTable.Rows(0).MonChamp = "toto"

J'ai une erreur de type (et évidemment la complétion ne propose pas
"MonChamp")

En revanche sur le test suivant :

---------------------------------------------------------------------------------------------------
If objMonDataset.MaTable.Rows(0).GetType.Name = "MaTableRow" Then
MsgBox("ok")
CType(objMonDataset.MaTable.Rows(0), MonDataset.MaTableRow).MonChamp =
"toto"
Else
MsgBox("ko")
End If
---------------------------------------------------------------------------------------------------

là, ça compile, et à l'exécution j'obtiens bien "ok" mais le cast échoue.

Je ne suis pas encore rentré dans le détail du code généré mais j'aimerais
déjà savoir si le pb est général.

D'avance merci.

Patrice




Avatar
Patrice Ongla
Bon, la réponse dans la doc tout bêtement : la syntaxe c'est
"objMonDataset.MaTable(0).MonChamp"
et non
"objMonDataset.MaTable.rows(0).MonChamp".

Merci le bouquin de Wrox d'écrire n'importe quoi.

Cela dit je trouve ça pas très net quand même...



"Patrice Ongla" a écrit dans le message de news:
4206ae26$0$520$
2 précisions :
1) Après redémarrage de VS, le cast n'échoue plus.
2) L'erreur de type sur l'expression "MaTable.Rows(0).MonChamp" est :
'MonChamp' n'est pas un membre de 'System.Data.DataRow'."
A la compilation, le compilateur voit donc
"objMonDataset.MaTable.Rows(0)", instance de "MaTableRow", comme une
instance de sa superclasse "Datarow" alors qu'à l'exécution il vous dit
que
objMonDataset.MaTable.Rows(0).GetType.Name = "MaTableRow"

Bizarre quand même... Y'a sûrement une explication simple mais je sèche...




"Patrice Ongla" a écrit dans le message de news:
42069e4e$0$505$
Bonsoir à tous,

Je viens d'observer un truc qui m'étonne.

Lors d'un test, j'ai généré un dataform avec l'assistant sur une
connexion Access. L'assistant m'a généré un dataset typé, "MonDataset".
Il ne comporte qu'une seule table "MaTable", laquelle a un seul champ
"MonChamp" de type string (à l'image de ma table de test dans la base
Access).
Eh bien je ne peux pas référencer directement MonChamp via la propriété
du datarow typé, en écrivant par exemple dans le code du dataform qqchose
comme :

MonDataset.MaTable.Rows(0).MonChamp = "toto"

J'ai une erreur de type (et évidemment la complétion ne propose pas
"MonChamp")

En revanche sur le test suivant :

---------------------------------------------------------------------------------------------------
If objMonDataset.MaTable.Rows(0).GetType.Name = "MaTableRow" Then
MsgBox("ok")
CType(objMonDataset.MaTable.Rows(0), MonDataset.MaTableRow).MonChamp =
"toto"
Else
MsgBox("ko")
End If
---------------------------------------------------------------------------------------------------

là, ça compile, et à l'exécution j'obtiens bien "ok" mais le cast échoue.

Je ne suis pas encore rentré dans le détail du code généré mais
j'aimerais déjà savoir si le pb est général.

D'avance merci.

Patrice