cs_Papymuzo
Messages postés169Date d'inscriptionjeudi 24 juillet 2003StatutMembreDernière intervention17 août 2010
-
8 mai 2009 à 12:35
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 2020
-
9 mai 2009 à 16:24
Bonjour,
Je poste ce message car j'ai une question par rapport à la méthode de codage pour relier un programme à une base Access en OleDB.
Je me demande comment s'y prendre pour que ce soit le plus efficace :
- Est-ce qu'on doit récupérer chaque table dans un DataSet, puis mettre dans une table la recherche que l'on effectue par le biais de requêtes SQL ? (En gros on aurait la table Table1, Table2, Table3... TableRecherche).
- Est-ce qu'on doit récupérer, dans un DataSet, uniquement la recherche que l'on souhaite ? (Donc uniquement la table TableRecherche, ce qui impose des requêtes SQL fréquentes).
- Afin d'updater des données sur la base, est-ce qu'il vaut mieux utiliser un DataRow que l'on ajoute à notre table, puis que l'on update avec un DataAdapter ? (Méthode "classique" pour updater des données via un DataSet).
- Ou alors est-il préférable d'utiliser uniquement des requêtes SQL (INSERT INTO... UPDATE TABLE... etc) ?
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 9 mai 2009 à 10:50
Salut,
Pour ma part, je procède comme suis:
Je sépare totalement SQL/VB, je balance toutes mes requêtes dans des TableAdapter (d'un DataSet)
et j'appelle les procédure dans le code behind, c'est simple et pratique, chaque TableAdapter possede sa propre DataTable.
Le soucis est peut etre que cela obligue a 'Séparer' un peu les requêtes, on ne peu pas tout mettre dans un TableAdapter, à moins d'avoir des requête donnant un DataTable identique pour tout le programme.
cs_Papymuzo
Messages postés169Date d'inscriptionjeudi 24 juillet 2003StatutMembreDernière intervention17 août 20101 9 mai 2009 à 12:28
Salut,
Je n'ai jamais entendu parler de TableAdapter, mais je vais essayer de regarder comment ça marche ;)
Sinon, je vais essayer de faire comme ça : stocker chaque table dans une table du DataSet (afin d'avoir "tout sous la main"), puis créer une table nommée TRecherche (par exemple), dans laquelle j'effectuerai toutes mes requêtes SELECT.
Ensuite, je ferai des INSERT ALL, INSERT INTO etc, au lieu d'utiliser une DataRow.
Je pense que ce système est plus fiable, et protège des erreurs (à condition de bien organiser sa base).
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 9 mai 2009 à 16:24
Re,
Pour les données le DataSet est idéal.
Comment ca marche ? C est simple, tu ouvre ton dataset tu fait un click doit dans un espace vide et dans le menu tu sélectionne 'Ajouter' => 'TableAdapter',
en suite, tu crée ta 1ère requête SELECT SQL qui portera un nom pour être ensuite appelé comme une procédure vb classique dans le code behind.
De la, un TableAdapter va être créé et un modèle de Table basé sur ta requête, exemple:
Supposons que j'ai une table 'Products' dans ma base de données, que mon Dataset se nomme 'Stock' et que
ma requête select sera nommé par exemple 'GetAllProducts'
SELECT Product_ID, Product_Name, Product_Ref
FROM Products
Et j'aurais donc un dataset nommé par défaut 'ProductsTableAdapter' et un schéma de table relié à celui-ci nommé 'Products' qui ressemble à cela :
Product_ID
Product_Name
Product_Ref
Dans mon dataset je peu ensuite rajouter autant de procédures que je veux (et pas spécialement des SELECT), du moment que les informations retournés par celles-ci soit au même schéma de table, Exemple:
Je veux créer une requête GetProductByID, qui va me retourné qu'une ligne dans ma table, celle du produit spécifié:
SELECT Product_ID, Product_Name, Product_Ref
FROM Products
WHERE Product_ID = @Product_ID
cette requête correspont car elle retourne les même colonnes que la requête maitre (Product_ID, Product_Name, Product_Ref) mais la requête :
SELECT Product_ID
FROM Products
WHERE Product_ID = @Product_ID
affichera un avertisssment car elle retourne un schéma de table différent de la requête pricipale. Pour créer une tel requête il faudra alors recréer un TableAdapter.
Pour utiliser les données dans le code c'est ensuite très simple, il faut instancier les Tables et TableAdapter comme des classes existantes:
Dim TA as New StockTableAdapters.ProductsTableAdapter
Dim T as Stock.ProductsTable = TA.GetAllProducts' <== Appel de la requête SELECT et replissage de la table 'T'
En Suite il suffit de parcourir les données de la table
Dim R As Stock.ProductsRow
For Each R In T.Rows
Dim ProductID as String = R.Product_ID
Dim ProductName As String = R.Product_Name
[...]
Next
Voila pour le petit tuto vite fait en espérant que cela t'aidera (j'ai fait ca de tête j'ai peut-être commis des erreur en ce qui concerne les noms...)