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 :

Remplir un Dataadapter une seule fois par multiple tables


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Mars 2008
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2008
    Messages : 109
    Points : 69
    Points
    69
    Par défaut Remplir un Dataadapter une seule fois par multiple tables
    Bonjour à tous,
    Dans mon programme j'ai une boucle qui transmet à chaque itération une requete sql à ma base Access et qui remplit le dataadapter et le dataset.
    Cette boucle est assez lente suite à la remplissage successif du dataset et de dataadapter. Le code suivant vous montre comment je fais actuellement:
    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
     provider2 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source ="
                dataFile2 = Label9.Text
                connString2 = provider2 & dataFile2
                myConnection2.ConnectionString = connString2
     
                For Each myrow2 In DataGridView1.Rows
                    If (myrow2.Cells(0).Value = True) Then
                        derniere_pièce = myrow2.Cells(2).Value
                        requete_select2 = "SELECT ........"
                        da2 = New OleDbDataAdapter(requete_select2, myConnection2)
                        da2.Fill(ds2)
                        nombre_pièce_aimprimer = nombre_pièce_aimprimer + 1
                        myrow2.Cells(2).Style.BackColor = Color.Pink
     
                    End If
                Next
     
                Dim view2 As New DataView(tables2(0))
                Dim source2 As New BindingSource()
                source2.DataSource = view2
                DataGridView2.DataSource = view2
                DataGridView2.Refresh()
    J'ai voulu savoir s'il y a la possibilité de remplir à chaque fois le OleDbDataAdapter suite à l'exécution de la requête mais je fais qu'une seule fois la commande da2.Fill(ds2). Est ce qu'il y a pas une méthode qui fais la mise à jour de OleDbDataAdapter .

    Merci d'avance.

  2. #2
    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
    Est-ce que chaque fois que tu fais da2.Fill(ds2), tu remplis une table différente ?

    Si oui, est-est-ce que la table chargée par da2.Fill(ds2) est "bindées'", par exemple utilisées comme DataSource pour un DataView ou un DataGridView ?

    Si c'est le cas, il faut supprimer le binding avant le Fill et le rétablir après.

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Mars 2008
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2008
    Messages : 109
    Points : 69
    Points
    69
    Par défaut
    Bonjour,
    Merci pour votre réponse. A propos du code, c'est le code complet que j'utilise pour remplir mon datagridview2 à partir de ma base access. Puisque j'ai beaucoup de Numéros de séries de pièce, je fais une lecture de ma datagridview1(qui contient la liste de numéros de pièce), puis je fais l'exécution d'une requête SQL contenant un numéros de série coché sur le datagridview1 et à chaque itération j'exécute la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     da2 = New OleDbDataAdapter(requete_select2, myConnection2)
                        da2.Fill(ds2)
    Puis à la fin de la boucle je lie cette source à ma deuxième datagridview2 à travers le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Dim view2 As New DataView(tables2(0))
                Dim source2 As New BindingSource()
                source2.DataSource = view2
                DataGridView2.DataSource = view2
                DataGridView2.Refresh()
    Le problème est que je suis conscient que je fais n'importe quoi puisque à chaque fois je fais la commande da2.Fill(ds2) qui me consomme un temps énorme. Ce que je cherche est comment j'exécute cette commande une seule fois. C'est à dire j'exécute plusieurs fois ma requête, j'enregistre mes données dans un dataAdapter ou je ne sais pas quoi d'autres, puis je remplit qu'une seule fois ma datagridview2.

    Merci pour votre compréhension.

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Mars 2008
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2008
    Messages : 109
    Points : 69
    Points
    69
    Par défaut
    Salut à tous,
    Je ne sais pas si j'ai bien expliqué mon problème. Dans ma boucle For Each myrow2 In DataGridView1.Rows j'exécute à chaque fois une requête différente mais qui me donne un tableau de donné identique (même colonnes avec différentes ligne de données). La méthode que j'utilise maintenant et qui me parait non optimisé fait l'instanciation d'un Dataadapter à chaque itération de la boucle et refait le Fill de Dataset de la même table. Puis après la sortie du boucle je lie cette Dataset à un datagridview pour l'affichage de données.
    Ce que je cherche est:
    - Est ce qu'il y a une méthode pour que je fais, par exemple, l'update de Dataapdater à chaque itération de boucle et je fais le Fill de Dataset une seule fois.
    - Est ce qu'il y a une méthode plus optimisé pour faire la mise à jour d'un Dataset suite à l’exécution de plusieurs requête SQL.

    Merci de me donner vos conseilles pour résoudre ce problème.

  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
    Pour une table comportant jusqu'à quelques centaines de milliers d'enregistrement, on aura intérert à :

    • charger la totalité dans la datable avec un SELECT sans clause WHERE,
    • binder la DataTable avec le DataGridView via un BindingSource,
    • utiliser la propriété filter (avec les conditions précédement utilisées dans les clause WHERE) du BindindSource.

Discussions similaires

  1. Problème : quelques méthodes d'un Bean accessibles une seule fois par le navigateur
    Par nakassas dans le forum Plateformes (Java EE, Jakarta EE, Spring) et Serveurs
    Réponses: 1
    Dernier message: 28/08/2012, 21h51
  2. Réponses: 38
    Dernier message: 02/11/2009, 18h20
  3. lu tous les jours mais exécuté une seule fois par mois
    Par sianto dans le forum Scripts/Batch
    Réponses: 13
    Dernier message: 17/11/2008, 09h08
  4. [MySQL] N'afficher la page que une seul fois par jour par ip
    Par Nutaak dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 03/12/2007, 17h38
  5. Réponses: 2
    Dernier message: 04/07/2006, 02h32

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