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 :

Impossible de faire la mise à jour sur un dataset basé sur une requete liée


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 62
    Points : 37
    Points
    37
    Par défaut Impossible de faire la mise à jour sur un dataset basé sur une requete liée
    Salut,

    Je suis entrain de travailler sur projet en vb.net et access. j"ai deux tables (tAgent et tMvtContrat) les deux tables sont liées par une relation 1 à N donc un agent de la table tAgent peut avoir plusieurs contrant du coté de la table tMvtContrat,

    pour l'instat tout ce passe bien pour s'agissant de la mise en place de bouton de navigation dans le dataset mais mon probleme vient du fait qu'en essaiyant de mettre en place un bouton pour faire la mise à jour similtané des mes deux tables j'ai un message d'erreur comme suit

    Dynamic SQL generation is not supported against multiple base tables.
    et par ce message je comprend que la mise à jour ne pas possible sur des multiples tables. q

    Quelqu'un pourrait avoir une alternative à mon problème où m'expliquer quoi faire?

    merci d'avance

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Tu ne peux pas faire un update sur un dataTable qui correspond à une vue sur ton sql joignant 2 tables ou plus.

    Il faut utiliser une datatable par table sur SQL serveur (quitte à rajouter une colonne expression si tu désirée afficher des valeurs d'une table parentes).

    Après les détails c'est selon la situation...

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 62
    Points : 37
    Points
    37
    Par défaut
    Merci bien sinople pour ta réaction.

    Il faut utiliser une datatable par table sur SQL serveur (quitte à rajouter une colonne expression si tu désirée afficher des valeurs d'une table parentes)
    puis je avoir beaucoup plus d'explications ou me faire un lien sur comment rajouter une colonne expression pour afficher des valeurs d'une table parenté sous sql server.

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Voila un lien vers la Doc Msdn

    Documentation DataColumn Expression

    Il y a une partie sur les relations parents/enfants.

    A savoir tout de même que les colonnes expression sont toujours en lecture seul.

    Et n'hésite pas à lire les nombreux tutorial sur ADO.Net si t'es pas encore à l'aise avec ce concept. Ca met un peu de temps à rentrer mais quand on prend la bête a deux mains on y arrive.

  5. #5
    Membre du Club Avatar de yochima
    Profil pro
    Inscrit en
    Août 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 93
    Points : 68
    Points
    68
    Par défaut
    Salut,

    Si tu es toujours bloqué, pourrais-tu nous faire un petit exemple pour qu'on comprenne bien le probleme :p

    Je t'avoue avoir du mal à suivre et pourtant je pense pouvoir t'aider en ce qui concerne VB.NET + Access (je boss dessus en ce moment)

    a+

  6. #6
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 62
    Points : 37
    Points
    37
    Par défaut mettre à jour un databuilder basé sur une requete multiple
    Salut Yoshima,

    je suis en train de travailler sur un projet et utilise vb.net 2008 et Ms access à cet effet. notre probleme se pose au niveau de la mise à jour basée sur une requete liée, je m'explique: j'ai deux tables liées par une relation 1 à N,je suis pour l'instant parvenu à afficher le dataset sur mon formulaire sur mes textbox et suis jusque la en mesure de naviguer dans celui ci(Suivant,Précèdent, premier,...) et je voudrais savoir comment faire pour mettre les deux tables à jour(ajouter, modifier) simultanément.

    Un peu comme nous le faisons avec les formulaires et sous formulaires acces.

    Merci d'avance pour votre aide

  7. #7
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Pour mettre à jour une base de donnée depuis un dataset (ou inversément) il faut utiliser l'objet TapleAdapter de la table et plus précisement la fonction .update() et .fill()

    Autrement je le répète encore une fois, lire de la documentation sur ADO.NET...

  8. #8
    Membre du Club Avatar de yochima
    Profil pro
    Inscrit en
    Août 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 93
    Points : 68
    Points
    68
    Par défaut
    Il doit y avoir un truc qui m'échappe parce que je ne vois pas de probleme ^^

    voila comment je le comprends :
    tu as dataset1 qui a 2 datatable : tAgent et tMvtContrat.

    remplir le dataset ne te pose pas de probleme. Admettons que a la place de remplir tes textbox, tu mettes les agents dans une combobox de la maniere suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ComboBox1.DataSource = ObjetDataSet.Tables("tAgent ")
            ComboBox1.DisplayMember = "C_LIBELLE"
            ComboBox1.ValueMember = "ID_UNIQUE"
    ainsi a chaque fois que tu selectionne un agent, l'utilisateur va voir son C_LIBELLE mais toi derriere tu as son ID (clef primaire de ta table)

    ensuite, tu pourrais mettre les contrat dans un datagridview comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    requete = "SELECT * FROM tMvtContrat"
    requete += " WHERE ID_AGENT = " + ComboBox1.SelectedValue.ToString
    ObjetCommand = New OleDbCommand(requete, MyConnexion)
        ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand)
        ObjetDataSet = New DataSet
        ObjetDataAdapter.Fill(ObjetDataSet)
        datagridview.datasource = ObjetDataSet.Tables(0)
    (ID_AGENT est ta foreignKey)
    Maintenant que tout est en place, tu voudrais pouvoir supprimer/modifier les contrats.

    si tu supprimes, commences par supprimer les contrats, puis l'agent en deux requetes.
    tu as tes clefs primaires respectivement dans le datagrid(a la colonne de ton choix) et dans la combobox donc les DELETE ne devraient pas te poser de problemes. De meme pour les UPDATE

    c'est une idée mais si tu veux garder tes textbox, arrange toi dans ton code pour recuperer les clefs primaire de chaque table puis execute tes requetes dans l'ordre dit juste au dessus.

    pas besoin de le faire en une seule requete


    Je t'ai aidé? xD

  9. #9
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 62
    Points : 37
    Points
    37
    Par défaut
    Merci yochima pour ton aide, je veux de l'exploiter et te ferai signer

  10. #10
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 62
    Points : 37
    Points
    37
    Par défaut comment faire pour personaliser les colonne de son DataGridView
    Merci yochima pour ton aide qui m'a non seulement aider à continuer mon application avec vb.net aussi à l'adopter pour la suite de mon carriere dans le domaine de développement.

    Juste une question pour en finir comment fait-on pour personnaliser les colonnes(en tete) du DataGridView?

  11. #11
    Membre du Club Avatar de yochima
    Profil pro
    Inscrit en
    Août 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 93
    Points : 68
    Points
    68
    Par défaut
    Salut !

    pour les datagrid, il y a quelque astuces tres utiles si tu les remplis avec des requettes.

    lorsque tu fais clic droit dessus + modifier les colonnes
    tu va rajouter juste la colonne clef-primaire de ta table (appelons la ID).

    il faut ensuite régler trois choses (dans les propriétés de la colonne) :
    -son nom --> name = columnID
    -surtout le datapropertyName = ID
    -visible = false

    comme ça, pour remplir le datagrid, tu va faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    requete = "SELECT ID, colonne1, colonne2 FROM tMvtContrat"
    requete += " WHERE ID_AGENT = " + ComboBox1.SelectedValue.ToString
    ObjetCommand = New OleDbCommand(requete, MyConnexion)
        ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand)
        ObjetDataSet = New DataSet
        ObjetDataAdapter.Fill(ObjetDataSet)
        datagridview.datasource = ObjetDataSet.Tables(0)
    ainsi, automatiquement, IDde ta requete sera rangé dans la colonne "ColumnID" et sera caché (parce que c'est souvent pas tres beau d'afficher les ID ^^)

    ensuite pour faire un UPDATE sur tes table,
    tu pourras faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    requete = "UPDATE tMvtContrat SET"
    requete += "colonne1 = 'blabla'"
    requete += "WHERE ID= " + datagridview.CurrentRow.Cells("ColumnID").Value.ToString

    tu peux ainsi géré toutes les colonnes de ton datagrid grace au "DATAPROPERTYNAME" qui reliera ta colonne de requete a ta colonne du datagrid
    bonne chance

Discussions similaires

  1. Windows XP, impossible de faire les mises a jour.
    Par Papoux dans le forum Windows XP
    Réponses: 8
    Dernier message: 11/11/2012, 01h39
  2. [AC-2000] Mise à jour zone de texte à partir d'une requete VBA
    Par mjcom dans le forum VBA Access
    Réponses: 8
    Dernier message: 24/05/2011, 17h36
  3. Impossible de faire des mises à jour de sécurité
    Par Stargate SG1 dans le forum Windows Vista
    Réponses: 12
    Dernier message: 04/12/2010, 18h12
  4. [Vista] Impossible de faire les mises à jour
    Par yobebeglan dans le forum Administration
    Réponses: 2
    Dernier message: 04/07/2007, 19h24
  5. Réponses: 3
    Dernier message: 05/12/2005, 14h17

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