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

Accès aux données Discussion :

[ADO.Net][VB.NET][DataAdapter] Comment effectuer l'Update ?


Sujet :

Accès aux données

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 20
    Points : 13
    Points
    13
    Par défaut [ADO.Net][VB.NET][DataAdapter] Comment effectuer l'Update ?
    Bonjour,

    J'ia un petit probleme j'aimerai mettre a jour une base de donnée Access,
    visible dans une DataGrid.
    Les informations a ajouter dans la bases viennent de 3 TextBox.

    J'utilise pour cela ObjetDataAdapter.Update avec le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    'Mise à jour
    Try
      ObjetDataAdapter.Update(ObjetDataSet, "INFOS")
    Catch
      MsgBox("ERROR")
    End Try
    Mais quand je clic sur le bouton qui contient le code
    il me retourne le message
    "Erreur de Syntaxe dans l'instruction INSERT INTO"
    Merci

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut Re: [VB.NET] Error ObjetDataAdapter.Update
    Citation Envoyé par Anubis666
    Mais quand je clic sur le bouton qui contient le code
    il me retourne le message
    "Erreur de Syntaxe dans l'instruction INSERT INTO"
    Verifies donc bien la presence d'une requête
    INSERT paramétrée correctement
    dans ton ObjetDataAdapter
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    OK mais je ne sais pas comment utiliser un INSERT :-(

    j'ustile pour le moment 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
    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
     
     
    'déclaration des variables
        Private cnx As OleDbConnection
        Private cmd As OleDbCommand
        Private dta As OleDbDataAdapter
        Private cmdb As OleDbCommandBuilder
        Private dts As New DataSet
        Private dtt As DataTable
        Private dtc As DataColumn
        Private dtr As DataRow
        Private rownum As Integer
        Private conn As String
        Private sql As String
     
     
    'ouverture de la connection(à partir du répertoire de l'application)
            conn = "provider = microsoft.jet.oledb.4.0 ; data source = " & Application.StartupPath & "\Journal.mdb;"
            cnx = New OleDbConnection
            cnx.ConnectionString = conn
            cnx.Open()
     
            'exécution de la commande(cmd),                      
            'du dataadapter (dta),                                
            'du dataset(dts),                                  
            'de la datatable (dtt)                                          
            'sql=>cmd=>dta                                                  
            'cnx=>cmd                                                        
            'dta=>dts=>dtt                                     
            sql = "select INFOS.* from INFOS"
            cmd = New OleDbCommand(Sql)
            dta = New OleDbDataAdapter(cmd)
            cmd.Connection() = cnx
     
            'chargement du DataSet à partir du DataAdapter                  
            dta.Fill(dts, "INFOS")
     
            'chargement de la DataTable à partir du DataSet                 
            dtt = dts.Tables("INFOS")
     
     
                'affichage des données dans le datagrid             
            DataGrid1.SetDataBinding(dts, "INFOS")
     
     
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            'crátion d'une nouvelle ligne avec les données des textbox
            dtr = dts.Tables("INFOS").NewRow
            dtr("Nombre de Fichiers") = "364664643"
     
     
            'ajout de la ligne dans le DataSet
            dts.Tables("INFOS").Rows.Add(dtr)
     
            'création et exécution du commandbuilder
            'pour mettre à jour le DataAdapter
            cmdb = New OleDbCommandBuilder(dta)
     
            Try
                'mise à jour des données du DataAdapter
                'à partir du commandbuilder
                dta.Update(dts, "INFOS")
            Catch
                MsgBox("sdfsf")
            End Try
     
            'on vide le dataset pour le recréer avec 
            'les nouvelles données 
            dts.Clear()
            dta.Fill(dts, "INFOS")
            dtt = dts.Tables("INFOS")
     
            'mise à jour de la datagrid
            DataGrid1.SetDataBinding(dts, "INFOS")
     
            'aller au début du fichier
            rownum = 0
     
        End Sub
    Et l'erreur se trouve a l'UPDATE !

    Au moment ou je clic sur sur Button2 une nouvelle ligne s'affiche
    dans le datagrid avec les nouvelles information.
    Mais il y a un petit point d'exclamation rouge sur la gauche qui s'affiche
    et la ligne et supprimé!... puis l'erreur se produit sur l'update.

    J'ai utilisé en plus l'exemple de programme qui marche
    et qui utilise la mème organisation du code...
    Donc je ne vois pas où est le probleme

    Merci

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Je pense tout de même que les initialisations de ton
    OleDbCommandBuilder et ton OleDbDataAdapter sont insuffisantes

    OleDbCommandBuilder
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    je vien de voir que dans le poste ou j'ai mi le code j'ai oublié de mettre cette parti désolé

    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
    'ouverture de la connection(à partir du répertoire de l'application)
            conn = "provider = microsoft.jet.oledb.4.0 ; data source = " & Application.StartupPath & "\Journal.mdb;"
            cnx = New OleDbConnection
            cnx.ConnectionString = conn
            cnx.Open()
     
            'exécution de la commande(cmd),                      
            'du dataadapter (dta),                                
            'du dataset(dts),                                  
            'de la datatable (dtt)                                          
            'sql=>cmd=>dta                                                  
            'cnx=>cmd                                                        
            'dta=>dts=>dtt                                     
            sql = "select INFOS.* from INFOS"
            cmd = New OleDbCommand(Sql)
            dta = New OleDbDataAdapter(cmd)
            cmd.Connection() = cnx
     
            'chargement du DataSet à partir du DataAdapter                  
            dta.Fill(dts, "INFOS")
     
            'chargement de la DataTable à partir du DataSet                 
            dtt = dts.Tables("INFOS")
     
     
                'affichage des données dans le datagrid             
            DataGrid1.SetDataBinding(dts, "INFOS")

  6. #6
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Ouais un peu fouillis et dans le désordre tout çà
    Citation Envoyé par MSDN
    vous pouvez créer un objet OleDbCommandBuilder pour générer automatiquement des instructions SQL pour des mises à jour de table simple si vous définissez la propriété SelectCommand de OleDbDataAdapter. Ensuite, les instructions SQL supplémentaires que vous ne définissez pas sont générées par OleDbCommandBuilder.
    En conséquence pour peupler le groupe de données:
    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
     
    Private Sub InitializeData()
      Me.conn = "provider = microsoft.jet.oledb.4.0 ; data source =" & _
                    Application.StartupPath & "\Journal.mdb;"
      Me.sql = "SELECT * FROM INFOS"
     
      Try
         'Initialiser cnx
         Me.cnx = New OleDbConnection(conn) 
         'Initialiser dta
         Me.dta = New OleDbDataAdapter(Me.sql, Me.cnx)
         'Mise à jour automatique des autres requêtes de dta
         Me.cmdb = New OleDbCommandBuilder(Me.dta)
         'Remplissage de dts
         Me.dta.Fill(Me.dts, "INFOS") 
      Catch ex As Exception
         MessageBox.Show(ex.ToString())
      End Try
     
    End Sub
    Ceci devrait normalement suffire à alimenter dts tout en ayant accès à la mise à jour des données côté BDD par dta

    De plus, cette façon de traiter l'eventuelle exception, te permettra de nous fournir des messages d'erreurs plus complets

    Maintenant, suite à un Me.dta.Update(...) tu n'as pas à effectuer normalement un rechargement de dts puisqu'il est déjà détenteur des modifs, à moins qu'il y ait une raison particulière à ton architecture ?
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    oui oui merci j'ai trouvé ...

    en faite j'ai une autre question... J'ai un champ date/heure comment remplir les champ ? c'est pas comment autonumber qui le fait automatiquement a chaque création de ligne ?

  8. #8
    Membre éclairé Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Points : 774
    Points
    774
    Par défaut
    non mais par contre je sais qu'avec sql server il y a une function getdate() qui te permet de recuperer la date et l'heure locale ce qui te permet lors de tes insertions de savoir a quel moment tels ou tels info a ete inserees (si c'est bien la ton but) pour acces je ne sais pas .

    sinon pour tous les autres champs a artir du moment ou tu ne definis pas une valeur par default et bien soit tu es obliges de fournirs les infos soit tu les authorize a etre null et a ce moment la ils auront comme valeur null mais si tu fais la meme choses pour tous tes champs et que tu ne fournit rien etbien je vois plus trop l'interet d'un dB

  9. #9
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Oui voila c'est exactement ce que je voudrais faire... mais dans access il y a bien un champ dédié date/heur comme "numerique" ou "text" mais je sais pas lutiliser

  10. #10
    Membre éclairé Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Points : 774
    Points
    774
    Par défaut
    encore une fois tu as un champ dedie mais tu dois le remplir .

    je crois qu'il ya un truc que t'as pas trop compris dans une db tout ne se remplie pas automatiquement.

    example :

    t'as une TB de nom myTable qui a pour champ ID (autoIncrement),BirthDate(DateTime),Name(Text)(il me semble en access)

    et bien tu fais une petite appli qui utilise une commande insert de sql qui aura comme valeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    name = textboxName.Text;
    BirthDate=CalendarBirthDate.selectDate;
    il faut que tu comprenne que ces champs doivent etre fourni maitenant si la fonction getDate() n'existe pas dans access et bien tu peux tj du cote de ton code utiliser

  11. #11
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    oui c'est bon j'ai utilisé plutot le code VB pour enregistrer un date

    merci

  12. #12
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 27
    Points : 20
    Points
    20
    Par défaut Meme pbl
    Salut !
    J'ai exactement le meme probleme ... mais avec ce qui a ete mis, je n'ai pas trouve de solution ...
    Si vous pouvez m'aider ou m'envoyer une source plus fiable (celle que j'ai proviens de la meme personne aue Anubis)

    Merci d'avance

    Fab

  13. #13
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut Re: Meme pbl
    Citation Envoyé par Fab62_
    Salut !
    J'ai exactement le meme probleme ... mais avec ce qui a ete mis, je n'ai pas trouve de solution ...
    Si vous pouvez m'aider ou m'envoyer une source plus fiable (celle que j'ai proviens de la meme personne aue Anubis)
    Merci d'avance
    Fab
    oui mais apparemment ici ce souci est résolu, donc prends tout de même le temps d'expliciter ton cas de figure. J'enlève le résolu
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  14. #14
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    lol oki

    Donc je developpe d'avantage:

    J'ai avant de me lancer dans la programmation de mon application, cree ma base de donnees sous Access (2002) avec toutes mes tables vides.

    Ceci fait, j'ai attaqué (ss violence vu aue c'est la 1ere fois) la programmation en .Net.

    Arrivee au stade de la gestion de ma base, j'ai ete tout content de lire une donne que j'avais insere manuellement dans ma base.
    Au moment de passer a l'insertion d'une nouvelle ligne, j'ai repris en l'adaptant le code d'un tutoriel (celui utilise par Anubis).
    Mais voila, ici, ca coince au moment de l'UPDATE.

    Voici le code correspondant a l'insertion:



    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
            ObjetDataRow = ObjetDataSet.Tables("Users").NewRow
            ObjetDataRow("Firstname") = Me.txt_firstname.Text
            ObjetDataRow("Surname") = Me.txt_surname.Text
            ObjetDataRow("Login") = Me.txt_login.Text
            ObjetDataRow("Password") = Me.txt_password.Text
     
            ObjetDataSet.Tables("Users").Rows.Add(ObjetDataRow)
     
            'Pour modifier les valeurs changées dans le DataAdapter
            ObjetCommandBuilder = New OleDbCommandBuilder(ObjetDataAdapter)
     
            'Mise à jour
            ObjetDataAdapter.Update(ObjetDataSet, "Users")
     
            'On vide le DataSet et on le 'recharge' de nouveau.
            ObjetDataSet.Clear()
            ObjetDataAdapter.Fill(ObjetDataSet, "Users")
            ObjetDataTable = ObjetDataSet.Tables("Users")
    et l'erreur :
    An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in system.data.dll
    System.Data.OleDbException: Syntax error in INSERT INTO statement.
    at System.Data.Common.DbDataAdapter.Update(Datarow[]datarows, DataTableMapping table :mapping)
    at System.Common.DbDataAdapter.Update(DataSet dataSet, String srcTable)
    at Know.USer.btn_save_Click(Object senderm EbentArgs e) in 'adresse de l'application' line 345
    La connexion semble avoir ete correctement effectue et le dataset correctement charge vu que j'arrive a relire des donnes ....

    J'ai regarde MSDN mais soit j'ai mal applique ce qui a ete mis soit l'erreur est ailleurs ...
    Si vous avez besoin d'autres infos n'hesitez pas !

    Merci d'avance
    Fab

  15. #15
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    Bon alors, apres plusieurs recherches, je pense avoir trouver l'erreur ... un peu dingue a mon gout mais bon :

    Pour votre information, Access utilise des mots reserves qu'il me faut pas employe dans les tables tels que : password (mot que j'utilise en l'occurence pour un champ)

    Je ne sais pas si c'etait que ca mais bon ...

    Merci quand meme

    Fab

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

Discussions similaires

  1. Quel langage entre vb.net c#.net c++.net java ?
    Par heeedi dans le forum Débuter
    Réponses: 7
    Dernier message: 13/12/2008, 21h53
  2. Participez à la F.A.Q .NET ASP.NET Delphi.NET
    Par Jérôme Lambert dans le forum Contribuez
    Réponses: 0
    Dernier message: 05/12/2008, 00h00
  3. Participez à la F.A.Q .NET ASP.NET VB.NET
    Par Jérôme Lambert dans le forum Contribuez
    Réponses: 0
    Dernier message: 05/12/2008, 00h00
  4. [ADO.Net][VB.NET] Comment ajouter une colonne Integer à un DataTable ?
    Par graphicsxp dans le forum Accès aux données
    Réponses: 2
    Dernier message: 20/04/2005, 12h08

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