1. #1
    Membre actif Avatar de BRUNO71
    Homme Profil pro
    Conseiller technique ELec
    Inscrit en
    janvier 2007
    Messages
    418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Conseiller technique ELec
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 418
    Points : 250
    Points
    250

    Par défaut DataGridView, BindingNavigator et base de données

    Bonjour à vous,

    Je recherche de l'aide pour avancer dans mon projet, voilà :

    Visual studio en vb.net avec une base de données (.mdf) local....

    Un formulaire dans lequel j'ai installé un DataGridVew et un BindingNavigator...

    J'ai insérer des données et j'arrive à visualiser, enregistrer, supprimer des données avec le BindingNavigator..

    En complément du DataGridVew j'ai installé 12 textbox sur le Form , qui eux affichent également les données en fonction du DataGridVew et du BindingNavigator.

    Je souhaiterais avoir SVP une piste pour prendre en compte le changement des données depuis les textbox et non du DataGridVew qui lui servira uniquement de visu.....

    Je n'arrive pas à trouver le moyen de remplir ma BDD avec 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
    40
    41
    42
    43
    44
    45
    46
    47
     
     
    Imports System
    Imports System.Data
    Imports System.Data.OleDb
    Imports System.Data.SqlClient
     
     
    Public Class Page_BDD_essai
     
        Dim cn As New SqlConnection("Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|Datadirectory|\BDD_essai.mdf;Integrated Security=True")
        Dim cmd As New SqlCommand
        Dim dr As SqlDataReader
     
        Private Sub Page_BDD_essai_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     
            cmd.Connection = cn
            Me.UtilisateursTableAdapter.Fill(Me.BDD_essai_DataSet.Utilisateurs)
     
        End Sub
     
        Private Sub Cmd_Ajouter_Click(sender As Object, e As EventArgs) Handles Cmd_Ajouter.Click
     
                cn.Open()
                cmd.CommandText = "insert into Utilisateurs (code, Base, Interlocuteur, Tel, Mail, Fax, DR_1, DR_2, Adresse1, Adresse2, Mail, TEL) values ('" & Text_code.Text & "','" & Text_b.Text & "','" & Text_nom.Text & "','" & Text_mail.Text & "','" & Text_Tel.Text & "','" & Text_Fax.Text & "','" & Text_DR_1.Text & "','" & Text_DR_2.Text & "','" & Text_Adress1.Text & "','" & Text_Adress2.Text & "','" & Text_Mail.Text & "','" & Text_Tel.Text & "')"
     
     Update()
                cn.Close()
     
                Text_code.Text = ""
                Text_B.Text = ""
                Text_nom.Text = ""
                Text_mail.Text = ""
                Text_Tel.Text = ""
                Text_Fax.Text = ""
                Text_DR_1.Text = ""
                Text_DR_2.Text = ""
                Text_Adress1.Text = ""
                Text_Adress2.Text = ""
                Text_Mail.Text = ""
                Text_Tel.Text = ""
     
     
        End Sub
     
     
    End Class
    J'ai bidouillé ce code en cherchant sur internet, je n'ai aucun message d'erreur mais rien ne ce passe....

    Peut-on trouver la source du BindingNavigator, car avec lui on peut insérer, supprimer et modifier la base de données ?

    Voilà, si quelqu'un à une idée et bien par avance,

    Merci.

  2. #2
    Membre actif Avatar de BRUNO71
    Homme Profil pro
    Conseiller technique ELec
    Inscrit en
    janvier 2007
    Messages
    418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Conseiller technique ELec
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 418
    Points : 250
    Points
    250

    Par défaut

    Bonjour,
    Je reviens avec ce post, car je n'arrive plus à enregistrer les données...
    En utilisant DataSet, BindingSource, TableAdaptater, TableAdaptaterManager et BindingNavigator.
    Si j'enregistre directement dans la table elle garde en mémoire les données, alors qu'avec le BindingNavigator je peux ajouter puis enregistrer avec la disquette.
    J'ai bien mon message (Enregistrement de vos données avec succès...)....
    Et lorsque j'ouvre ma BDD il n'y a rien...sauf les données enregistrer avant directement sur la table....
    Voici le 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
     
    Imports System
    Imports System.Data.SqlClient
    Imports System.IO
     
     
     
    Public Class Page_BDD_Essai
     
     
        Private Sub Page_BDD_essai_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     
            Me.UtilisateursTableAdapter.Fill(Me.BDD_essaiDataSet.Utilisateurs)
     
        End Sub
     
        Private Sub UtilisateursBindingNavigatorSaveItem_Click(sender As Object, e As EventArgs) Handles UtilisateursBindingNavigatorSaveItem.Click
     
            Try
                Me.Validate()
                Me.UtilisateursBindingSource.EndEdit()
                Me.TableAdapterManager.UpdateAll(Me.BDD_essaiDataSet)
     
                MsgBox("Enregistrement de vos données avec succès...")
     
            Catch ex As Exception
                MsgBox("Impossible d'enregistrer vos données...")
            End Try
        End Sub
     
     
    End Class
    Je bloque sur ce sujet depuis des heures...même en regardant les exemples des uns et des autres je suis perdu....
    Merci à vous,

  3. #3
    Membre expert
    Inscrit en
    avril 2008
    Messages
    1 967
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : avril 2008
    Messages : 1 967
    Points : 3 379
    Points
    3 379

    Par défaut

    Bonjour

    Voici un exemple code auto-explicatif("self-explanatory" ) qui décrit pas-à-pas la procédure de codage ....

    code .vb exemple qui répond au souci :
    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
     
     
    Imports System.Data.SqlClient
    '---------------------------------------------------------------
    'LA TABLE en base BD  TestTable comporte 3 colonnes: ID,AGE,NOM
    'TestTable doit avoir au moins une colonne clé : par exemple ID
    ''---------------------------------------------------------------
    Public Class Form4
        ''---------------------------------------------------------------
        'les variables MyCon, da ,ds  doivent etre declatrees en portee du class Form
        ''---------------------------------------------------------------
        Private MyCon As SqlConnection = Nothing
        Private da As SqlDataAdapter = Nothing
        Private ds As DataSet = Nothing
        ''---------------------------------------------------------------
        ' la variable  conString n'est pas concernée par l'exigence précédente 
        ''---------------------------------------------------------------
          Private conString = "chemin en bd"
        Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            ''---------------------------------------------------------------
            'Pour ajouter un nouvel enregistrement clicquez sur le bouton Add du  BindingNavigator1
            'et renseigner les champs des TextBoxes
            'Pour supprimer un enregistrement clicquez sur le bouton Delete du  BindingNavigator1
            ''---------------------------------------------------------------
            DataGridView1.ReadOnly = True 'La saisie à partir du DGV nest pas autorisée
     
     
            MyCon = New SqlConnection(conString)
            da = New SqlDataAdapter("SELECT * FROM TestTable", MyCon)
            Dim CommandeBuilder As SqlCommandBuilder = New SqlCommandBuilder(da)
            ds = New DataSet
            MyCon.Open()
            da.Fill(ds, "TestTable")
            RefreshDGV()
     
        End Sub
        Private Sub RefreshDGV()
            BindingSource1.DataSource = ds
            BindingSource1.DataMember = ds.Tables(0).TableName
     
            BindingNavigator1.BindingSource = BindingSource1
            DataGridView1.DataSource = BindingSource1
     
            txtID.DataBindings.Add("Text", BindingSource1, "ID", True, DataSourceUpdateMode.OnPropertyChanged)
            txtNOM.DataBindings.Add("Text", BindingSource1, "AGE", True, DataSourceUpdateMode.OnPropertyChanged)
            txtAGE.DataBindings.Add("Text", BindingSource1, "NOM", True, DataSourceUpdateMode.OnPropertyChanged)
        End Sub
        ''---------------------------------------------------------------
        'Maj table en Base BD
        ''---------------------------------------------------------------
        Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click
            If da IsNot Nothing Then
                da.Update(ds, "TestTable")
                BindingSource1.ResumeBinding()
     
            End If
        End Sub
    End Class
    Il est fortement conseillé de suivre les tutos du forum sur les Controls WinForms suscités et les bd (voir aussi la FAQ)....
    bon code..

  4. #4
    Membre actif Avatar de BRUNO71
    Homme Profil pro
    Conseiller technique ELec
    Inscrit en
    janvier 2007
    Messages
    418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Conseiller technique ELec
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 418
    Points : 250
    Points
    250

    Par défaut

    Bonjour MABROUKI,

    Merci..., je joins la création de mon exemple, basé sur ton code...je crains que je n'ai pas compris la création d'une base de données...enfin je pense !
    A quel moment je fais une erreur ?

    Le DataGridView1 enregistre les données...je ferme, je contrôle la table, et il n'y à rien !

    Dans ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    'il y a deux bindingSource (bindingSource et bindingSource1) ?
     
       BindingNavigator1.BindingSource = BindingSource1
            DataGridView1.DataSource = BindingSource1
    Merci pour tes explications..

    Cordialement,

    Bruno
    Fichiers attachés Fichiers attachés

  5. #5
    Membre expert
    Inscrit en
    avril 2008
    Messages
    1 967
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : avril 2008
    Messages : 1 967
    Points : 3 379
    Points
    3 379

    Par défaut

    bonjour


    'il y a deux bindingSource (bindingSource et bindingSource1
    Pour un (01) BindingSource (BindingSource1) tu en vois 2 !
    Biskra est une grande oasis dans une region de dunes de sable ,ou sévissait le trachome durant la colonisation
    Un Biskri à la vue défaillante fut préposé à l'observation du nouveau croissant lunaire du Ramadhan...
    Il annonça à grand cris le nouveau croissant !!!
    Un des habitants demande : montre le pour voir !!!
    Le Biskra leva la tète puis dis :il y en a 2 !!!
    Tu es le Biskri de l'histoire et je t'invite vivement pour la seconde fois à suivre les tutos du forum sur les Controls WinForms suscités et les bd (voir aussi la FAQ)....
    bon code...

  6. #6
    Membre actif Avatar de BRUNO71
    Homme Profil pro
    Conseiller technique ELec
    Inscrit en
    janvier 2007
    Messages
    418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Conseiller technique ELec
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 418
    Points : 250
    Points
    250

    Par défaut

    Bonjour MABROUKI,

    Autant pour moi, effectivement j'ai fait une erreur...
    Je pensais que l'erreur venait de là....d’où ma question, simple..à mon sens.

    Ceci dit, as-tu prie le temps de regarder le fichier joint, ça ne fonctionne pas ?

    Je recherche les infos...mais quand je n'arrive pas à trouver et à comprendre....et bien là..je demande de l'aide.

    Blague à part, aurais-tu une idée de pourquoi ça ne va pas ?

    Merci

  7. #7
    Membre expert
    Inscrit en
    avril 2008
    Messages
    1 967
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : avril 2008
    Messages : 1 967
    Points : 3 379
    Points
    3 379

    Par défaut

    rebonjour

    Je ne peux faire le test sur ton fichier mdf version SQL 2016 ,chez moi c'est SQL 2014 qui est installé...

    Dans ta chaine de connection tu as implicitement "Pooling=True"(ADO.NET par defaut regroupe les connections dans un seul "pool" )
    Une connection avec "Pooling = True " si elle n'est pas fermée ,ne peut etre reutilisée et Adapter.Update() echoue car elle fermée ...

    Dans mon exemple ma chaine de connection avait "Pooling=False".....

    Tu as donc le choix entre ces 2 codes :
    1/ mettre Pooling=True et modifier le code déjà soumis en ajoutant un "Connection.Close" à l'ouverture :
    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
     
    'Pooling =True
    Private conString = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;;Pooling=True"
     
     ''---------------------------------------------------------------
            'Pour ajouter un nouvel enregistrement clicquez sur le bouton Add du  BindingNavigator1
            'et renseigner les champs des TextBoxes
            'Pour supprimer un enregistrement clicquez sur le bouton Delete du  BindingNavigator1
            ''---------------------------------------------------------------
            DataGridView1.ReadOnly = True 'La saisie à partir du DGV nest pas autorisée
     
     
            MyCon = New SqlConnection(conString)
            da = New SqlDataAdapter("SELECT * FROM TestTable", MyCon)
            Dim CommandeBuilder As SqlCommandBuilder = New SqlCommandBuilder(da)
            ds = New DataSet
            MyCon.Open()
            da.Fill(ds, "TestTable")
            RefreshDGV()
     
             'HAUT PARLEUR 
            MyCon.Close()
     
     
        End Sub
        Private Sub RefreshDGV()
            BindingSource1.DataSource = ds
            BindingSource1.DataMember = ds.Tables(0).TableName
     
            BindingNavigator1.BindingSource = BindingSource1
            DataGridView1.DataSource = BindingSource1
     
            txtID.DataBindings.Add("Text", BindingSource1, "ID", True, DataSourceUpdateMode.OnPropertyChanged)
            txtNOM.DataBindings.Add("Text", BindingSource1, "AGE", True, DataSourceUpdateMode.OnPropertyChanged)
            txtAGE.DataBindings.Add("Text", BindingSource1, "NOM", True, DataSourceUpdateMode.OnPropertyChanged)
        End Sub
    2/ mettre Pooling=False et utiliser le code déjà soumis tel quel :
    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
     
     
    'Pooling =False
    Private conString = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;;Pooling=False"
     
    'Pour ajouter un nouvel enregistrement clicquez sur le bouton Add du  BindingNavigator1
            'et renseigner les champs des TextBoxes
            'Pour supprimer un enregistrement clicquez sur le bouton Delete du  BindingNavigator1
            ''---------------------------------------------------------------
            DataGridView1.ReadOnly = True 'La saisie à partir du DGV nest pas autorisée
     
     
            MyCon = New SqlConnection(conString)
            da = New SqlDataAdapter("SELECT * FROM TestTable", MyCon)
            Dim CommandeBuilder As SqlCommandBuilder = New SqlCommandBuilder(da)
            ds = New DataSet
            MyCon.Open()
            da.Fill(ds, "TestTable")
            RefreshDGV()
     
     
            'HAUT PARLEUR :il y a une seule lune ,morbleu !!!
     
     
    End Sub
        Private Sub RefreshDGV()
            BindingSource1.DataSource = ds
            BindingSource1.DataMember = ds.Tables(0).TableName
     
            BindingNavigator1.BindingSource = BindingSource1
            DataGridView1.DataSource = BindingSource1
     
            txtID.DataBindings.Add("Text", BindingSource1, "ID", True, DataSourceUpdateMode.OnPropertyChanged)
            txtNOM.DataBindings.Add("Text", BindingSource1, "AGE", True, DataSourceUpdateMode.OnPropertyChanged)
            txtAGE.DataBindings.Add("Text", BindingSource1, "NOM", True, DataSourceUpdateMode.OnPropertyChanged)
        End Sub
    L'anecdote sur le croissant vise à montrer aux gens que l'observation du croissant pose un problème de prérogatives, car elle est du ressort de l'imam ,comme sonner les vêpres est une prérogative du curé qu'il faut veiller à respecter !!!

  8. #8
    Membre actif Avatar de BRUNO71
    Homme Profil pro
    Conseiller technique ELec
    Inscrit en
    janvier 2007
    Messages
    418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Conseiller technique ELec
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 418
    Points : 250
    Points
    250

    Par défaut

    Bonjour MABROUKI,

    Encore avec mon projet,je suis désolé.
    Réalisé avec visual studio 2015 community...

    Je n'y arrive pas...j'ai même essayé avec https://msdn.microsoft.com/fr-fr/library/ms171890.aspx
    Je ne garde pas les informations dans la BDD !

    Si quelqu'un peut m'expliquer mon erreur ou mes erreurs..

    Merci
    Fichiers attachés Fichiers attachés

  9. #9
    Membre actif Avatar de BRUNO71
    Homme Profil pro
    Conseiller technique ELec
    Inscrit en
    janvier 2007
    Messages
    418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Conseiller technique ELec
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 418
    Points : 250
    Points
    250

    Par défaut

    Bonjour MABROUKI,

    Merci à toi.....ça fonctionne....

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

Discussions similaires

  1. Problème Base de données et CRecordSet
    Par LE CHAKAL dans le forum MFC
    Réponses: 3
    Dernier message: 20/08/2002, 12h59
  2. connexion base de donné
    Par saidi dans le forum MFC
    Réponses: 3
    Dernier message: 07/08/2002, 23h22
  3. [Concept] Stabilité d'une base de donnée
    Par lassmust dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 03/07/2002, 17h16
  4. Bases de données
    Par dev dans le forum C++Builder
    Réponses: 4
    Dernier message: 01/07/2002, 23h55
  5. associer une base de données(access) a un dbgrid
    Par ange1708 dans le forum MFC
    Réponses: 3
    Dernier message: 11/06/2002, 13h18

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