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

Accès aux données Discussion :

Extraire données selon requete


Sujet :

Accès aux données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2015
    Messages : 50
    Points : 38
    Points
    38
    Par défaut Extraire données selon requete
    Bonjour a tous,

    Je vous expose mon problème, j'ai une base access, vb.net :

    J'aimerai d’après un numéro de téléphone connaitre les informations qui y sont liées.

    Sur une Form1 j'ai un textbox(champ de recherche) et un bouton (lancement de la recherche)
    Sur une Form2, j'ai une textbox (nom) une textbox (prenom) et une autre textbox (adresse). 2 boutons ("Quitter" et "Mettre a jour")

    J'aimerai saisir un numéro de téléphone sur la textbox du Form1, cliquer sur le bouton recherche.
    La form2 s'ouvre et m'affiche (d’après le numéro de tel que j'ai saisi) le nom, le prénom et l'adresse du numéro de tel.

    Info utile : Il est possible que je modifie le nom ou le prénom sur la form2 et je clique sur "Mettre a jour" pour valider le changement.

    Mais je n'arrive pas a savoir quelle méthode utiliser, par ou commencer, comment lier les 2 form, la saisie d'une valeur dans une et le résultat de la requête dans l'autre.

    Faut-il lier les textbox nom, prenom, adresse aux champs de la base de données? ou tout faire en code ?
    Enfin comme vous pouvez le voir, je suis un peu perdu la...

    Merci pour votre aide.
    Stéphane

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Un peu dans le désordre :

    Dans Form2, modifier via le designer les propriétés DialogResult des boutons Quitter et Mettre à jour, respectivement DialogResult.Cancel et DialogResult.Ok

    Dans la classe Form2, créer une procedure Static (Shared Sub en vb.net) nommée par exemple "StaticExecute" avec les paramètres suivants:
    - en entrée le Numéro,
    - en entrée/sortie nom, prénom et adresse
    - en sortie l'indication booléenne: modifié/inchangé

    Dans cette procedure StaticExecute() de Form2, 2 instructions:
    • créer une instance MyForm2 de Form2,
    • appeler MyForm2.Execute() fonction définie ci-dessous.


    Dans la classe Form2, créer une procédure "Execute()" avec les mêmes paramètres que "StaticExecute()":
    • mettre le numero dans un textbox readonly ou dans la propriété Text de la la forme,
    • remplir le contenu des TextBox avec les paramètres nom, prénom, adresse,
    • Appeler la fonction MyForm2.ShowDialog() qui retournera le DialogResult correspondant au bouton appuyé, ce qui permet de positionner le paramètre de retour modifié/inchangé
    • si modifié, récupérer les nouvelles valeurs nom, prénom et adresse à renvoyer.


    Depuis Form1, accéder à la base de donnée pour chercher les info liées au numéro, appeler Form2.StaticExecute(), puis faire les éventuelles modifications de la base de données.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2015
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    Oula...!

    Au vu de ta réponse je ne pense pas être capable de réaliser cela.
    Certes ta reponse est bien clair et complet. mais je ne saurai pas integrer tous en vb.

    J'ai une autre question qui decoule de ce que j'ai demandé.
    j'ai realisé une requete grace à l'outil qui se trouve dans "Modifier le DataSet à l'aide du concepteur" en peut comme dans access.

    En revanche, comment utilise t on la requete que l'on vient de créer ? cela pourrai me sauver la mise ;-)
    merci en tous cas pour ton aide,
    Stéphane

  4. #4
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Au vu de ta réponse je ne pense pas être capable de réaliser cela.
    Comme on pouvait deviner d'après ton message que tu était débutant, j'ai vraiment détaillé toutes les étapes.
    Mais chaque étape se traduit par quelques instructions simples.

    Implémenter la solution proposée est un bon exercice qui te servira à comprendre certains concepts indispensables si tu continues à programmer en vb.net.

    Si tu rencontres un problème sur une étape, crée un nouveau message ou une nouvelle discussion.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2015
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    Tu as tout a fais raison,

    Je me lance, mais je risque d'avoir quelques questions...
    - Je créé toute la partie design
    - Je créé ma DB sous access
    - Pour faire simple (pour commencer avec 1 table), je la remplie
    - je connecte la vb.net à ma table

    Jusque la je m'en sort ;-)

    J'aimerai savoir, dans le Form2, s'il faut que les textbox (la ou il y aura le resultat de ma requete) je les lie a chaque champ de la table
    Exemple textbox1 (nom) soit lié a ma table au champ Nom ? ou tout sera fait par le code ?

    ensuite pour le reste du code je vais tenter des choses avec quelques recherches sur le net, si je sèche je passerai par ici poser mes questions.

    Bien a toi,
    Stéphane

  6. #6
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    J'aimerai savoir, dans le Form2, s'il faut que les textbox (la ou il y aura le resultat de ma requete) je les lie a chaque champ de la table
    Form2 est juste utilisée comme IHM de saisie qui s'initialise à partir des données fournies par Form1 et renvoie à Form1 les valeurs entrées dans les TextBox.

    Avant l'appel de Form2, Form1 effectue la requête de lecture de la base de données.
    Après l'appel de Form2, Form1 effectue la requête de modification de la base.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2015
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    Parfait jusque la, je pige ;-)

    J'ai trouvé une super page aux sujet de la récupération des données :
    http://plasserre.developpez.com/cour...bases-donnees2

    J'ai bien lu, plusieurs fois cette page, (bon j'ai pas TOUT compris) mais une chose à retenir je pense c'est qu'il y a en gros 2 méthodes pour extraire des données, soit en "reader" donc juste de la consultation (un simple SELECT), soit par le Dataset.

    Je dirais que si on n'avait pas besoin de mettre a jour les données qui appartiennent au numéro de téléphone, on serait tenté d'utiliser le reader. Mais comment on peut être amené à changer les infos, on doit passer par le DataSet.

    C'est bien ca ?

  8. #8
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Je dirais que si on n'avait pas besoin de mettre a jour les données qui appartiennent au numéro de téléphone, on serait tenté d'utiliser le reader. Mais comment on peut être amené à changer les infos, on doit passer par le DataSet.

    C'est bien ca ?
    Oui

    mais une chose à retenir je pense c'est qu'il y a en gros 2 méthodes pour extraire des données,
    En général, j'utilise le DataSet avec DataAdapter, mais il existe une 3ème methode : utiliser ExecuteQuery et/ou ExecuteReader
    (code pour MySql, pour un autre SGBD on remplacerait les types "MySql*" par les classes associées au SGBD"):
    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
       Dim connString As String = "Database=testdb;Data Source=localhost;" _
              & "User Id=testuser;Password=test623"
     
          Dim conn As New MySqlConnection(connString)
          Try
            conn.Open()
            cmd.Connection = conn
             // Lecture de la table
             Dim stm As String = "SELECT * FROM Authors"
                Dim cmd As MySqlCommand = New MySqlCommand(stm, conn)
                Dim reader As MySqlDataReader = cmd.ExecuteReader()
     
                While reader.Read()
                    Console.WriteLine(reader.GetInt32(0) & ": " _ 
                        & reader.GetString(1))
                End While
                reader.Close()
            // Ajout de donnée
            cmd.CommandText = "INSERT INTO Authors(Name) VALUES(@Name)"
            cmd.Prepare()
            cmd.Parameters.AddWithValue("@Name", "Trygve Gulbranssen")
            cmd.ExecuteNonQuery()
            //
            conn.Close()
     
          Catch ex As MySqlException
              Console.WriteLine("Error: " & ex.ToString())
          End Try
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2015
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    Bonjour Graffito,

    De retour apres quelques semaines de silence...

    Je suis desolé mais meme avec le code que tu as posté, je n'y arrive pas.
    parce qu'il ne correspond pas à mon besoin et je n'arrive pas à l'adapter.

    Je suis desolé.
    Peux-tu m'aider un peu plus selon le modele de presentation des données dans un textbox, pas dans une liste ?

    En fait il ne se passe rien lorsque je demande l'execution du code. Y'a t il un moyen de debuger pour voir ou ca coin ?

    merci pour ton aide.

  10. #10
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Ou se situe ton problème ?
    - dans la récupération des données,
    - au niveau de la form de saisie des données,
    - dans la mise à jour du SGBD.


    Montre la partie de code qui "coince" (pas tout ton code ).
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2015
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    La connexion a la base semble ok, je dis bien semble...

    Les forms c'est ok aussi

    c'est dans le code pour récupérer les infos que j'ai du mal.

    J'explique pour ne pas brûler les étapes en récupérant tous les informations dont j'ai besoin, j'aimerai récupérer uniquement le NOM qui correspond au numéro de téléphone saisi. Et afficher cela sans une msgbox.

    Lorsque j'arriverai a faire cela, je passerai aux prochaines étapes.

    Donc concrètement j'ai ce code :

    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
     
    Public Class Form1
     
        Dim MyConnexion As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Steph\Desktop\Appli_Acces_et_VB6\VB6\RechercheTel\RechercheTel\RechercheTel.mdb")
     
        Private Sub bnt_recherche_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnt_recherche.Click
     
     
            'Dim MyConnexion As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Steph\Desktop\Appli_Acces_et_VB6\VB6\RechercheTel\RechercheTel\RechercheTel.mdb")
     
            Dim NumTel1 As String = txt_NumTel.Text
            Dim Requete As String = "SELECT nom FROM clients WHERE telephone = '" & NumTel1 & "'"
     
            Dim Cmd As New OleDbCommand(Requete, MyConnexion)
     
     
            Try
     
                MyConnexion.Open()
                Dim Reader As OleDbDataReader = Cmd.ExecuteReader()
     
                Cmd.Connection = MyConnexion
     
                While Reader.Read()
                    Console.WriteLine(Reader.GetString(0))
                End While
     
                Reader.Close()
                MyConnexion.Close()
     
            Catch ex As OleDbException
                Console.WriteLine("Error: " & ex.ToString())
                MsgBox("pas de correspondance")
     
            End Try
     
     
        End Sub
    End Class
    Le probleme c'est que comme je ne comprend pas une partie du code, je ne sais pas ou et comment mettre mon Msgbox

    Merci Graffito pour ton aide

  12. #12
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Remplacer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    While Reader.Read()
      Console.WriteLine(Reader.GetString(0))
    End While
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Nom As String = "" 
    If reader.HasRows then
      Nom=Reader.GetString(0)
    End If
    MessageBox.Show("NOM=" & Nom)
    // Si Nom différent de "", passer Nom comme paramètre à la procédure de saisie.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2015
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    Merci

    Alors voila c'est très bizarre

    Lorsque je saisie un mauvais numero j'ai un messagebox "NOM=" rien

    et lorsque je saisie un numéro de tel existant dans la base, j'ai une erreur sur la ligne Nom = Reader.Getstring(0)

    L'exeption InvalidOperationException n'a pas été gérée
    Aucune donnée n'existe pour la ligne/colonne

  14. #14
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    J'ai oublié le Read():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If reader.HasRows then
      reader.Read()
      Nom=reader.GetString(0)
    End If
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2015
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    Graffito merci beaucoup ca marche tres bien comme ca. je commence doucement a comprendre le principe.

    J'ai modifié mon code pour gérer les valeur qui n'existent pas, affichage d'un message d'erreur.
    J'ai aussi fais évoluer pour afficher mon resultat dans form2. Ca marche aussi En revanche, ce n'est pas très pro, pas très "dynamique" ma facon de faire.

    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
               If Reader.HasRows Then
                    Reader.Read()
                    Nom1 = Reader.GetString(0)
                    'ouverture de la form2 (formulaire reponse)
                    Form2.Show()
                    Form2.txt_nom.Text = Nom1
                Else
                    MessageBox.Show("Pas de correspondance")
                End If
    Ma form2 :
    Nom : Sans titre.png
Affichages : 187
Taille : 7,4 Ko

    Il faut déjà je pense modifier ma requete
    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Requete As String = "SELECT nom FROM clients WHERE telephone = '" & NumTel1 & "'"
    en
    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Requete As String = "SELECT * FROM clients WHERE telephone = '" & NumTel1 & "'"
    Par contre ensuite je ne vois pas

  16. #16
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Nom1=Reader.GetString(0)
    PrenomNom1 = Reader.GetString(1) // 1 étant l'index du champ Prénom dans la table
    et remplacer .Show() par .ShowDialog() et tester le retour de cette fonction (de type DialogResult) pour savoir si il ya eu Cancel ou Ok.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  17. #17
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2013
    Messages : 100
    Points : 110
    Points
    110
    Par défaut recupération des données
    si je comprend bien ton pb, il ya un moeyn simple de récupération des données par une requete avec paramètre d'un form à l'autre
    procédure:
    tu importe ta base de donnée pour avoir ton dataset,
    tu crée le form1 et tu dépose le textbox1 et un button1
    tu crée le form2, va dans ton dataset et tu glisses les champs pas à pas pour déposer dessus,tu ajoute ton button de mise à jour et ajoueter

    clique sur n'importe quel champs de ton form1 ex: num teléphone, cela affiche une petite fleche a l'angle droit en haut, cliques sur cette fleche et tu verra créé une requete. suit la procedure de création de requete, dans l'editeur de requete passe ton num de tel en parametre par un point d'int (?) et execute, cela crée automatique ce parametre sur ton form2.
    sur form2 sur chargement(load) saisir ce code

    me.nomtabletableadapter.fillby(me.datasetbasededonnée.nomtable,form1.textbox1.text)
    ce code se trouve deja sur fill à partir de la requete que tu vient de créer, tu peux copier et coller sur la zone d'ouverture du formulaire et remplacer la fin du code par form1.textbox1.text
    sur mise a jour tu tape ceci
    me.nomtabletableadapter.update(me.databasenombd)

    c'est tout pour récuperer les info dans ta table à partir du num de tel dans textbox1 sur form1

Discussions similaires

  1. Extraire données Word ( selon styles) vers Excel
    Par Sernoss dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/04/2014, 14h59
  2. Extraire des données selon une date et n°identique
    Par Aurianelm dans le forum SAS Base
    Réponses: 4
    Dernier message: 23/09/2013, 16h28
  3. [XL-2010] Extraire des données selon des paramètres
    Par tomAH74 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/07/2013, 13h42
  4. [XL-2007] extraire des données selon leur nature et les réintegrer classees
    Par tchock_nenette dans le forum Excel
    Réponses: 9
    Dernier message: 08/04/2012, 14h06
  5. [AC-97] requete group by et affichage de données selon un critère
    Par gilles.lacroix dans le forum Requêtes et SQL.
    Réponses: 18
    Dernier message: 26/06/2009, 12h29

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