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 :

Problème de régénération de mon dataadapter


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    décembre 2022
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : décembre 2022
    Messages : 41
    Points : 30
    Points
    30
    Par défaut Problème de régénération de mon dataadapter
    Bonjour à tous,

    J'ai une base de données.
    Je l'attaque avec un dataadapter et une requête SQL.
    Ca marche très bien.

    Mais quand je recommence avec une autre requête SQL, le résultat est un peu bizarre. Il me renvoie le résultat de la première requête + celui de la seonde.
    Je pense que le dataadapter ne doit pas être mis bien à jour entre deux interrogations de ma base de données correctement (purgé).

    Je fais :

    en fin de ma première interrogation pour vider le Dta.

    Je nettoie aussi mon datatable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FormPrincipal.DttResultats.Clear()
    Ensuite je le recharge avec une autre Sql :

    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
    'Paramètre la commande de liaison du fournisseur de données
            Cmd = New OleDbCommand
            With Cmd
                .Connection = Cnx
                .CommandText = RequeteSql
            End With
     
            'Pointage de Dta vers une nouvelle instance de OleDbDataAdapter avec la requête sql souhaitée pour récupérer les bonnes données dans le DttRequete souhaité
            Try
                Dta = New OleDbDataAdapter(Cmd)
     
            Catch Except As Exception
                If MessageBox.Show("La requête SQL a échoué !" & vbNewLine & vbNewLine & Except.Message & vbNewLine & vbNewLine & "Voulez-vous réessayer de charger les données dans le fournisseur de données ?", "Requête SQL !", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) = DialogResult.OK Then
                    Call ChargementDataAdpter(RequeteSql)
                End If
     
            End Try
    Qu'est ce qui va pas ?

    Je cherche mais ne vois pas mon erreur.

  2. #2
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Enseignant retraité
    Inscrit en
    novembre 2013
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant retraité

    Informations forums :
    Inscription : novembre 2013
    Messages : 1 537
    Points : 2 832
    Points
    2 832
    Par défaut
    Bonsoir,

    Je crois que le problème vient du DataTable Dta. Le mettre à Nothing ne suffit sans doute pas. Il faut le vider explicitement, je ne suis pas près d'un PC pour vérifier mais un Dta.Clear devrait convenir.

    Ce n'est pas le DataAdapter qui pose problème.

    ...

  3. #3
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    juin 2019
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juin 2019
    Messages : 1 159
    Points : 1 778
    Points
    1 778
    Par défaut
    Bonjour,
    intéresses toi à l'utilisation de Using qui libère l'objet à la fin de son utilisation!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Using Cmd = New OleDbCommand
    https://www.developpez.net/forums/d2.../#post11637096

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    décembre 2022
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : décembre 2022
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    Bonsoir tous les deux,

    J'ai mis des contrôles et des messagebox un peu partout avec une listbox pour afficher le contenu du DataTable.
    Les requêtes SQL passées sont bonnes.
    Le dataadapter réagit bien.
    La DataTable est vidée correctement.

    Mais après le .Fill du Dataadapter, la DataTable est remplie bizarrement.
    Par exemple 5 entêtes pour 4 colonnes de résultats !

    Une entête qui revient tout le temps alors que plus demandée dans la requête SQL suivante.
    Je pense que c'est la méthode .Fill qui plante et fait n'importe quoi avec le DataTable.
    Le DataAdapter doit peut être garder des traces des anciennes requêtes car mal régénéré.

    Je vais creuser le using.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    décembre 2022
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : décembre 2022
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    Thumb down, j'ai lu sur using...

    En effet, ça parle d'objets non managés, comme les SQL... Ca va surement m'aider !
    Le problème dans l'exemple qu'ils donnent, using et end using sont sur le même bloc d'instruction.
    Moi, j'ai une déclaration du DataAdapter dans une sub, le .Fill dans une autre... car j'ai des conditions Try Catch et rebouclage si échec...

    Est ce que je peux faire un using sur la création du DataAdapter et le end using plus loin dans une autre sub (en éclaté) ? Ou il faut rester groupé ?

    De ce que j'ai vu dans leur exemple, ça n'a pas l'air d'être trop le sens de using ... end using.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    décembre 2022
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : décembre 2022
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    Je viens de trouver le problème !

    En fait, ça vient bien du DataTable.
    Clear efface les données mais pas la structure.
    Donc quand je faisais une autre requête SQL, il gardait la structure d'avant et remplissait comme il pouvait avec la méthode .Fill du DataAdapter.

    Du coup, j'ai remplacé le DataTable.clear par un dispose et ensuite = New DataTable
    Ca marche nickel !

    Merci à vous deux !

  7. #7
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Enseignant retraité
    Inscrit en
    novembre 2013
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant retraité

    Informations forums :
    Inscription : novembre 2013
    Messages : 1 537
    Points : 2 832
    Points
    2 832
    Par défaut
    Voilà donc la bonne solution.
    Mais il faut probablement faire un Dispose du Dta précédent pour que les New successifs n'encombrent pas la mémoire.
    Bon dimanche...

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    décembre 2022
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : décembre 2022
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    Question bête, si je lie un ComboBox avec un DataTable, si je supprime le DataSource, le ComboBox se vide ?
    Existe-t-il un moyen de conserver son contenu ?

    Sinon, il faut que je crée un DataTable pour chaque ComboBox et que je les lie.

  9. #9
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Enseignant retraité
    Inscrit en
    novembre 2013
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant retraité

    Informations forums :
    Inscription : novembre 2013
    Messages : 1 537
    Points : 2 832
    Points
    2 832
    Par défaut
    Bonsoir,
    Retirer et remettre un DataSource ne change rien au contenu du DataTable.
    Tu peux gérer un DataTable par ComboBox à lier et tu peux aussi utiliser un DataTable avec plusieurs champs. Il te suffit dans ce dernier cas de stipuler le champs que tu veux dans chaque ComboBox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LeCombo.DataSource = LeDataTable
    LeCombo.DisplayMember = LeDataSource(LeNomDuChampsAAfficher)
    ' Syntaxe à vérifier
    Le choix entre plusieurs DataTable et un seul avec tous les champs nécessaires depend de l'algorithmique que tu veux mettre en place. Je ne connais pas ton travail et je ne saurais te conseiller sur ce point.
    J'espère que ceci t'aidera....

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

Discussions similaires

  1. Problème de régénération de mon dataadapter
    Par Krys9292 dans le forum ADO.NET
    Réponses: 1
    Dernier message: 18/03/2023, 20h03
  2. Problème de paramètres dans mon code javascript
    Par cocacollection dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 15/03/2006, 11h53
  3. Probléme de référencement de mon site
    Par HNT dans le forum Référencement
    Réponses: 3
    Dernier message: 12/07/2005, 10h49
  4. batch-problème pour pointer vers mon log
    Par af_airone dans le forum Windows
    Réponses: 2
    Dernier message: 20/04/2005, 09h58
  5. [DirectShow] problème lorsque je détruit mon graphe
    Par juldjin2 dans le forum DirectX
    Réponses: 1
    Dernier message: 04/02/2004, 22h30

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