BasicZx81
Messages postés140Date d'inscriptionsamedi 5 mars 2011StatutMembreDernière intervention13 août 2013
-
12 nov. 2011 à 20:15
BasicZx81
Messages postés140Date d'inscriptionsamedi 5 mars 2011StatutMembreDernière intervention13 août 2013
-
14 nov. 2011 à 20:56
Bonsoir à tous,
Je n'ai pas programmé depuis plusieurs année donc je suis un peu perdu avec l'arrivée de ADO.NET et plus précisément sur les points suivants : (Certaines questions vont vous paraître des questions de niveau débutant, j'espère que vous serez indulgent....)
1- Comment remplir un Dataset avec plusieurs tables ? Beaucoup d'exemple sur le web ne charge qu'une seule table ! hors si j'ai bien suivi le dataset est prévu pour contenir plusieurs tables.
Pour une seule table j'utilise le code suivant (dont j'ai enlevé quelques lignes pour une meilleure lisibilité)
sql = "SELECT * FROM Table1"
DBcommand = New OleDbCommand(sql)
DBDataAdapter = New OleDbDataAdapter(DBcommand)
DBDataAdapter.Fill(DBDataSet, "Table1")
2- Comment connaitre le nom des tables et les noms de colonne de chaque tables d'une base .mdb non connu à l'avance.
Je vous remercie beaucoup si vous pouvez m'aider sur ces 2 points.
BasicZx81
Messages postés140Date d'inscriptionsamedi 5 mars 2011StatutMembreDernière intervention13 août 2013 14 nov. 2011 à 20:56
Merci le Pivert pour ton aide,
Visiblement le Dataset n'est pas trop prévu pour fonctionner comme je le pensais. Par exemple quand j’exécute la commande OleDBAdapter.Fill (ds) , celle-ci charge le dataset avec des données appelées via ma commande sql et bizarrement comme je n'ai pas spécifié de nom de table l'Adapter lui donne automatiquement le nom "Table". Je manque un peu trop de connaissance à ce niveau pour allez plus loin et je vais acheter un ou deux livres sur ADO.net pour connaitre un peu mieux ce Dataset et l'usage que l'on peux en faire.
Je te remercie beaucoup pour ton aide qui m'a quand même aidé à avancer un peu plus. je clôture le post.
Pour la première question: Si ça fonctionne avec la Table1, je ne vois pas pourquoi ça ne fonctionnerait pas en rajoutant la Table2 (donc plusieurs Tables).
(SELECT * FROM Table2)
Pour la deuxième question: Connais-tu au moins le nom du fichier .mdb? Si oui il faut l'ouvrir sous access et tu auras les noms des tables avant de créer ton code.
L'application n'est pas sensée les deviner, (apart quelques membres sur ce site qui possèdent une boule de cristal qui arrivent ).
Tu dois lui dire quel est le fichier, le nom des tables et colonnes.
BasicZx81
Messages postés140Date d'inscriptionsamedi 5 mars 2011StatutMembreDernière intervention13 août 2013 13 nov. 2011 à 10:17
Merci acive et Le Pivert,
Dans l'exemple de "Le Pivert" j'obtiens le nom des tables (voir extrait du code ci-dessous)donc cela réponds à ma 2eme question. Concernant la 1ere question je suppose que je peux utiliser le nom de ces tables pour charger mon Dataset (j'ai pas encore essayé) mais est-ce qu'il n'existe pas une commande simple du style : DBDataAdapter.Fill(DBDataSet) sans spécifier de noms de table ? (j'ai essayé cette commande, ca ne marche pas !!!).
Extrait de code pour obtenir le noms des tables :
Private Sub affichertable()
Dim i As Integer
cmbtable.Items.Clear()
'Connexion à la base de données Northwind dans SQL Server.
'Soyez sûr d'utiliser un compte qui a l'autorisation à la liste des tables.
connex.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Cheminsource
connex.Open()
'Récupérer les informations de schéma sur les tables.
'Par ce que les tableaux comprennent des tables, vues, et d'autres objets,
'limiter uniquement TABLE dans le tableau objet de restrictions.
DT = connex.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, _
New Object() {Nothing, Nothing, Nothing, "TABLE"})
'Liste le nom du tableau de chaque ligne dans la table de schéma.
For i = 0 To DT.Rows.Count - 1
cmbtable.Items.Add(DT.Rows(i)!TABLE_NAME.ToString)
Next i
'Fermer explicitement - ne pas attendre le garbage collection
connex.Close()
End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Le Pivert
Messages postés7893Date d'inscriptionjeudi 13 septembre 2007StatutContributeurDernière intervention19 mai 2023136 13 nov. 2011 à 11:22
Dans l'exemple que je t'ai donné les tables sont chargées de cette manière:
Private Sub LoadDataTable()
DA = New OleDb.OleDbDataAdapter("Select * from " & cmbtable.Text, connex)
DT = New DataTable
DA.Fill(DT)
'initialiser le command builder, cela sera utilisé plus tard ..
CMB = New OleDb.OleDbCommandBuilder(DA)
End Sub
Il y a de nombreux commentaires. Je pense que c'est assez clair. Les tables se chargent 1 à la fois et c'est logique, je ne vois pas comment on pourrait afficher toutes les table en même temps!!!!
Bonne continuation
BasicZx81
Messages postés140Date d'inscriptionsamedi 5 mars 2011StatutMembreDernière intervention13 août 2013 13 nov. 2011 à 12:23
Merci pour ta réponse Le Pivert.
Je pensais utiliser une base de données pour sauvegarder les données de mon programme, pour se faire l'idée du Dataset m'a paru être une bonne solution (Mes données pouvant s'organiser dans plusieurs tables). Je lis, écrit ou modifie mes données dans mon programmes et pour la sauvegarde il me suffirait d'envoyer simplement une commande update sur le Dataset.
Il est possible que cela ne soit pas une bonne utilisation du Dataset, j'essaye de comprendre en même temps l’intérêt du dataset par rapport au datatable, est t'on vraiment obligé de charger chaque tables séparément dans un datatable ?
Pour l'instant je fait quelques essaies avant d'entreprendre le développement d'une application, si quelqu'un pouvait m’éclairer un peu plus la dessus ça serait super sympa.