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 :

Probleme de mise à jour dataset avec champ multi-valués access (2007)


Sujet :

VB.NET

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    agent de maitrise
    Inscrit en
    Février 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : agent de maitrise
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 8
    Points : 1
    Points
    1
    Par défaut Probleme de mise à jour dataset avec champ multi-valués access (2007)
    Bonjour à tous

    Tout d'abord, merci d'excuser d'avance mes imprecisions ou mes erreurs dans l'ouverture de cette discussion (première sur ce site !)

    Je vous expose mon problème :

    J'ai une base de donnée access 2007 contenant plusieurs tables (pour en finalité me faire un petit logiciel de recettes de cuisine)
    J'interroge, je modifie et je met à jour cette base avec visualbasic 2010 express (dataset et dataadapter)

    Le souci est que la mise à jour de la base plante sur certaines tables possédant des champs multi-valués (champs texte acceptant plusieurs valeurs), ainsi que des champs "pièces jointes".

    La question est donc, pourquoi et comment faire sans être obligé de modifier toute ma base de donnés.

    Merci d'avance et bonne fin de week-end

  2. #2
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    On va avoir besoin de plus de détails pour pouvoir vous aiguiller.

    Le schéma de la DB, le code qui pose problème ainsi que le message d'erreur seraient un minimum.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    agent de maitrise
    Inscrit en
    Février 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : agent de maitrise
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Bonjour Kropernic

    Merci de vous interessser à mon problème. Je vous envoie plus d'information dès que possible, je dois partir travailler !

    Bonne journée

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    agent de maitrise
    Inscrit en
    Février 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : agent de maitrise
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Bonsoir

    Comme l'a suggéré Kropernic, je vous indique plus de détail quant à mon problème.

    - Structure de la table principale de ma BD access 2007

    Table principale : T_Recettes
    Champs : Type de données :

    NumRecette NuméroAuto
    Titre Texte
    Ingredient Mémo
    Preparation Mémo
    NbPersonne Numérique
    CodeCategorie Texte
    CodePlat Texte
    CodeViande Texte
    CodeMorceau Texte
    CodePoisson Texte
    CodeFruit Texte (Autoriser à contenir plusieurs valeurs)
    CodeDivers Texte (Autoriser à contenir plusieurs valeurs)
    CodeNation Texte
    TempsCuisson Texte
    TempsPreparation Texte
    CodeCout Texte
    CodeFacilite Texte
    Photo Pièce jointe
    Commentaire Mémo
    CodeLegume Texte (Autoriser à contenir plusieurs valeurs)
    CodeThermomix Booléen
    - une capture d'écran des relations entre mes tables

    - le code pour la mise à jour de la table T_Recettes

    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
    Private Sub BtnEnregistrerRecette_Click(sender As Object, e As System.EventArgs) Handles BtnEnregistrerRecette.Click
            MonDataRowRecette = MonDataSet.Tables("T_Recettes").NewRow()
            MonDataRowRecette("Titre") = CasseDuTexte(TxtTitreRecette.Text)
            MonDataRowRecette("Ingredient") = RichTxtIngredientRecette.Text
            MonDataRowRecette("Preparation") = RichTxtPreparationRecette.Text
            MonDataRowRecette("NbPersonne") = TxtNbPersonneRecette.Text
            MonDataRowRecette("CodeCategorie") = CmbCategoriePlatRecette.SelectedText
            MonDataRowRecette("CodePlat") = CmbTypePlatRecette.SelectedText
            MonDataRowRecette("CodeViande") = CmbViandeRecette.SelectedText
            MonDataRowRecette("CodeMorceau") = CmbMorceauRecette.SelectedText
            MonDataRowRecette("CodePoisson") = CmbPoissonRecette.SelectedText       
            MonDataRowRecette("CodeFruit") = ChkLstFruitRecette.CheckedItems
            MonDataRowRecette("CodeDivers.Value") = ChkLstDiversRecette.CheckedItems
            MonDataRowRecette("CodeNation") = CmbPaysRecette.SelectedText
            MonDataRowRecette("TempsCuisson") = TxtTempsCuissonRecette.Text
            MonDataRowRecette("TempsPreparation") = TxtTempsPreparationRecette.Text
            MonDataRowRecette("CodeCout") = CmbCoutRecette.Text
            MonDataRowRecette("CodeFacilite") = CmbDifficulteRecette.Text
            MonDataRowRecette("Photo") = PhotoRecette.Image
            MonDataRowRecette("Commentaire") = RichTxtCommentaireRecette.Text
            MonDataRowRecette("CodeLegume") = ChkLstLegumeRecette.CheckedItems
            MonDataRowRecette("CodeThermomix") = ChkThermomixRecette.CheckState
     
            MonDataSet.Tables("T_Recettes").Rows.Add(MonDataRowRecette)
     
            MonCommandBuilder = New OleDbCommandBuilder(MonDataAdapter) 'Modifie les valeurs changées dans le DataAdapter
     
            MaConnexionRecette.Open()
     
            MonDataAdapter.Update(MonDataSet, "T_Recettes")             ' Mise à jour du dataset
            MonDataSet.Clear()                                                            ' vide le DataSet
     
            MonDataAdapter.Fill(MonDataSet, "T_Recettes")                   ' Et le recharge
            MaDataTableRecette = MonDataSet.Tables("T_Recettes")
     
            MaConnexionRecette.Close()
        End Sub
    - le message d'erreur de vb.net

    Une requête INSERT INTO ne peut pas contenir un champ à plusieurs valeurs.
    Après plusieurs essais, en supprimant les champs texte acceptant plusieurs valeurs ainsi que le champ Photo (type de donnée pièce jointe), la mise àjour fonctionne parfaitement.

    Voila, j'espère que ce sera plus clair pour vous et que vous pourrez m'aider.

    Bonne soirée et merci d'avance
    Images attachées Images attachées  

  5. #5
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    A vérifier : Dans les InsertCommand et Update command générées par le CommandBuilder, il est posible que les champs "MultiValued" aparaissent seulement avec leur nom "CodeFruit" par exemple non comme "CodeFruit.[Value]" .

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    agent de maitrise
    Inscrit en
    Février 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : agent de maitrise
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Bonjour Graffito

    J'ai effectivement pensé à cela, mais si je modifie la ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonDataRowRecette("CodeFruit") = ChkLstFruitRecette.CheckedItems
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonDataRowRecette("CodeFruit.Value") = ChkLstFruitRecette.CheckedItems
    J'ai un message d'erreur m'indiquant que le champ CodeFruit.value n'existe pas dans la table T_Recettes.

    Une dernière chose comment voir exactement ce qui l'y a "d'écrit" dans les InsertCommand et Update command générées par le CommandBuilder. Je rappel que je suis néophyte en VB.NET (dans tous les autres langages aussi d'ailleurs !!)

    Bonne journée et merci de vous pencher sur mon problème

  7. #7
    Membre expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut
    Bonjour.

    Je suis encore pas super bon et loin d'avoir des talents d'analystes ^^ mais je peux proposer une remarque, en espérant qu'elle soit utile :
    Tu insère des valeurs xx.checkeditems, visiblement cette fonction renvoie une collection. Il faudrait tenter de faire : xx.checkeditems(0) pour voir ce que ça peut donner.

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    agent de maitrise
    Inscrit en
    Février 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : agent de maitrise
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Bonjour

    Je prend la remarque en compte, je n'ai effectivement pas pu voir ce que "xx.checkeditems" renvoyai comme valeur étant donné que c'est à l'Update que ça plante, même si je met une chaine String vide à la place de "xx.checkeditems".

    Bonne journée

  9. #9
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Une dernière chose comment voir exactement ce qui l'y a "d'écrit" dans les InsertCommand et Update command générées par le CommandBuilder. Je rappel que je suis néophyte en VB.NET (dans tous les autres langages aussi d'ailleurs !!)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MessageBox.Show(MonAdapter.InsertCommand.Text) ;
    MessageBox.Show(MonAdapter.UpdateCommand.Text) ;

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    agent de maitrise
    Inscrit en
    Février 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : agent de maitrise
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Graffito Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MessageBox.Show(MonAdapter.InsertCommand.Text) ;
    MessageBox.Show(MonAdapter.UpdateCommand.Text) ;
    Merci Graffito

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    agent de maitrise
    Inscrit en
    Février 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : agent de maitrise
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par gill-bates Voir le message
    Envoyé par Graffito



    Code :

    Sélectionner tout - Visualiser dans une fenêtre à part

    12 MessageBox.Show(MonAdapter.InsertCommand.Text) ;
    MessageBox.Show(MonAdapter.UpdateCommand.Text) ; Merci Graffito
    Après essais et recherche dans MSDN, la syntaxe exacte est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MessageBox.Show(MonCommandBuilder.GetInsertCommand().CommandText)
    MessageBox.Show(MonCommandBuilder.GetUpdateCommand().CommandText
    Cela m'a permis de voir que les champs "CodeDivers, CodeFruit, CodeLegume et Photo", n'étaient pas pris en compte ou tout au moins pas comme il faut.

    Une question en appelant une autre ! Je ne comprend pas à quoi correspond les '? = 1' AND etc... que l'on trouve à la pelle dans le UpdateCommand.

    Merci encore et bonne journée

  12. #12
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Je ne comprend pas à quoi correspond les '? = 1' AND etc... que l'on trouve à la pelle dans le UpdateCommand.
    Ca permet de traiter dans la condition WHERE des requêtes SQL les cas des valeurs "null".

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    agent de maitrise
    Inscrit en
    Février 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : agent de maitrise
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Merci Graffito

Discussions similaires

  1. [AC-2007] Case à cocher avec champs multi-valués
    Par manusp dans le forum IHM
    Réponses: 6
    Dernier message: 21/03/2011, 23h50
  2. Réponses: 1
    Dernier message: 05/03/2009, 21h36
  3. [CentOS] Probleme de mise à jours avec YUM
    Par BbT0n dans le forum Administration système
    Réponses: 2
    Dernier message: 02/03/2009, 13h49
  4. probleme mise à jour dataset/bd
    Par nsanabi dans le forum VB.NET
    Réponses: 3
    Dernier message: 13/08/2008, 17h10
  5. Réponses: 5
    Dernier message: 08/04/2008, 09h54

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