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

Windows Forms Discussion :

Alimenter une table à partir d'une autre


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2008
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 296
    Par défaut Alimenter une table à partir d'une autre
    Salut,

    Je cherche à alimenter un champs d'une table1 par une requête select effectuée sur une Table2.

    Je m'explique mieux :

    J'ai une première table qui contient un champs nomOuvrier rempli et un 2ième champs CodeOuvrier, à priori vide, mais qui va être rempli à partir d'une autre table contenant les codes relatifs à chaque nom.

    Une idée.. Ca pourrait être un trigger ? une procédure stockée?? un service windows ?? un windows Form ???
    J'ai essayé un windows form avec une requete UPDATE / SELECT imbriquée mais je m'en sors pas.

    Toute piste me sera utile.

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    il faudrait plus de précisions
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par amirad Voir le message
    J'ai essayé un windows form avec une requete UPDATE / SELECT imbriquée mais je m'en sors pas.
    A priori c'est la méthode la plus simple... qu'est-ce que tu as écrit comme requête ?

  4. #4
    Membre éclairé
    Inscrit en
    Octobre 2008
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 296
    Par défaut
    Bonjour,
    Voilà la requête que j'ai utilisée :

    requete = "UPDATE TableA SET CodeA =(select CodeB from TableB where CahmpsBB ='XX')"

    Merci pour toute remarque.

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2008
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 296
    Par défaut
    Re bonjour,
    Voilà je mets toute ma méthode :

    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
     
     Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
            'Etape 1 : Sélection des données depuis la 1ère table
     
            Try
                maConnexion = New OleDbConnection
                maConnexion.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source='C:\Documents and Settings\test.mdb'"
     
    'Affichage des données de la tableA dans un DataGridView
                 strSql = "select NomA, CodeA from TableA"
     
                maConnexion.Open()
                myCommand = New OleDbCommand(strSql, maConnexion)
                myDataAdapter = New OleDbDataAdapter(myCommand)
                myCommand.Connection = maConnexion
                myDataAdapter.Fill(myDataSet, "TableA")
                myDataTable = myDataSet.Tables("TableA")
                DataGridView1.DataSource = myDataTable
     
            Catch ex As SqlException
                MessageBox.Show(ex.Message)
            End Try
     
     
            'Etape 2 :Mise à jour du DataGridView1
     
                Try
     
               requete = "UPDATE TableA SET CodeA =(select CodeB from TableB where NomB ='XXX')"
     
                myCommand1 = New OleDbCommand(requete, maConnexion)
                myDataAdapter1 = New OleDbDataAdapter(myCommand1)
                myCommand1.Connection = maConnexion
                myDataAdapter1.Fill(myDataSet1, "TableA")
                myDataTable1 = myDataSet1.Tables("TableA")
                DataGridView1.DataSource("CodeA") = myDataTable1
                DataGridView1.Refresh()
            Catch ex As Exception
            End Try
     
        End Sub

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    j'ai regardé vite fait, mais je vois déjà 2 problèmes...
    - dans ta requête UPDATE, il n'y a pas de WHERE (il y en a un dans la sous-requête mais pas dans la requête principale), donc tu vas mettre à jour toutes les lignes de la table... tu es sûr que c'est ce que tu veux ?
    - tu utilises une requête UPDATE pour faire un Fill d'un DataTable... ça n'a absolument aucun sens ! Quand tu fais : new OleDbDataAdapter(myCommand1), tu crées un DataAdapter qui utilise myCommand1 comme SelectCommand. Or la requête en question est un Update... Fill sert à remplir une DataTable à partir de la base, en utilisant la SelectCommand, donc (comme son nom l'indique) il faut que ce soit un SELECT... Pour faire la mise à jour, on utilise UpdateCommand, InsertCommand et DeleteCommand. J'ai l'impression que tu n'as pas bien compris le principe des DataAdapters... Tu devrais jeter un oeil à ces 2 tutoriels, histoire de te "rafraichir la mémoire"
    http://dotnet.developpez.com/articles/ado1/
    http://dotnet.developpez.com/articles/ado2/
    (ça concerne SQL Server, mais le principe est exactement le même pour tous les types de BDD, il faut juste remplacer Sql* par OleDb*)

  7. #7
    Membre éclairé
    Inscrit en
    Octobre 2008
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 296
    Par défaut
    Merci tomlev pour votre coopération,
    Oui c'est vrai, tout est mélangé dans ma tête à propos des dataser, datareader, etc..
    Je les ai utilisé pour récupérer des données, supprimer, ajouter dans la base de données avec des requêtes simples, mais dès que les choses se sont compliquées, je m'en sors plus. Je verrai du côté des tutoriels que tu m'a envoyé.

  8. #8
    Membre éclairé
    Inscrit en
    Octobre 2008
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 296
    Par défaut
    Voilà mon nouveau code, cependant la mise à jour n'est pas effectuée à partir de la 2ième table, c'est juste une mise à jour statique.
    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
     
     
    Public Shared Sub main()
     
            Dim thisConnection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source='C:\Documents and Settings\test.mdb'")
     
            Dim requete As String = "SELECT * FROM TableA"
            Dim updateRequete As String = "UPDATE TableA SET CodeA = @CodeA" 
     
            Try
                ' Create Data Adapter
                Dim da As New OleDbDataAdapter
                da.SelectCommand = New OleDbCommand(requete, thisConnection)
     
                ' Create and fill Dataset
                Dim ds As New DataSet
                da.Fill(ds, "TableA")
     
                ' Get the Data Table
                Dim dt As DataTable = ds.Tables("TableA")
     
               'Modify CodeA
               dt.Rows(0)("CodeA") = "XXX"
     
     
                ' Update TableA
                ' 1. Create Command
                Dim UpdateCmd As New OleDbCommand(updateRequete, thisConnection)
     
                ' 2. Map Parameters
                ' 2.1 CodeA
                UpdateCmd.Parameters.Add("@CodeA", OleDbType.Char, 50, "CodeA")
     
     
                ' Update TableA
                da.UpdateCommand = UpdateCmd
                da.Update(ds, "TableA")
     
            Catch ex As OleDbException
                ' Display error
                Console.WriteLine("Error: " & ex.ToString())
            End Try
        End Sub
    Pour que cette mise à jour soit faite à partir de la tableB , j'ai modifié requeteUpdate ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim updateRequete As String = "UPDATE TableA SET CodeA = (select CodeB from TableB where NomA= 'YYY')"
    Merci pour toute éventuelle intervention.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 22/06/2012, 12h12
  2. [AC-2003] alimenter une table à partir d'une autre (deux bases données différentes)
    Par simodear dans le forum Modélisation
    Réponses: 7
    Dernier message: 24/03/2010, 10h05
  3. [Tables] Update d'une table à partir d'une autre
    Par le_niak dans le forum VBA Access
    Réponses: 2
    Dernier message: 17/01/2008, 09h01
  4. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24
  5. Réponses: 5
    Dernier message: 06/01/2005, 12h07

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