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 :

Effectuer une recherche et afficher l'enregistrement souhaité dans un formulaire [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
    Inscrit en
    Juillet 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 40
    Par défaut Effectuer une recherche et afficher l'enregistrement souhaité dans un formulaire
    Bonsoir a tous,

    Ma petite application (a base d'un formulaire d'enregistrement et d'un formulaire de lecture) affiche un certain nombre de données.
    Ces données sont enregistrées dans une base de donnée Access.

    J'arrive à enregistrer, lire, me déplacer dans mes enregistrements.
    Maintenant, je souhaite à partir d'une form effectuer une recherche dans ma BD et afficher le résultat dans le formulaire de lecture.

    Pour le dire simplement, je souhaite que mon formulaire de lecture se positionne sur l'enregistrement que je recherche. La valeur cherchée sera noté dans un textbox du formulaire de recherche.

    Je n'arrive pas à trouver le moyen de réaliser cette opération (je connais très mal les requetes SQL)
    Si quelqu'un pouvait me donner le début d'une piste...

    En vous remerciant pour votre aide.
    Cordialement.

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 978
    Par défaut
    Voici le principe de base, pour lire un base Access avec une requête SQL.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Using connection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccessFile.accdb;Persist Security Info=False;")
        Using command = New OleDbCommand("SELECT A, B, C FROM Table WHERE X=?", connection)
            command.Parameters.AddWithValue("X", "Search")
            connection.Open()
            Dim reader = command.ExecuteReader()
            While reader.Read()
                Console.WriteLine(reader.GetString(0))
                Console.WriteLine(reader.GetInt32(1))
                Console.WriteLine(reader.GetDateTime(2))
            End While
        End Using
    End Using
    Si tu ne connais pas le SQL, je te suggère d'ouvrir des tutoriels.
    Te former est quelque chose que personne ne pourra faire à ta place.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 40
    Par défaut Effectuer une recherche et afficher l'enregistrement souhaité dans un formulaire
    Bonjour,
    Malgré les conseil de Popo, je n'arrive pas à avancer sur mon petit projet.
    Pour rappel : Une fenêtre contient un textbox dans lequel on écrit le nom a rechercher et un bouton "recherche " qui doit ouvrir un formulaire et afficher l'ensemble des informations contenu dans la BD Access.

    Voici le code utilisé, mail il me renvoi une erreur.
    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
        Private Sub Btn_Recherche_Click(sender As Object, e As EventArgs) Handles Btn_Recherche.Click
     
            Dim recherche As New OleDbCommand
            Dim Rois As New OleDbConnection
            Rois.Open()
     
            Rois.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\Rois.accdb"
            recherche.CommandText = "select * from TableRois where Nom = '" & TxtBox_Nom.Text & "'"
            recherche.Connection = Rois
            Dim nomtrech As OleDbDataReader = recherche.ExecuteReader
            If nomrech.Read = True Then
                RoisLectureForm.Show()
     
            End If
     
     
        End Sub
    Si quelqu'un pouvait me donnée des pistes ...
    Bien cordialement.

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 978
    Par défaut
    Citation Envoyé par Christian8021 Voir le message
    Voici le code utilisé, mail il me renvoi une erreur
    .
    La moindre des choses aurait été de fournir cette erreur.

    Bon, ici, c'est flagrant mais penses-y la prochaine fois. Tu ouvres la connexion avant de lui fournir la chaîne de connexion.

    Je t'ai donné un code fonctionnel et sécurisé où il suffisait de changer la requête et le chemin vers la base. C'est si compliqué de faire un copier coller ?

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 40
    Par défaut Effectuer une recherche et afficher l'enregistrement souhaité dans un formulaire
    Bonjour Popo,
    Effectivement, j'ai été un peu trop rapide pour poster le message. J'ai procédé à un copier-coller et remplacé par mes éléments.
    Voici le code utilisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            Using connection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\Rois.accdb;Persist Security Info=False;")
                Using command = New OleDbCommand("SELECT * FROM Table WHERE Nom='" & TxtBox_Nom.Text & "'", connection)
                    command.Parameters.AddWithValue("Nom", "Search")
                    connection.Open()
                    Dim reader = command.ExecuteReader()
                    While reader.Read()
                        Console.WriteLine(reader.GetString(0))
                        Console.WriteLine(reader.GetInt32(1))
                        Console.WriteLine(reader.GetDateTime(2))
                    End While
                End Using
            End Using
    Cela me renvoi une erreur de type :
    'Une exception non gérée du type 'System.Data.OleDb.OleDbException' s'est produite dans System.Data.dll
    Informations supplémentaires : Syntax error in FROM clause.'

    Ensuite j'ai adapté tes remarques à mon propre code et cela fonctionne... (presque bien) puis que mon formulaire de lecture s'affiche.
    Néanmoins, c'est le premier enregistrement qui s'affiche et non l'enregistrement demandé dans le textbox_Nom.text.

    Je pense zapper quelque chose ou une erreur que je n'arrive pas a voir, dans le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            Dim recherche As New OleDbCommand
            Dim Rois As New OleDbConnection
            Rois.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\Rois.accdb"
            Rois.Open()
            recherche.CommandText = "select * from TableRois where Nom = '" & TxtBox_Nom.Text & "'"
            recherche.Connection = Rois
            Dim nomrech As OleDbDataReader = recherche.ExecuteReader
            If nomrech.Read = True Then
                RoisLectureForm.Show()
            End If
        End Sub
    Puis-je encore te demander conseil?

    Cordialement

  6. #6
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 978
    Par défaut
    Le premier code que tu montres, est celui que je t'ai fourni et que tu as modifié.
    Et les modifications que tu as apportés montrent que tu n'a pas pris la peine de le décortiquer, et encore moins pris le temps de te documenter un minimum.

    Le moins grave est l'étoile que tu as placé à la place de la liste des colonnes.
    Tu ramènes des informations dont tu n'as pas forcément besoin, sans parler du fait que tu ne maîtrise pas l'ordre dans lequel tes colonnes apparaissent.

    Ensuite, tu as supprimé le paramètre de la requête en faisant une concaténation (ligne 2).
    Et du coup, la prise en compte de ce paramètre (ligne 3) ne sert plus à rien.
    Tu as donc enlevé la sécurité contre l'injection SQL.

    Enfin, tu n'a pas pris la peine de modifier le nom de la table.
    D'où l'erreur de syntaxe sur la clause FROM.

    Le second code souffre également de la faille de sécurité sur l'injection SQL.
    Comme cela est fait je peux supprimer ta table en tapant ceci dans TxtBox_Nom :
    ' or 1=1; drop table tablerois; SELECT * FROM MSysObjects where name='.
    Je te suggère fortement de faire une requête paramétrée comme dans mon exemple.

    Sauf que ce code n'a aucun impact sur ce qui se passe dans ta fiche.
    S'il y a une ligne tu te contentes d'afficher la fiche.
    Mais on ne sais pas ce que tu fais dans cette fiche.

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

Discussions similaires

  1. Réponses: 25
    Dernier message: 20/11/2013, 14h43
  2. Réponses: 6
    Dernier message: 07/08/2013, 12h18
  3. liste deroulante pour effectuer une recherche
    Par pierrot67 dans le forum Bases de données
    Réponses: 2
    Dernier message: 29/04/2006, 09h27
  4. Effectuer une recherche avec jEdit
    Par lyon72 dans le forum Environnement de Développement Intégré (EDI)
    Réponses: 3
    Dernier message: 04/04/2006, 18h44
  5. une requete effectuant une recherche sur tous les champs
    Par raynor911 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/02/2006, 15h06

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