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

C# Discussion :

Update avec INNER JOIN


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 8
    Points
    8
    Par défaut Update avec INNER JOIN
    Bonjour,

    j'ai une base de donnée access avec 2 table (table1 et table2)

    une colonne de la table1 contient le numéro qui represente un nom dans la table2.

    pour afficher les information dans une listview par exemple je fais un INNER JOIN Table2 ON Table1.Nom = Table2.N (par exemple)

    maintenant dans ma forme j’édite les information et je change le nom qui bien sur a son numéro dans la table2

    quand je fais un UPDATE comment faire pour inscrire le numéro du nom au lieu du nom qui de toute façon ne marchera pas vu que c'est du text alors que le champ et en numéro.

    par defaut, je vais en premier chercher le Numéro (N) du nouveau nom avant de faire un UPDATE, mais j'aurais aimé savoir s'il y avait un moyen de le faire plus rapidement avec un INNER JOIN par exemple.

    merci par avance.

  2. #2
    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
    Points : 3 304
    Points
    3 304
    Par défaut
    Trouvé sur le forum. Perso je n'ai pas encore essayé. je fais les updates des tables séparément. Mais la solution m’intéresse ;-)

    http://www.developpez.net/forums/d11...inture-update/

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 8
    Points
    8
    Par défaut
    je crois ce n'est pas vraiment ce que je cherche :

    en complément de ce que j'ai dis plus haut, quand je récupere les données apres la SELECT: j'ai une donnée dans un comboBox qui est deja remplis au chargement par d'autre données.

    si je change le text de cette combobox et que j'enregistre avec un UPDATE, je ne dois pas envoyer le text qui est dans la combobox mais le numéro (ID) en relation avec le text (champ Nom par exemple)

    d'habitude ce que je fais c'est faire un SELECT ID du text choisi dans la table correspondante avant de faire un UPDATE dans la table qui m’intéresse ....

  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
    Points : 3 304
    Points
    3 304
    Par défaut
    je ne sais pas si ton application est en Winform ou WPF, mais je ne saurais que de te conseiller de faire une recherche du coté du DataBinding. J'ai l'impression que tu réécris ce qui existe déjà dans le FrameWork (je parle ici au niveau des accès aux données, et je l'ai fais aussi à mes débuts).

    Je te conseille de voir (si tu ne connais pas encore bien sur) du coté des Dataset, DataAdapter , etc qui pourrait vraiment te simplifier la vie après une courte période d'apprentissage.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 8
    Points
    8
    Par défaut
    oui malheureusement pour le moment je ne connais que les requete SQL avec les DATEREADER ....

    donc j'ecris une requete pour afficher les données, une autre pour les inserer, une autre pour les mise a jours ....

    a mes debut je n'ai pas aimé le principe du databinding, je crois que j'ai du voir un tuto mal écrit !

    a ce propos, j'aimerai savoir si c'est vraiment beaucoup mieux de travailler avec les databinding, je sais que niveau code c'est beaucoup plus rapide a ecrir, mais niveau puissance, possibilité, je ne sais pas si on peut tout faire comme pour les requete SQL (je parle des longue requete compliqué)

    bon la méme si je commence a apprendre je n'aurai pas le temps de tout refaire, c'est un projet que j'ai commencé y a un moment avec 13 form deja et une base de donnée en 15 Table avec jointure. je me vois mal tout récrire

    sinon je suis en winform.

  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
    Points : 3 304
    Points
    3 304
    Par défaut
    Il n'y a pas de soucis pour utiliser un dataset avec des requêtes complexes. En fait un dataset est un ensemble entre autre de DataTable entre lesquelles tu peux aller jusqu'à recréer les différentes relations et donc recréer le schéma de ta DB mais en mémoire.

    Sur chaque DataTable constituant ce DataSet, tu peux utiliser des DataView (correspondant au vues des SGBD). Sur celle-ci tu peux appliquer un RowFilter qui correspond à la clause WHERE d'une requête.

    Et pour chaque composant visuel comme une ComboBox, DataGridView etc tu peux définir une DataTable ou DataView comme source.

    Dans ton cas, il y aurait donc ta connexion, puis un DataAdapter par table. Celui-ci comprend des propriétés représentant les requêtes SELECT, INSERT et UPDATE pour chaque table.

    Donc en gros tu charges tes données, tes différents composants graphiques sont liés aux DataTable ou DataView en fonction des besoins. Les modifications effectuées sont sauvées dans les DataTable du DataSet. Et lors d'une sauvegarde tu appelles la méthode Update sur les DataTable et le mécanisme enregistre le tout dans ta base de données.

  7. #7
    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
    Points : 3 304
    Points
    3 304
    Par défaut
    Tu trouveras ci-joint un petit exemple fonctionnel où je remplis une DataTable dans un DataSet, et ou j'utilise une DataView pour effectuer un Binding avec 2 Combobox (Le contenu de la deuxième varie en fonction de la sélection dans la première). Dans ce cas le remplissage est fait via code et non via une base de données. Mais c'est très simple à faire.
    Fichiers attachés Fichiers attachés

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 8
    Points
    8
    Par défaut
    Merci pour tous ces explications et l'exemple je vais étudier tout ça

  9. #9
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Il ne faut pas non plus négliger l'utilisation d'Entity Framework (ou tout autre ORM)

    La technologie des DataSets est désormais vieillotte...

    Voici un peu de lecture :
    - High Performance Data Access Layer (Part 1)
    - High Performance Data Access Layer (Part 2)
    - High Performance Data Access Layer (Part 3)

  10. #10
    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
    Points : 3 304
    Points
    3 304
    Par défaut
    Citation Envoyé par Matt07 Voir le message
    Il ne faut pas non plus négliger l'utilisation d'Entity Framework (ou tout autre ORM)

    La technologie des DataSets est désormais vieillotte...

    Voici un peu de lecture :
    - High Performance Data Access Layer (Part 1)
    - High Performance Data Access Layer (Part 2)
    - High Performance Data Access Layer (Part 3)
    J'ai vu que cela existait mais pas encore su regarder, je vais y jeter un oeil ;-) merci pour les liens

  11. #11
    Membre éclairé
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Points : 674
    Points
    674
    Par défaut
    @deado:
    C'est cette syntaxe que tu cherches?

  12. #12
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 317
    Points
    13 317
    Par défaut
    Citation Envoyé par deado Voir le message
    Bonjour,

    j'ai une base de donnée access avec 2 table (table1 et table2)

    une colonne de la table1 contient le numéro qui represente un nom dans la table2.

    pour afficher les information dans une listview par exemple je fais un INNER JOIN Table2 ON Table1.Nom = Table2.N (par exemple)
    .
    La jointure habituellement ça se fait sur la clef primaire d'une des deux tables, ou en tout cas sur un champ qu'on ne modifie pas.

    Une jointure sur le nom, sauf cas particulier, ce n'est pas recommandé.

    Par ailleurs,une instruction UPDATE (ou DELETE ou INSERT) n'opére que sur une seule table en SQL, même si on peut être amené fréquemment à mettre une jointure pour les conditions de sélection des lignes affectées.

  13. #13
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 317
    Points
    13 317
    Par défaut
    Citation Envoyé par infosam76 Voir le message
    Tu trouveras ci-joint un petit exemple fonctionnel où je remplis une DataTable dans un DataSet, et ou j'utilise une DataView pour effectuer un Binding avec 2 Combobox (Le contenu de la deuxième varie en fonction de la sélection dans la première). Dans ce cas le remplissage est fait via code et non via une base de données. Mais c'est très simple à faire.
    Pourquoi faire porter par le client ce qui peut être fait par la base ?????

  14. #14
    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
    Points : 3 304
    Points
    3 304
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Pourquoi faire porter par le client ce qui peut être fait par la base ?????
    Sur quel partie du code porte ta question ?

    Pour la petite histoire de ce code il était en réponse d'une personne qui voulait procéder de la sorte. Mais ta remarque m’intéresse.

  15. #15
    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
    Points : 3 304
    Points
    3 304
    Par défaut
    Il ne faut pas non plus négliger l'utilisation d'Entity Framework (ou tout autre ORM)

    La technologie des DataSets est désormais vieillotte...

    Voici un peu de lecture :
    - High Performance Data Access Layer (Part 1)
    - High Performance Data Access Layer (Part 2)
    - High Performance Data Access Layer (Part 3)
    Pour répondre à Matt07 j'ai un peu débattu de l'Entity Framework ce jour avec un collègue qui m'exprimait des doutes quant à la mise en place de cette technologie sur la DB que nous utilisons. En effet les développements qui sont fait actuellement en Java rencontrent des soucis parfois à cause des données de la DB. Nous devons faire avec des données des fois assez anciennes et des fois incohérentes. Par exemple certaines clés primaires ont des fois des valeurs négatives voir d'autres soucis. Je vais toutefois tester tout cela car je suis curieux ;-)

  16. #16
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par infosam76 Voir le message
    En effet les développements qui sont fait actuellement en Java rencontrent des soucis parfois à cause des données de la DB. Nous devons faire avec des données des fois assez anciennes et des fois incohérentes. Par exemple certaines clés primaires ont des fois des valeurs négatives voir d'autres soucis.
    Effectivement si ta source de données ne respecte pas les principes de modélisation (Forme Normale 3, voire Boyce-Codd), alors tu peux rencontrer quelques surprises avec les ORM.

    Mais il doit y avoir moyen d'en mettre un en place, quitte à greffer dessus des modules qui permettent de gérer les cas tordus liés à l'évolution de ta base de données. Après c'est surtout une question de coûts et de priorisation. En général si l'ORM n'est pas mis en oeuvre dès le début du projet, il est rare qu'il soit décidé de le faire après-coup, sauf si des problèmes plus ou moins critiques sont identifiés au niveau de la DAL.

    En tout cas ça vaut le coup de regarder, on peut faire énormément de choses avec

  17. #17
    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
    Points : 3 304
    Points
    3 304
    Par défaut
    Citation Envoyé par Matt07 Voir le message
    Effectivement si ta source de données ne respecte pas les principes de modélisation (Forme Normale 3, voire Boyce-Codd), alors tu peux rencontrer quelques surprises avec les ORM.

    Mais il doit y avoir moyen d'en mettre un en place, quitte à greffer dessus des modules qui permettent de gérer les cas tordus liés à l'évolution de ta base de données. Après c'est surtout une question de coûts et de priorisation. En général si l'ORM n'est pas mis en oeuvre dès le début du projet, il est rare qu'il soit décidé de le faire après-coup, sauf si des problèmes plus ou moins critiques sont identifiés au niveau de la DAL.

    En tout cas ça vaut le coup de regarder, on peut faire énormément de choses avec
    Je vais regarder effectivement pour mes développements personnels. Pour ce qui est de la DB du boulot, c'est un schéma qui a plus de 15 ans sous oracle (avec applicatif en vb6). On dépasse les 1000 tables et sur certaines tables plusieurs millions d'enregistrements (donc des champs blog). Donc j'essaierais par curiosité pour voir si cela fonctionne. Mais la technologie m’intéresse pour des choses nouvelles donc je vais voir cela ;-)

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par chrisdot Voir le message
    @deado:
    C'est cette syntaxe que tu cherches?
    Bonjour,

    merci pour toute votre aide

    sinon oui je crois que cette solution est la bonne pour moi (pas encore vraiment testé)

    sinon pour les clé primaire, vu que je bosse encore avec les requette sql et que cela est super long par fois, sur certaine table ou par exemple un champ Nom (text) est toujour Unique, j'ai mis la clé dessus pour ne pas avoir a faire des inner join a chaque fois que je veux avoir le nom (text) du champ :p

    je sais que ce n'est pas la bonne procédure a suivre mais c'etait surtout pour gagner un peut de temps vu que je devais finir vite

    sinon je consulte tous vos lien et je passe a un autre "niveau" de programmation

Discussions similaires

  1. Requête update avec inner join
    Par mattmax dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 23/05/2013, 15h53
  2. REQUETE UPDATE avec INNER JOIN
    Par vero81 dans le forum SQL
    Réponses: 1
    Dernier message: 07/08/2009, 17h45
  3. Problème avec UPDATE et INNER JOIN
    Par korbn dans le forum Requêtes
    Réponses: 2
    Dernier message: 25/05/2009, 21h52
  4. UPDATE avec INNER JOIN
    Par steelidol dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 04/03/2006, 00h56
  5. [Oracle] problème avec INNER JOIN
    Par Philofish dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/09/2005, 11h20

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