[Deb] Questions sur l'intégration des bases de données...
2 réponses
Jérôme Quintard
Salut à tous,
J'ai quelques questions de base sur l'utilisation des bases de données sous
VB.NET.
Aujourd'hui (par exemple) j'ai un SqlConnection, trois SqlDataAdapter (Type
de véhicules, Marques, Modeles) et un SqlDataSet.
Première question :
-------------------
Mon DataAdapter effectue une simple requête (Select * from Marques). Pour
énumérer les enregistrements d'un SqlDataAdapter j'utilise la syntaxe
suivante (je fais exprès de ne pas binder sur un composant) :
For Each Row In SqlDataSet.Marques.Rows()
Msgbox Row.Item("Marque").ToString
Next
Est-ce la bonne ? Je suis plus habitué au bon vieux recorset d'ADO... j'ai
donc des doutes sur ma méthode...
Seconde question :
-------------------
Si à un moment T je souhaite récupérer tous les marques correspondant par
exemple à Renault (Select * from Marques where Marque = 'Renault'). Y a t'il
une possibilité pour filtrer le DataAdapter existant sans nécessairement en
créer un autre ?
Troisième et derniere question :
--------------------------------
Je souhaiter remplir un treeview de toutes les Marques et Modèles (pour
chaque marque) voir même de tout les Types de véhicules, Marques (par type
de véhicule) et Modèle (pour chaque marque). Quelle est la meilleure façon
de faire cela en .NET (énumrer les valeurs de chaque serait très lourd je
suppose !!!) ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Patrice Ongla
> Mon DataAdapter effectue une simple requête (Select * from Marques). Pour énumérer les enregistrements d'un SqlDataAdapter j'utilise la syntaxe suivante (je fais exprès de ne pas binder sur un composant) :
For Each Row In SqlDataSet.Marques.Rows() Msgbox Row.Item("Marque").ToString Next
Est-ce la bonne ? Je suis plus habitué au bon vieux recorset d'ADO... j'ai donc des doutes sur ma méthode...
Oui, pkoi, ça marche pas ?
Seconde question : -------------------
Si à un moment T je souhaite récupérer tous les marques correspondant par exemple à Renault (Select * from Marques where Marque = 'Renault'). Y a t'il une possibilité pour filtrer le DataAdapter existant sans nécessairement en créer un autre ?
Il n'est pas possible de filtrer le dataset directement, ou en tout cas ce n'est pas très souple. Par exemple, tu peux lui appliquer un filtre (clause Where) mais ça te rend un tableau de rows et non un dataset. cela dit, ça peut être utile. Le mieux et le plus commode c'est de contruire des vues sur (DataView) sur ton dataset. Tu peux en contruire autant que tu veux, sur les tables de ton dataset en appliquant les filtres et les tris de ton choix (y compris sur des critères de tables jointes). Ca permet de en plus de faire du binding (tu bindes tes contrôles sur la vue et non sur le ds). Y'a encore la solution intermédiaire via la defaultview du ds, mais le binding des contrôles ignore les filtres que tu lui appliques, à l'exception du datagrid (curieusement).
Troisième et derniere question : --------------------------------
Je souhaiter remplir un treeview de toutes les Marques et Modèles (pour chaque marque) voir même de tout les Types de véhicules, Marques (par type de véhicule) et Modèle (pour chaque marque). Quelle est la meilleure façon de faire cela en .NET (énumrer les valeurs de chaque serait très lourd je suppose !!!) ?
Personnellement, je ne vois rien d'autre qu'une boucle imbriquée sur les rows de la DataTable "Type" de ton DS, puis sur chaque row de "Marque" via GetChildRows, puis sur chaque row de "Modèle" via GetChildRows encore. A condition que tu aies créé les relations bien sûr. C'est très simple à écrire.
> Mon DataAdapter effectue une simple requête (Select * from Marques). Pour
énumérer les enregistrements d'un SqlDataAdapter j'utilise la syntaxe
suivante (je fais exprès de ne pas binder sur un composant) :
For Each Row In SqlDataSet.Marques.Rows()
Msgbox Row.Item("Marque").ToString
Next
Est-ce la bonne ? Je suis plus habitué au bon vieux recorset d'ADO... j'ai
donc des doutes sur ma méthode...
Oui, pkoi, ça marche pas ?
Seconde question :
-------------------
Si à un moment T je souhaite récupérer tous les marques correspondant par
exemple à Renault (Select * from Marques where Marque = 'Renault'). Y a
t'il une possibilité pour filtrer le DataAdapter existant sans
nécessairement en créer un autre ?
Il n'est pas possible de filtrer le dataset directement, ou en tout cas ce
n'est pas très souple. Par exemple, tu peux lui appliquer un filtre (clause
Where) mais ça te rend un tableau de rows et non un dataset. cela dit, ça
peut être utile. Le mieux et le plus commode c'est de contruire des vues sur
(DataView) sur ton dataset. Tu peux en contruire autant que tu veux, sur les
tables de ton dataset en appliquant les filtres et les tris de ton choix (y
compris sur des critères de tables jointes). Ca permet de en plus de faire
du binding (tu bindes tes contrôles sur la vue et non sur le ds). Y'a encore
la solution intermédiaire via la defaultview du ds, mais le binding des
contrôles ignore les filtres que tu lui appliques, à l'exception du datagrid
(curieusement).
Troisième et derniere question :
--------------------------------
Je souhaiter remplir un treeview de toutes les Marques et Modèles (pour
chaque marque) voir même de tout les Types de véhicules, Marques (par type
de véhicule) et Modèle (pour chaque marque). Quelle est la meilleure façon
de faire cela en .NET (énumrer les valeurs de chaque serait très lourd je
suppose !!!) ?
Personnellement, je ne vois rien d'autre qu'une boucle imbriquée sur les
rows de la DataTable "Type" de ton DS, puis sur chaque row de "Marque" via
GetChildRows, puis sur chaque row de "Modèle" via GetChildRows encore. A
condition que tu aies créé les relations bien sûr. C'est très simple à
écrire.
> Mon DataAdapter effectue une simple requête (Select * from Marques). Pour énumérer les enregistrements d'un SqlDataAdapter j'utilise la syntaxe suivante (je fais exprès de ne pas binder sur un composant) :
For Each Row In SqlDataSet.Marques.Rows() Msgbox Row.Item("Marque").ToString Next
Est-ce la bonne ? Je suis plus habitué au bon vieux recorset d'ADO... j'ai donc des doutes sur ma méthode...
Oui, pkoi, ça marche pas ?
Seconde question : -------------------
Si à un moment T je souhaite récupérer tous les marques correspondant par exemple à Renault (Select * from Marques where Marque = 'Renault'). Y a t'il une possibilité pour filtrer le DataAdapter existant sans nécessairement en créer un autre ?
Il n'est pas possible de filtrer le dataset directement, ou en tout cas ce n'est pas très souple. Par exemple, tu peux lui appliquer un filtre (clause Where) mais ça te rend un tableau de rows et non un dataset. cela dit, ça peut être utile. Le mieux et le plus commode c'est de contruire des vues sur (DataView) sur ton dataset. Tu peux en contruire autant que tu veux, sur les tables de ton dataset en appliquant les filtres et les tris de ton choix (y compris sur des critères de tables jointes). Ca permet de en plus de faire du binding (tu bindes tes contrôles sur la vue et non sur le ds). Y'a encore la solution intermédiaire via la defaultview du ds, mais le binding des contrôles ignore les filtres que tu lui appliques, à l'exception du datagrid (curieusement).
Troisième et derniere question : --------------------------------
Je souhaiter remplir un treeview de toutes les Marques et Modèles (pour chaque marque) voir même de tout les Types de véhicules, Marques (par type de véhicule) et Modèle (pour chaque marque). Quelle est la meilleure façon de faire cela en .NET (énumrer les valeurs de chaque serait très lourd je suppose !!!) ?
Personnellement, je ne vois rien d'autre qu'une boucle imbriquée sur les rows de la DataTable "Type" de ton DS, puis sur chaque row de "Marque" via GetChildRows, puis sur chaque row de "Modèle" via GetChildRows encore. A condition que tu aies créé les relations bien sûr. C'est très simple à écrire.
Jérôme Quintard
> Oui, pkoi, ça marche pas ?
Si mais j'utilisé c'est technique sans lire la doc... juste en essayant, ça me paraissait logique...
Le mieux et le plus commode c'est de contruire des vues sur
(DataView) sur ton dataset.
Ok compris
C'est très simple à écrire.
Oui finalement c'est que j'ai fais... ça fait quelques petites lignes
Merci !
Jérôme
> Oui, pkoi, ça marche pas ?
Si mais j'utilisé c'est technique sans lire la doc... juste en essayant, ça
me paraissait logique...
Le mieux et le plus commode c'est de contruire des vues sur
(DataView) sur ton dataset.
Ok compris
C'est très simple à écrire.
Oui finalement c'est que j'ai fais... ça fait quelques petites lignes