Passage d'une variable dans AdapBase.Fill

cs_elprince Messages postés 6 Date d'inscription samedi 26 mars 2011 Statut Membre Dernière intervention 28 mars 2011 - 26 mars 2011 à 18:54
cs_elprince Messages postés 6 Date d'inscription samedi 26 mars 2011 Statut Membre Dernière intervention 28 mars 2011 - 28 mars 2011 à 12:06
Salut à tous!

Je suis en train de faire un projet pour les cours. Je fais grosso-modo un programme de gestion de parc informatique très simple (gestion des pannes, machines utilisateurs tout ça).
Dans ce projet nous avons une contrainte : avoir un accès à 5 tables différentes.

Et là je bute depuis un petit moment sur une commande.

Voici mon code :

Private Sub Cmb_Choix_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cmb_Choix.SelectedIndexChanged
Dim Table As String = Nothing
Dim maTableResultat As DataTable
Dim nbchamp As Integer = 0

'On teste le choix dans la liste déroulante et on choisit la table à afficher en fonction de ce choix
Select Case Cmb_Choix.SelectedIndex
Case 0
Table = "T_Pannes"
Case 1
Table = "T_Employe"
Case 2
Table = "T_Tech"
Case 3
Table = "T_Service"
Case 4
Table = "T_Machines"
End Select

Requete = "SELECT * FROM '" & Table & "'"
MaCmd.CommandText = Requete
MaCmd.Connection = CnxBase
'initialisation de l'adapter
AdapBase.SelectCommand = MaCmd
'ouverture de la connexion
CnxBase.Open()
AdapBase.Fill(DstBase, Table)
'On compte le nombre de champs présents dans la table
maTableResultat = DstBase.Tables(Table)

MsgBox(maTableResultat.Columns.Count)
'fermeture de la connexion
CnxBase.Close()

End Sub


Alors en gros, pour expliquer, le technicien choisit dans une ComboBox les informations auxquelles il veut accéder. Jusque là, tout va bien, j'ai crée une variable Table (as string) dans laquelle est entrée le nom de la table visée, variable ensuite reprise dans la requête.

Et là je tombe sur un os : dans la commande "AdapBase.Fill(DstBase, Table)", il ne veut pas me prendre la chaîne contenue dans Table. Alors que si je met simplement AdapBase.Fill(DstBase, "T_Pannes") par exemple, ça marche nickel!

J'ai mis un espion, ma variable Table contient bien une chaîne de caractère, mais apparemment, passer une variable dans cette commande, il accepte pas...

Est-ce que quelqu'un peut m'aider?

Please Help!!!!

11 réponses

foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
26 mars 2011 à 20:47
Bonjour,

Quand vous faite
AdapBase.Fill(DstBase, Table)


Votre variable table doit représenter le nom de la table dans le dataset DstBase et non le nom de la table dans la base.

Etes-vous sur que les noms des tables de votre dataset correspondent aux noms des tables de votre base.

Vous pouvez faire ce petit test pour controler.

For Each table as DataTable In DstBase.Tables
  Console.WriteLine("Table : {0}", table.Name)
Next
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
26 mars 2011 à 20:48
Pardon, j'avais sauté cette ligne

AdapBase.Fill(DstBase, "T_Pannes") par exemple, ça marche nickel!


Donc je retir ce que j'ai dit
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
26 mars 2011 à 21:07
Les tables dans votre dataset sont-elles créées manuellement ou voulez-vous que les tables se crées en fonction de la requete ?
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
26 mars 2011 à 21:21
Requete = "SELECT * FROM '" & Table & "'" 
'initialisation de l'adapter 
AdapBase = New OleDbDataAdapter(Requete, CnxBase) 'A adapter si vous n'utilisez pas OleDb
'ouverture de la connexion 'Pas necessaire car Fill ouvre la connexion'
AdapBase.Fill(DstBase, Table) 
'On compte le nombre de champs présents dans la table 
maTableResultat = DstBase.Tables(Table) 


Devrait résoudre votre problème, dans cette exemple l'adapter est créé en fonction de la requête
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_elprince Messages postés 6 Date d'inscription samedi 26 mars 2011 Statut Membre Dernière intervention 28 mars 2011
26 mars 2011 à 21:46
Merci de tes réponses (Je pense que ce sera plus facile de se tutoyer si ça ne te dérange pas...)

J'ai testé avec ton code mais ça n'a pas marché... mon AdapBase je le fais déjà dans mon module :
Module ModPub
    'Chaine de connexion
    Public Const MachaineCnx = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\Vermeiren\Bureau" _
    & "Projet_VB\Gestion_Parc.mdb;Persist Security Info=False"
    'Création de l'objet Connexion
    Public CnxBase As New OleDb.OleDbConnection(MachaineCnx)
    'Variable pour créer des requetes SQL
    Public Requete As String
    'création du table adapter
    Public AdapBase As New OleDb.OleDbDataAdapter
    'Création de l'objet commande
    Public MaCmd As New OleDb.OleDbCommand
    'Création du dataset 
    Public DstBase As New DataSet
    'Création du datatable
    Public DtEmp As DataTable
    Public DtLieu As DataTable
    Public DtPanne As DataTable
    Public DtServ As DataTable
    Public DtTech As DataTable
    Public Autorisation As Boolean = False

End Module


En fait, ce que je ne comprends pas c'est, pourquoi la commande ne prends pas la variable alors qu'elle contient une chaîne de caractère...
0
cs_elprince Messages postés 6 Date d'inscription samedi 26 mars 2011 Statut Membre Dernière intervention 28 mars 2011
26 mars 2011 à 21:50
Lorsque j’exécute le programme, j'ai un message d'erreur disant :
Erreur de Syntaxe dans la requête. La clause de la requête est incomplète
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
27 mars 2011 à 20:41
Essaye ceci :
Requete = "SELECT * FROM " & Table


Sinon, peux tu poster la partie de code ou tu ajoute les datatable au dataset ?
0
cs_elprince Messages postés 6 Date d'inscription samedi 26 mars 2011 Statut Membre Dernière intervention 28 mars 2011
27 mars 2011 à 21:00
Alors, j'ai passé des "heures" sur le problème, j'ai essayé plein de trucs, je viens d'essayer ta méthode, ça n'a pas marché...


Et là j'enlève juste un "s" au nom de ma table... et ça marche...

J'ai une de ces honte!!!

Vraiment désolé de t'avoir fait cherché pour ça!

En tout cas, merci pour ton aide... Merci au forum d'exister, je pense sincèrement poster mon aide lorsque je le pourrais.

Encore désolé :s
0
cs_elprince Messages postés 6 Date d'inscription samedi 26 mars 2011 Statut Membre Dernière intervention 28 mars 2011
27 mars 2011 à 21:06
Au fait non, c'est bien ta méthode qui marche, la toute dernière

Ouhla il va falloir que je dorme moi.

Bon en gros, si tu mets :
Requete = "SELECT * FROM '" & Table & "'" 
il prends les quottes dans la requête, ce qui ne lui plait pas...
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
28 mars 2011 à 09:14
Oui, j'ai lu trop vite la première fois.

En écrivant
Requette = "SELECT * FROM '" & Table & "'"


Le résultat est
SELECT * FROM 'T_Pannes'


Donc le moteur sql n'y voit pas un nom de table, mais une chaine de caractères.
0
cs_elprince Messages postés 6 Date d'inscription samedi 26 mars 2011 Statut Membre Dernière intervention 28 mars 2011
28 mars 2011 à 12:06
Exactement.

Bon le sujet est résolu, ça marche maintenant!

Merci pour ton aide!
0
Rejoignez-nous