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 :

MAJ BD Access à partir d'un Dataset


Sujet :

VB.NET

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut MAJ BD Access à partir d'un Dataset
    Bonjour,

    J'ai un problème de MAJ de BD Access à partir d'un Dataset.
    En effet, j'ai une Base "GESTION" avec une table "Eleves" créé par code avec la technique ADOX. La table "Eleves " comporte 3 champs (IDEleves en autoincrement, NOM et PRENOM).
    Je crée un datarow et l'ajoute au dataset. VB 2008 n'indique aucune erreur mais la table "Eleves" reste vide. Où est le problème ? Je suis débutant et ne trouve pas le problème depuis 3 jours...

    Voici le code que j'utilise :

    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
    Private Sub creationBDD1()
            ' Déclaration des variables
            Dim StrConn, StrSQL As String
            Dim MonDS As DataSet
            Dim MonDA As OleDb.OleDbDataAdapter
            Dim ElevesDataRow As DataRow
            Dim ElevesCB As OleDb.OleDbCommandBuilder
            Dim ElevesDT As DataTable
     
            StrConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
                       My.Forms.Importer.NouveauFileDialog.FileName & ";"
            StrSQL = "SELECT * FROM Eleves"
            MonDA = New OleDb.OleDbDataAdapter(StrSQL, StrConn)
            MonDS = New DataSet("Eleves")
            MonDA.Fill(MonDS)
     
            ElevesDataRow = MonDS.Tables.Item(0).NewRow
            ElevesDataRow("Nom") = "Mon nom à moi"
            ElevesDataRow("Prenom") = "Mon premier prénom"
            MonDS.Tables.Item(0).Rows.Add(ElevesDataRow)
     
            'Pour modifier les valeurs changées dans le DataAdapter
            ElevesCB = New OleDb.OleDbCommandBuilder(MonDA)
     
            'Mise à jour
            MonDS.AcceptChanges()
            MonDA.Update(MonDS)
     
            'On vide le DataSet et on le 'recharge' de nouveau.
            MonDS.Clear()
            MonDA.Fill(MonDS, "Eleves")
            ElevesDT = MonDS.Tables("Eleves")
        End Sub
    Je dois précisé que la table ELEVES de la base GESTION est totalement vide. Pas d'enregistrement puisqu'elle à été créée par code.
    Merci pour votre aide.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    948
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 948
    Points : 1 111
    Points
    1 111
    Par défaut
    Pour mettre à jour la table eleve il faut faire une commande insert :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    insert into Eleves   (NOM,
                               PRENOM)
    values                 ('Mon nom à moi',
                               'Mon premier prénom')

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Précisions suite
    En fait, je dois intégrer plus d'un millier d'élèves dans la table. C'est pourquoi je voulais, dans un souci d'efficacité, éviter d'utiliser une commande SQL du type INSERT et privilégier un UPDATE de la base via DataTableAdapter. Suis-je sur la bonne voie ?
    Par avance Merci

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 291
    Points : 390
    Points
    390
    Par défaut
    Bonjour,

    Pour ma part je n'utilise pas de DataTableAdapter. Mais comme vous je crée une base par le code. Ensuite j'ajoute dans mon projet des objets qui font le lien avec ma base. Dans votre cas je créerai une classe Eleve avec au moins trois propriétés (IDEleve, Nom, Prénom) et trois méthodes : Ajoute, Modifie, Supprime (INSERT, UPDATE, DELETE ). Ceci vous permettra plus de souplesse et c'est beaucoup plus "objet". Car vous pourrez par la suite ajouter des méthodes comme
    eleve.affiche
    eleve.cherche(nom as string) etc ...

    A+

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    948
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 948
    Points : 1 111
    Points
    1 111
    Par défaut
    En fait, je dois intégrer plus d'un millier d'élèves dans la table. C'est pourquoi je voulais, dans un souci d'efficacité, éviter d'utiliser une commande SQL du type INSERT et privilégier un UPDATE de la base via DataTableAdapter.
    Je n'y connais pas grand chose en DataTableAdapter, mais je ne suis pas certain que ce soit plus efficace, étant donné que tu ne vois pas comment il met à jour la table tu supposes qu'il le fera "d'un coup" là ou les requetes le feraient en plusieurs fois. De plus rien en t'empèche d'executer l'ensemble de tes requetes en une seule commande SQL si tu tiens absolument à avoir des performances.

    De toute facon, la création de la base, elle se fera une fois et c'est tout, peu importe comment on la fait et si c'est optimisé ou pas, surtout que quelques milliers de lignes ce n'est pas grand chose.

    Ceci étant dit, les conseils de monsieur Geo2A semblent tout à fait pertinents, une bonne architecture c'est la base d'un programme clair et lisible, à mon avis c'est une voie à suivre pour les traitements unitaires dans la base.

Discussions similaires

  1. probleme MAJ .mdb a partir dataset
    Par waspy59 dans le forum C#
    Réponses: 25
    Dernier message: 23/03/2011, 18h59
  2. MAJ base ACCESS à partir d'un tableur excel
    Par balooclem dans le forum VBA Access
    Réponses: 5
    Dernier message: 20/07/2010, 18h53
  3. MAJ Table SQL à partir d'un DataSet
    Par Loubna.B dans le forum C#
    Réponses: 2
    Dernier message: 04/11/2009, 12h44
  4. Réponses: 2
    Dernier message: 22/03/2007, 18h47
  5. [ADO.NET] MAJ BDD à partir d'un DataSet d'un DataGrid
    Par bart64 dans le forum Accès aux données
    Réponses: 15
    Dernier message: 20/12/2005, 18h16

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