La meilleure façon de gérer une base ?

cs_Papymuzo Messages postés 169 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 17 août 2010 - 8 mai 2009 à 12:35
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Derniè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) ?

En vous remerciant,

-Papymuzo-

3 réponses

Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
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.

Voilou 
 
@+
0
cs_Papymuzo Messages postés 169 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 17 août 2010 1
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).


Qu'en pensez-vous ?


-Papymuzo-
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
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...)

@+
0
Rejoignez-nous