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 :

Ajouter un enregistrement de BdD avec un binding Navigator


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut Ajouter un enregistrement de BdD avec un binding Navigator
    Bonjour,

    sur un form, j'ai des textbox et un binding navigator
    En mode lecture (mode par défault à l'initialisation), les textforms sont bindés à une table d'une bdD au format SDF (MS SQL Server compact 3.5)

    Le BindingNavigator propose un bouton AddNewItem

    1ère question : lorsque je clique sur ce bouton alors que j'ai 6 enregistrements, on s'attendrait à voir le PositionItem se positionner à 7/7. En fait il affiche 1/7 (si j'étais sur l'enregistrement n°1 avant de cliquer). Est-ce normal sachant que forcer la propriété Position du CurrencyManager à 7 n'y change rien. Plus largement que faut-il coder dans l'Event AddNewItem.Click a minima ?

    En faisant appel à mon intuition, je me suis contenté de coder dans l'Event AddNewItem.Click ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub BN_AddNewItem_Click(ByVal sender As System.Object, ByVal e as System.EventArgs) Handles BN_AddNewItem.Click
    BN_Enregistrer.Visible= True 'Rend le bouton "enregistrer" visible
    EndSub
    Ensuite, je vais à l'enregistrement n°7, j'efface les données de mes champs, et je saisis mon nouvel enregistrement, puis je clique sur le bouton Enregistrer


    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
    Private Sub BN_Enregistrer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BN_Enregistrer.Click
            Dim Connexion As New SqlCeConnection(My.Settings.CaveConnectionString)
            Dim RéférenceActive As Integer
            Dim SQL_Ajout As String
     
            SQL_Ajout = "INSERT INTO Table (Champ1, Champ2, Champ3) " & _
                "VALUES ('" 
                TXT_Champ1.Text & "', '" & _
                TXT_Champ2.Text & "', '" & _
                TXT_Champ3.Text & "') "
     
            Connexion.Open()
            Dim commande As New SqlCeCommand(SQL_Ajout, Connexion)
            Try
                commande.ExecuteNonQuery()
     
            Catch ex As Exception
     
            Finally
                Connexion.Close()
            End Try
        End Sub
    2ème question : A quelques soucis de rafraichissements près, je vérifie que, en apparence dans mon application, mon enregistrement a bien été ajouté.
    Pourtant, si je fais "afficher les données de la table" sur la table de mon fichier sdf dans Explorateur de bases de données, je ne retrouve pas mon enregistrement. Où est-il ? Et surtout, si je fais "actualiser", mon enregistrement disparaît dans mon application.

    Merci d'avance pour votre aide.

  2. #2
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Pourquoi tu catch sans récupérer l'exception ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     Try
                commande.ExecuteNonQuery()
     
            Catch ex As Exception
               MsgBox(Ex.ToString)
            Finally
                Connexion.Close()
            End Try
    Car dans le cas où l'insertion plante, tu passes dans le catch, mais avec ton code, aucune erreur n'en ressort ... Donc impossible de savoir si ça s'est bien déroulé ou pas.

    Tu peux faire du pas-à-pas (F11 sous VS express) pour suivre le fonctionnement de BN_Enregistrer_Click et voir si tes TextBox ont la bonne valeur, si tu passes dans le catch, la requête construite etc

    Pour ta question sur le BindingNavigator je ne peux pas t'aider je ne m'y connais pas.

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    Mon code était simplifié dans mon exposé mais naturellement, j'ai bien une procédure qui examine les erreurs.
    Je te confirme que le pas à pas n'a rien détecté d'anormal, pas d'entrée dans le catch.
    C'était prévisible puisque, comme je l'explique, mes affichages de BdD prennent bien en compte le nouvel enregistrement, même si je quitte l'appli et que je la relance, mais le SDF ne change pas. Je ne comprends pas comment l'ordinateur stocke durablement ce nouvel enregistrement alors que le SDF ne change pas, et perd la mémoire dès que je fais un "affichage contenu table" en cliquant sur le SDF lui-même.

  4. #4
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Hum difficile à dire comme ca, il me faudrait l'ensemble de ton application.

    Moi dans la mienne j'ai en variable globale à ma form :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private BindingSource m_filmTypeBindingSource = new BindingSource();
    ensuite une fonction d'initialisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    m_filmTypeBindingSource.DataSource = VarGlobal.GetInstance().oFilms.Source;
    m_filmTypeBindingSource.Sort = "Titre";
     
    // Evenement d'ajout
    m_filmTypeBindingSource.AddingNew += new AddingNewEventHandler(m_filmTypeBindingSource_AddingNew);
     
    // Evenement de changement de position
    m_filmTypeBindingSource.PositionChanged += new EventHandler(m_filmTypeBindingSource_PositionChanged);
     
    // Initialisatin de la barre de nagigation
    bnFilm.BindingSource = m_filmTypeBindingSource;
    où bnFilm est un bindingNavigator

    Donc dans l'événement de l'ajout d'un nouvel enregistrement je fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     // bouton pour ajouter un nouveau film
    private void tsbAdd_Click(object sender, EventArgs e)
    {
       m_filmTypeBindingSource.AddNew();
    }
    et dans mon bouton de validation j'ai un code du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    m_filmTypeBindingSource.EndEdit();
     
    VarGlobal.GetInstance().oFilms.Update();
    L'update ici faisant appel à la fonction Update de la datatable correspondante à mes films (je travaille avec les DataAdapter et Dataset).

    C'est peut-être pas très clair mais j’espère avoir réussi à t'aider, tient moi au courant si tu as encore des soucis
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  5. #5
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    Je suppose que tu réponds à ma question 1 ?

    Je ne comprends pas tout parce que tu utilises des instructions que je ne maîtrise pas encore.
    Cela dit, je te confirme que, naturellement, j'ai un bindingsource en datasource de mon binding navigator.

    En revanche, je suis surpris de cette instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     // bouton pour ajouter un nouveau film
    private void tsbAdd_Click(object sender, EventArgs e)
    {
       m_filmTypeBindingSource.AddNew();
    }
    En effet, il est dit dans l'aide du binding navigator.AddnewItem que le click sur ce bouton engendre automatiquement l'instruction BindingSource.addNew.

    Dès lors, ton code me semble redondant.

    Enfin, qu'est-ce que VarGlobal ?

    Est-ce que la méthode Update appliquée à une datatable met à jour la base de données à la source ? Je croyais que non et qu'on ne pouvait se faire l'économie d'une clause SQL de type "UPDATE..." ?



    Pour le reste, je vais essayer de comprendre les instructions que tu utilises.

  6. #6
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Pour le code que je t'ai donné ici, il s'agit d'un programme développé en 2008, il est tout à fait possible qu'il y ai eu des améliorations depuis (j'ai pas eu le temps de relire la doc du msdn avant de te répondre).

    Pour VarGlobal, c'est une classe à moi qui est un singleton (permet de créer des variables globales à toute l'application donc dans ton cas tu dois surtout te préoccuper de la logique).

    Justement c'est effectivement l'Update qui met à jour la base de données.

    En effet tu dois normalement avoir un DataAdapter correctement initialisé donc avec une clause SELECT,INSERT, UPDATE et DELETE.
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/03/2011, 19h50
  2. Ajouter des enregistrements dans BDD sans Access installé
    Par bibilolo2 dans le forum Général VBA
    Réponses: 2
    Dernier message: 11/06/2009, 12h27
  3. Enregistrement dans BDD avec boucle: Error!
    Par tryks dans le forum Langage
    Réponses: 8
    Dernier message: 24/05/2009, 17h32
  4. Probleme ajout d'enregistrement dans bdd Access
    Par freerider74 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 19/11/2008, 10h53
  5. enregistrer les données avec le binding navigateur
    Par adel.87 dans le forum Débuter
    Réponses: 11
    Dernier message: 08/10/2008, 16h15

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