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 :

Comment afficher/modifier des données stockées dans une Bd


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Autodidacte
    Inscrit en
    Février 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Gabon

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Février 2017
    Messages : 14
    Points : 14
    Points
    14
    Par défaut Comment afficher/modifier des données stockées dans une Bd
    bonjour à tous
    j'ai besoin d'aide svp

    je cherche à récupérer les données de ma table MATIÈRE pour les afficher sur une form afin que l'utilisateur puisse modifier ou supprimer les données
    J'utilise visual studio 2010 et sql server 2008

    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
    44
    45
    46
    Imports System.Data
    Imports System.Data.SqlClient
    Public Class ActualiserFormMat
        Dim cn As New SqlConnection("Data Source=RUFLI-PC;Initial Catalog=SCHOOL;Integrated Security=True")
        Dim cmd As New SqlCommand
        Dim dr As SqlDataReader
     
        Private Sub ActualiserFormMat_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
     
            remplir_cmb()
     
     
     
        End Sub
        Sub remplir_cmb()
            cn.Open()
            cmd.CommandText = "SELECT ID_MAT FROM MATIERE"
            cmd.Connection = cn
            dr = cmd.ExecuteReader
            While dr.Read
                cmb_recherche.Items.Add(dr(0))
            End While
            cn.Close()
        End Sub
     
        Private Sub BT_recherche_Click(sender As System.Object, e As System.EventArgs) Handles BT_recherche.Click
            Try
                cn.Open()
                cmd.CommandText = "SELECT * FROM MATIERE WHERE ID_MAT=" & cmb_recherche.Text & ""
                cmd.Connection = cn
                dr = cmd.ExecuteReader
                dr.Read()
                txb_cod.Text = dr(0)
                Txb_lib.Text = dr(1)
                Val((txt_coef.Text) = dr(2))
     
                dr.Close()
     
     
     
            Catch ex As Exception
                MessageBox.Show(ex.Message.ToString)
            End Try
            cn.Close()
        End Sub
    End Class

  2. #2
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,

    Sans tester ton code, l'usage que tu fais du DataReader semble correct.
    Mais par rapport à ta question, je m'étonne que tu remplisses ta ComboBox avec les ID_MAT et que tu remplisses ensuite les TextBox avec les MATIERE correspondant aux ID_MAT de la Combo, c'est-à-dire tous, si je comprends bien. Mais alors pourquoi ne pas lire directement tous les champs : "SELECT * FROM MATIERE"

    Je reviens en modifiant mon message précédent car j'ai compris ta démarche avec les ID_MAT et ma phrase ci-dessus n'est pas correcte : Ta Combo sert au choix par l'utilisateur de l'ID_MAT dont il veut voir les autres infos apparaître dans les TextBox. Je n'ai pas compris de suite car un ID_MAT est ordinairement peu significatif et l'utilisateur ne sait alors pas ce qu'il choisit en désignant un Id.
    Quoiqu'il en soit, je te suggère tout de même de t'intéresser au DataAdapter et à l'exemple ci-dessous.


    En utilisant un DataAdapter, tu pourrais faire la lecture de tous les champs en une seule fois et distribuer "automatiquement" les données dans les composants qui doivent les recevoir, en réglant les DataSource, DataMember et/ou les DataBindings.
    Personnellement, je décompose les opérations en plusieurs fonctions (d'autant, que certaines servent plusieurs fois ...).
    Exemple (je travaille ici une DB NomComplet qui contient une table TProduit et je remplis un DataSet nommé MonStock) :
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
        Private Sub OuvreDB()
            NomDBComplet = ' à obtenir de n'importe quelle façon, OpenFileDialog par exmple
     
            ' La fameuse chaine de connexion ...
            ' C'est grâce à elle, et moyennant la modification de quelques déclarations, qu'il est possible de transformer ce programme
            ' en une application SGDB_polyvalente : Access, SQL Serveur, MySql, Oracle, ... . 
     
            'ChaineConnexion = "Data Source=" & NomDuServeurSQL & "; Initial Catalog=" & NomDBComplet & ";Integrated Security=True;"
            ChaineConnexion = "Data Source=" & NomDuServeurSQL & "; AttachDbFilename=" & NomDBComplet & ";Integrated Security=True"
     
            MaConnexion = OuvreConnexion(ChaineConnexion) ' Des codes, mêmes exploités une seule fois (dans ce programme) sont mis 
            ' sous procédure. 
            ' La principale raison est que dans une application un peu plus complexe, ils sont réutilisés plusieurs fois. Par ailleurs,
            ' l'isolation de ces codes permet de les ignorer (provisoirement) lorsqu'on élabore de nouvelles procédures et d'alléger leur code.
            ' OuvreDB() contient 6 lignes de codes, parfaitement compréhensibles. Si tous les codes des procédures appellées étaient reproduits
            ' ici, OuvreDB() contiendrait plus de 15 lignes de codes, bien moins lisibles.
     
            ChargeDonnees() ' ...
            AfficheDonnees() ' ...
     
        End Sub
     
        ' Avoir accès effectif aux données. Dans le mode connecté utilisé dans les mises à jour en temps réel, la connexion dit être ouverte,
        ' dans d'autres cas, il suffit qu'elle soit définie, un DataApter procéde lui-même ) l'ouverure effective.
        Private Function OuvreConnexion(ByVal ChaineConnexionComplete As String, Optional ByVal Ouvrir As Boolean = True) As SqlConnection
            Dim UneConnexion As New SqlConnection
            UneConnexion.ConnectionString = ChaineConnexionComplete
            If Ouvrir Then UneConnexion.Open() ' Ouverture effective non nécessaire pour l'utilisation d'un DataAdapter
            Return UneConnexion
        End Function
     
        ' Utiliser la connexion pour lire les données de la DB selon la requête (SQL) passée par paramètre et renvoyer une DataTable pour le DataSet en mémoire
        Private Function CreeUneTable(ByRef UneConnexion As SQLConnection, ByVal Selection As String) As DataTable
            Dim UneTable As New DataTable
            Dim UneConnexionTmp As New SQLDataAdapter(Selection, UneConnexion)
            UneConnexionTmp.FillSchema(UneTable, SchemaType.Source)
            UneConnexionTmp.Fill(UneTable)
            Return UneTable
        End Function
     
        ' La connexion établie à l'ouveryure de la DB est utilisée pour rechercher les tables pour le DataSet en mémoire
        Private Sub ChargeDonnees()
            ' Chargement des tables dans le DataSet
            MonStock.Tables.Add(CreeUneTable(MaConnexion, "SELECT * FROM TProduit"))
     
            ' MonStock.Tables.Add(CreeUneTable(MaConnexion, "SELECT * FROM ..............."))
            ' .............
        End Sub
     
        ' Il suffit ici de lier les composants visuels aux données qu'ils doivent afficher. La prgrammation "manuelle" de ces liaisons
        ' permet d'en rompre lorsque cela est souhaitable selon les nécessité du moment et de les reconstruire ensuite.
        ' Dans ce programme, AfficheDonnees définit les liaisons et LibereBindings() les rompt.
        Private Sub AfficheDonnees()
            ' Liaison du ListBox au DataSet par la propriété DataSource et désignation du champ à 
            ' présenter par la propriété DisplayMember.
            If MonStock.Tables("TProduit").Rows.Count < 1 Then      ' Pas la peine si pas d'enregistrement.
                Exit Sub
            End If
     
            ' Certains composants dispose d'un DataSource est ceux qui ne peuvent présenter qu'un seul champs d'nu enregistrement ont 
            ' un DataMember. C'est le cas d'une ListBox ou d'une ComboBox, ainsi qu'un DataGridView alors on a :
     
            LaComboBox.DataSource = MonStock.Tables("TProduit") ' par exemple
            LaComboBox.DataMember = "Id" ' par exemple
     
     
            LaListBox.DataSource = MonStock.Tables("TProduit") ' par exemple
            LaListBox.DataMember = "Article" ' par exemple
     
            ' Un DataGridView qui se "forge" et se remplit "tout seul"
            DGVStock.DataSource = MonStock.Tables("TProduit") ' Certains composants dispose d'un DataSource
     
            DGVStock.Columns("Id").ReadOnly = True              ' On ne touche pas manuellement aux Id
     
            ' Certains composants ne dispose pas de DataSource mais il possède une collection de Bindings dans laquelle
            ' on ajoute le nom de la propriété affectée, le DataSet qui produit les données, et le champ à affecter à la propriété
            ' Exemple : TArticle.DataBindings.Add("Text", MonStock.Tables("TProduit"), "Article")
            ' On affecte le champ "Aricle" des enregistrements de "TProduit" à la propriété "Text" de la Textbox "TArticle"
     
            TId.DataBindings.Add("Text", MonStock.Tables("TProduit"), "Id")  ' Certains composants ne dispose pas de DataSource
     
            TId.ReadOnly = True                                 ' On ne touche pas manuellement aux Id
            TArticle.DataBindings.Add("Text", MonStock.Tables("TProduit"), "Article")
    ' ................
     
        End Sub
    J'espère que ceci t'inspirera ...

  3. #3
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour

    Il suffit de se pourvoir d' un DataAdapter configure correctement avec les instructions :Select,Update, Insert ,Delele...
    Un tel adapter est disponible constamment et il maintient une connexion optimisé ...

    Voici un exemple extrait de la MSDN Library Help :
    1/ version SqlDataAdapter
    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
     
    Public Function CreateSqlDataAdapter(     ByVal connection As SqlConnection) As SqlDataAdapter
     
        Dim adapter As SqlDataAdapter = New SqlDataAdapter
        adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
     
        ' Create the commands.
        adapter.SelectCommand = New SqlCommand( _
            "SELECT CustomerID, CompanyName FROM CUSTOMERS", connection)
        adapter.InsertCommand = New SqlCommand( _
            "INSERT INTO Customers (CustomerID, CompanyName) " & _
             "VALUES (@CustomerID, @CompanyName)", connection)
        adapter.UpdateCommand = New SqlCommand( _
            "UPDATE Customers SET CustomerID = @CustomerID, CompanyName = " & _
            "@CompanyName WHERE CustomerID = @oldCustomerID", connection)
        adapter.DeleteCommand = New SqlCommand( _
            "DELETE FROM Customers WHERE CustomerID = @CustomerID", connection)
     
        ' Create the parameters.
        adapter.InsertCommand.Parameters.Add("@CustomerID", _
            SqlDbType.Char, 5, "CustomerID")
        adapter.InsertCommand.Parameters.Add("@CompanyName", _
            SqlDbType.VarChar, 40, "CompanyName")
     
        adapter.UpdateCommand.Parameters.Add("@CustomerID", _
            SqlDbType.Char, 5, "CustomerID")
        adapter.UpdateCommand.Parameters.Add("@CompanyName", _
            SqlDbType.VarChar, 40, "CompanyName")
        adapter.UpdateCommand.Parameters.Add("@oldCustomerID", _
            SqlDbType.Char, 5, "CustomerID").SourceVersion = _
            DataRowVersion.Original
     
        adapter.DeleteCommand.Parameters.Add("@CustomerID", _
            SqlDbType.Char, 5, "CustomerID").SourceVersion = _
            DataRowVersion.Original
     
        Return adapter
    End Function
    la version OleDbDataAdapter n'est pas difficile à ecrire...

    bon code...

  4. #4
    Membre à l'essai
    Homme Profil pro
    Autodidacte
    Inscrit en
    Février 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Gabon

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Février 2017
    Messages : 14
    Points : 14
    Points
    14
    Par défaut
    Merci infiniment j'ai pu y arriver
    merci merci

  5. #5
    Membre à l'essai
    Homme Profil pro
    Autodidacte
    Inscrit en
    Février 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Gabon

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Février 2017
    Messages : 14
    Points : 14
    Points
    14
    Par défaut comment remplir plusieurs combobox
    bonjour à tous

    j'ai encore une petite embrouille avec mon code vb
    euh j'aimerai remplir plusieurs combo-box avec deux tables différentes à savoir mes table SEMESTRE & MATIERE

    En effet,j'ai pu remplir mon premier combo box avec un dataAdapter chose qui marche à merveille mais lorsque je tente de remplir un deuxième il s'affiche un message erreur( System.Data.DataRowView) sur mon premier combox .Pouvez vous m'aider svp?

    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
    Imports System.Data.SqlClient
    Public Class Form2
     
     
       Private Sub Form2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
     
            s()
            m()
        End Sub
     
        Private Sub s()
     
            Dim connection As New SqlConnection("Data Source=RUFLI-PC;Initial Catalog=school;Integrated Security=True")
            Dim commande As New SqlCommand(" SELECT * FROM SEMESTRE ", connection)
            Dim adapter As New SqlDataAdapter(commande)
            Dim table As New DataTable()
            adapter.Fill(table)
            Cmb_semestre.DataSource = table
     
            Cmb_semestre.DisplayMember = "CODE_SEMESTRE"
            Cmb_semestre.ValueMember = "COEFFICIENT"
            Close()
     
     End Sub
     
       Private Sub m()
     
            Dim connection1 As New SqlConnection("Data Source=RUFLI-PC;Initial Catalog=school;Integrated Security=True")
            Dim commande1 As New SqlCommand(" SELECT * FROM MATIERE ", connection1)
            Dim adapter1 As New SqlDataAdapter(commande1)
            Dim table1 As New DataTable()
            adapter1.Fill(table1)
            Cmb_semestre.DataSource = table1
     
            Cmb_matiere.DisplayMember = "CODE_MATIERE"
            Cmb_matiere.ValueMember = "LIBELLE_MATIERE"
            Close()
       End Sub
     
    End Class

  6. #6
    Membre à l'essai
    Homme Profil pro
    Autodidacte
    Inscrit en
    Février 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Gabon

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Février 2017
    Messages : 14
    Points : 14
    Points
    14
    Par défaut Comment remplir plusieurs combobox
    bonjour à tous

    j'ai encore une petite embrouille avec mon code vb
    euh j'aimerai remplir plusieurs combo-box avec deux tables différentes à savoir mes table SEMESTRE & MATIERE

    En effet,j'ai pu remplir mon premier combo box avec un dataAdapter chose qui marche à merveille mais lorsque je tente de remplir un deuxième il s'affiche un message erreur( System.Data.DataRowView) sur mon premier combox .Pouvez vous m'aider svp?
    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
    Imports System.Data.SqlClient
    Public Class Form2
     
     
       Private Sub Form2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
     
            s()
            m()
        End Sub
     
        Private Sub s()
     
            Dim connection As New SqlConnection("Data Source=RUFLI-PC;Initial Catalog=school;Integrated Security=True")
            Dim commande As New SqlCommand(" SELECT * FROM SEMESTRE ", connection)
            Dim adapter As New SqlDataAdapter(commande)
            Dim table As New DataTable()
            adapter.Fill(table)
            Cmb_semestre.DataSource = table
     
            Cmb_semestre.DisplayMember = "CODE_SEMESTRE"
            Cmb_semestre.ValueMember = "COEFFICIENT"
            Close()
     
     End Sub
     
       Private Sub m()
     
            Dim connection1 As New SqlConnection("Data Source=RUFLI-PC;Initial Catalog=school;Integrated Security=True")
            Dim commande1 As New SqlCommand(" SELECT * FROM MATIERE ", connection1)
            Dim adapter1 As New SqlDataAdapter(commande1)
            Dim table1 As New DataTable()
            adapter1.Fill(table1)
            Cmb_semestre.DataSource = table1
     
            Cmb_matiere.DisplayMember = "CODE_MATIERE"
            Cmb_matiere.ValueMember = "LIBELLE_MATIERE"
            Close()
       End Sub
     
    End Class

  7. #7
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Ton code me semble correct (je ne l'ai pas testé) mais il y a quand même quelques problèmes.
    Tu t'en sortirais mieux en créant 2 procédures (mais pas comme s() et m()). Il en faudrait une pour charger toutes les DataTables et une pour l’affichage, c'est-à-dire pour faire toutes les liaisons DataSource et DisplayMember.
    Mais pour que cela fonctionne bien, il faudrait que tu gères un DataSet (c'est un conteneur de DataTable). Dans la procédure de chargement des données, tu crées un DataTable par requête SQL et, à chaque fois, tu ajoutes le DataTable au DataSet (dans mon message précédent du 15/11 : MonStock.Tables.Add( ...)).

    Ensuite, quand le DataSet est rempli, dans la procureure d'affichage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Cmb_semestre.DataSource = LeDataSet.Tables("SEMESTRE") 
    Cmb_semestre.DisplayMember = "CODE_SEMESTRE"
    Cmb_semestre.ValueMember = "COEFFICIENT"
    Cmb_semestre.DataSource = table1
    Cmb_matier.DataSource = LeDataSet.Tables("MATIERE") 
    Cmb_matiere.DisplayMember = "CODE_MATIERE"
    Cmb_matiere.ValueMember = "LIBELLE_MATIERE"
    '............... et tu peux continuer toutres les laisons que tu veux

  8. #8
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    J'ai répondu à ta question sous "Comment afficher/modifier des données stockées dans une Bd", vers 13h30'.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Autodidacte
    Inscrit en
    Février 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Gabon

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Février 2017
    Messages : 14
    Points : 14
    Points
    14
    Par défaut comment remplir plusieurs combobox
    Merci beaucoup prof

    j’étais justement entrain de vous écrire un message de remerciement
    bon j'ai pu obtenir le résultat souhaité quoi que je ne suis pas passé par les procédures mais j'ai suivi la démarche et ça a marcher
    vive le dataset!

    j'adore ce forum ;

Discussions similaires

  1. [XL-2010] Afficher des données cellules dans une textbox et pouvoir les modifier ensuite
    Par chiken samada dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 27/02/2015, 11h11
  2. Réponses: 11
    Dernier message: 11/07/2008, 14h58
  3. Réponses: 5
    Dernier message: 06/02/2008, 16h01
  4. Réponses: 3
    Dernier message: 28/05/2007, 13h11
  5. Réponses: 5
    Dernier message: 15/03/2007, 10h08

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