IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Problème de lien VB Basic 2008 Express ==> Sql [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Analyste Service Client
    Inscrit en
    Octobre 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyste Service Client
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 21
    Par défaut Problème de lien VB Basic 2008 Express ==> Sql
    Bonjour
    J'ai trois soucis a vous présenter pour un programme qui a la base se veut être un outil de visualisation d'un parc info.

    J'ai donc une base de données toute con avec Wamp et je souhaite faire trois choses :
    1-Alimenter mes listbox avec le contenu d'une table via un select approprié.
    2-Faire un update d'une table pour modifier un ligne de table (par ex : utilisateur)
    3-Faire deux select dans deux tables différentes en récupérant l'index des deux lignes que j'ai sélectionné pour ensuite créer une ligne dans une troisième table. Ceci dans le but de faire une association poste/utilisateur.



    1- Je sèche complètement sur comment faire en sorte de lire le resultat de mon select.

    J'aimerais le stocker dans une variable et ensuite le lire ligne par ligne pour alimenter ma listbox.

    Je pensais à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Dim Mavariable as QuelqueChoseQuiPeutMarcher
     
    nbLigne = ListesPostes.ListCount
    compteur = 0
     
    While compteur < nbLigne
    Liste_Dates.RemoveItem (0)
    compteur = compteur + 1
    End While
     
    Mavariable = ModuleBDDMysql.envoyerRequete ("SELECT `idutilisateur`, `Nom`  FROM  `utilisateur`)"
     
    For ligne1 to lignemax
     
         ListBox.Additem(ligne1)
     
    Next



    Mais j'ai beau essayé de faire avec un datareader, un recordset ou autre que j'ai trouvé sur le net, impossible de le faire marcher et je ne comprend pas toujours ce que les gens balance comme code, sans explications aucunes


    2- J'ai essayé ça mais il me cale une erreur dans mon module qui pourtant marche très bien avec un delete ou insert :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Envoyer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Envoyer.Click
                   ModuleBDDMysql.envoyerRequete("UPDATE `utilisateur` SET `Nom`= '" & SaisieNom.Text & "',`Prenom`=  '" & SaisiePrenom.Text & "',`Email`=  '" & SaisieMail.Text & "' WHERE  `utilisateur`.`Nom` = '" & NomUtilAModif.Text & "'")
        End Sub



    3- Je voudrais donc mettre le résultat des deux select qui me renvoient chacun un index, que je voudrais stocker dans une table du nom "affecter" contenant deux colonnes : idPoste et idutilisateur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Envoyer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Envoyer.Click
            ModuleBDDMysql.envoyerRequete("INSERT INTO poste(`Nom`,`Marque`,`DisqueDur`,`Memoire`)VALUES('" & SaisieNomPoste.Text & "','" & SaisieMarque.Text & "','" & SaisieCapacite.Text & "','" & SaisieMemoire.Text & "')")
     
            'ModuleBDDMysql.envoyerRequete("SELECT `idutilisateur` FROM  `utilisateur` WHERE  `Nom` LIKE  'NOM' AND  `Prenom` LIKE  'Cyril'")
            'ModuleBDDMysql.envoyerRequete("SELECT  `Idposte` FROM  `poste` WHERE  `Nom` LIKE  'test'")
            'ModuleBDDMysql.envoyerRequete("INSERT into affecter (idPoste, idUtilisateur) values (le resultat de mes deux select)
        End Sub



    Pour tout les codes j'ai utilisé un module afin d'automatiser tout ça. La connexion se fait au démarrage du programme et la déconnexion en quittant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Imports MySql.Data.MySqlClient
     
    Module ModuleBDDMysql
     
        Dim connexion As MySqlConnection
        Dim commande As MySqlCommand
     
        Public Sub connecter()
            connexion = New MySqlConnection
            connexion.ConnectionString = "Server=localhost; Database=evolution; Uid=root; Pwd=;"
            connexion.Open()
        End Sub
     
        Public Sub envoyerRequete(ByVal commando As String)
            commande = connexion.CreateCommand
            commande.CommandText = commando
            commande.CommandTimeout = 10
            commande.ExecuteNonQuery()
        End Sub
     
        Public Sub deconnecter()
            connexion.Close()
            MsgBox("Connection BDD ended")
        End Sub
     
    End Module
    Merci de m'aider

  2. #2
    Membre averti
    Homme Profil pro
    Analyste Service Client
    Inscrit en
    Octobre 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyste Service Client
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 21
    Par défaut
    Je répond a mon propre message, pour dire que j'ai résolu un de mes soucis et j'ai juste un problème avec le premier.

    Mon code est comme ceci pour le 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Private Sub GestionUtil_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim requete As String
            Dim rs As Recordset
            Dim base As Database
            Dim valeur As String
     
            requete = "select * from utilisateur"
            rs = base.OpenRecordset(requete, dbOpenDynaset)
            If rs.EOF = False Then
                rs.MoveFirst()
                While rs.EOF = False
                    valeur = rs("idutilisateur") + rs("Nom") + rs("Prenom")
                    ListesUtilisateurs.Items.Add(valeur)
                    rs.MoveNext()
                End While
                ListesUtilisateurs.SelectedIndex = 0
            End If
        End Sub
    Sauf qu'il me sort deux erreurs :
    L'opérateur '+' n'est pas défini pour les types 'DAO.field' et 'DAO.field'
    Le nom 'dbOpenDynaset' n'est pas déclaré
    Pour mon problème 2 en fait je démarrais mon programme directement depuis la form qui m’intéressais sauf que ma base s'ouvrant avec la form de démarrage normale, ça risquait pas de marcher :sick: J'ai bien suxxé sur ce coup.

    Toujours pas d'idée pour le problème 3

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    beaucoup d'erreurs dans ton code
    pas de recordset en vb.net ! il y a ado.net
    + n'est pas l'opérateur de concaténation
    pas de cast implicite !
    pas de transition par vb de requetes qui peuvent rester sur la base
    (liste non exhaustive)

    aussi je te conseille de lire le cours suivant :
    http://plasserre.developpez.com/cours/vb-net/
    (et un autre sur le langage sql)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    Bonjour,

    Avant de commencer j'ai envie de dire bravo Faufoll pour se post très présentable !!!

    1- Lire la base de données

    Bon premier point tu dit:
    Pour tout les codes j'ai utilisé un module afin d'automatiser tout ça.
    La connexion se fait au démarrage du programme et la déconnexion en quittant.


    Avant tout il faut savoir que tu ne doit surtout pas garder la connexion Mysql ouverte.
    Tu appel la base et aussitôt aprés *dés que tu a récupéré tes données*, tu referme la connexion.
    (trop de risque d'erreur de connexion autrement)

    exemple de code que tu peux utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    'Déclaration
        Dim RequeteSQL As String
        Dim objCommand As MySqlCommand
        Dim objDataReader As MySqlDataReader
        Dim MyAdapter As MySqlDataAdapter = New MySqlDataAdapter()
     
    'Création de la chaîne de connexion
        Dim connectString As String = "Server=localhost;Database=parc;User ID=root;Password=password"
     
    Try 'Ouvre le piège
     
        'Création de la connexion
            Dim Connection As MySqlConnection = New MySqlConnection()
            Connection.ConnectionString = connectString
     
        'Mouchard n°1
            MessageBox.Show("Connexion crée")
     
        'Ouverture de la connexion
            Connection.Open()
     
        'Mouchard n°2
            MessageBox.Show("Connexion à la BDD ok")
     
        'Requete SQl
            RequeteSQL = "SELECT * FROM ordinateur"
     
        'Execution de la requete
            objCommand = New MySqlCommand(RequeteSQL, Connection)
            objDataReader = objCommand.ExecuteReader
     
            While objDataReader.Read
                MessageBox.Show(objDataReader.GetString(0))
            End While
     
            'Fermeture
            objDataReader.Close()
            Connection.Close()
     
    Catch Ex As Exception 'Intercepte l'erreur en cas de pb
        MsgBox(Ex.ToString)
     
    End Try 'Ferme le piège
    *à mettre dans une fonction histoire de ne pas répéter le code*

    2- Faire une nouvelle requête dans la BDD
    Pour moi il n'y a pas de difficulté,
    si tu fait un fonction qui contient le code que je t’ai mis au dessus,
    avec ta requête SQL en paramètre, et tu lui fait retourner tes data lues.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Private Sub Envoyer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Envoyer.Click
    'Création de la requete SQL
        Dim MaRequete as string ="UPDATE `utilisateur` SET `Nom`= '" & SaisieNom.Text &_
                                                        "',`Prenom`=  '" & SaisiePrenom.Text &_
                                                        "',`Email`=  '" & SaisieMail.Text &_
                                                        "' WHERE  `utilisateur`.`Nom` = '" & NomUtilAModif.Text &_"'"
                                                        ' Je n'ai pas regardé si ta requête SQL était correcte
    'Récupération des data
        Dim objDataReader As MySqlDataReader 'Adapte le nom de l'objet
        objDataReader = MaFontionDeLecture(MaRequete)
     
    ' Et voila tu a tes data dès que tu click sur envoyer.
    '    a toi de voir le traitement que tu va y faire, 
    '    p-e que tu a besoin de déclarer ton data reader de manière plus *globale* parce-que la il meurt à la fin du Sub
    '    après je ne sais pas ce que tu veux exactement ...
    End Sub

    3- Connexion à deux BDD


    Toujours pareil
    une fois que tu à mis le code sous forme de fonction, tu peux appeler à ta guise tes BDD,
    sans entrer en conflit car tu à deux MySqlConnection d'ouvert en même temps.

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    Citation Envoyé par hunteshiva Voir le message
    Avant de commencer j'ai envie de dire bravo Faufoll pour se post très présentable !!!
    c'est surtout le modo qui est passé qu'il faut applaudir, car avant c'était illisible

    Citation Envoyé par hunteshiva Voir le message
    Avant tout il faut savoir que tu ne doit surtout pas garder la connexion Mysql ouverte.
    Tu appel la base et aussitôt aprés *dés que tu a récupéré tes données*, tu referme la connexion.
    (trop de risque d'erreur de connexion autrement)
    mysql ne supporte pas quelque chose que même access supporterait ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    lol ok*3 semaines d’absence je n'ai pas suivi le sujet dès le début*

    Sans doute que si, mais il n'y a aucun intérêt à garder une connexion ouverte,
    a part risque de se re-connecter à la base ou on est déjà connecté*et la je suis pas sur que ce soit très bon *

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 30/08/2009, 11h47
  2. Problème données VS 2008 Express et SQL server Express
    Par Contrec dans le forum Visual Studio
    Réponses: 7
    Dernier message: 20/10/2008, 19h13
  3. Réponses: 1
    Dernier message: 15/07/2008, 23h28
  4. Affichage d'une page Web en Visual Basic 2008 Express Edition
    Par Harry Covair dans le forum Windows Forms
    Réponses: 1
    Dernier message: 30/06/2008, 00h54
  5. Réponses: 2
    Dernier message: 19/03/2008, 10h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo