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 :

Lecture trop longue d'une table Access


Sujet :

VB.NET

  1. #1
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 24
    Par défaut Lecture trop longue d'une table Access
    Bonjour,

    Je recherche le moyen de lire une table dans une DB Access, je dois afficher le contenu de cette table qui contient 170.000 enregistrement dans un DataGrid.
    J'ai essayé des sources trouvé sur le site mais cela ne me convient pas, le temps d'affichage de la grid est trop long.

    J'ai lu des tutos également, j'ai l'impression que c'est le DataSet qui pose problème.
    Est ce que je suis obligé d'utiliser un DataSet, DataAdapter et un BindingSource, cela fait beaucoup de composant pour une simple lecture d'une table.
    Quelle est la solution la plus adéquate pour mon problème.
    Je suis sous VB2005.Net

    Un petit détail, la même application en VB6, l'affichage est instantané, pourquoi cette différence.

    Merci d'avance.

    Orthonic
    www.act-emploi.be

  2. #2
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 181
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 181
    Par défaut
    Bonjour.

    Afficher 170000 lignes dans un datagrid n'a pas de sens...

    A mon avis c'est plutôt la conception qu'il faut revoir.

    Au pire, un datagridview en virtualmode mais bon ... 170000 lignes ... je vois pas l'intérêt !

    Cdt.

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Par défaut
    Citation Envoyé par Orthonic Voir le message
    Un petit détail, la même application en VB6, l'affichage est instantané, pourquoi cette différence.
    Certainement parce qu'en VB6 tu utilises un RecordSet "SnapShot" alors qu'en VB.Net tu es passé par un DataSet.
    De plus, les capacités des composants "grid" en VB6 et VB.Net ne sont pas équivalentes...celui de vb.net est largement plus puissant mais cela se paie peut être au niveau du remplissage avec ce nombre de lignes. A voir si tu l'as correctement configuré...

    Commence par utiliser un simple DataReader au lieu de ton DataSet, ça devrait déjà accélerer les choses...et tiens-nous au courant.

    P.S :

    Je suis d'accord qu'afficher 170'000 lignes est d'un intérêt très limité pour un utilisateur

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    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 197
    Par défaut
    si tu veux vraiment faire ca c'est faisable mais 170k lignes il faudra à mon avis entre 30 et 90 secondes pour tout charger

    et donc il faut mettre le datageridview en mode virtual, puis charger les données sur un autre thread et mettre à jour le nombre de lignes avec un timer
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 24
    Par défaut
    J'ai lu quelques articles sur le Net et je me suis penché sur l'utilisation d'un DataReader, mais la Grid ne veut pas se charger, voici la source :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            Dim sConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\csa\drx\drx3db.mdb;"
            Dim oAccessConn As New OleDbConnection(sConnectionString)
            oAccessConn.Open()
            Dim oCmdSelect As New OleDbCommand("SELECT * FROM Users", oAccessConn)
            Dim oReader As OleDBDataReader = oCmdSelect.ExecuteReader()
     
            DGrid.DataSource = oReader
    Je n'ai aucune erreur, que faut-il faire ?

    Merci.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 374
    Par défaut
    Bonjour,
    le Oledatareader récupère les enregistrements au fur et à mesure de la lecture(en avant seulement) et ne peut être lié à un grid.
    Ou alors il faut charger le datagrid ligne par ligne à chaque Oledatareader.read
    (Ca va prendre du temps).
    Utilise plutôt un datagridview en mode virtual(voir sperot51).
    Bon boulot Jean

Discussions similaires

  1. [OpenOffice][Texte] Lignes trop longues dans une table des matières
    Par Gaillac dans le forum OpenOffice & LibreOffice
    Réponses: 0
    Dernier message: 15/08/2011, 12h10
  2. Lecture d'une table Access sous C++ Builder 6
    Par guiling dans le forum C++Builder
    Réponses: 1
    Dernier message: 22/06/2010, 10h36
  3. Récupérer les mails Outlook dans une table Access
    Par zerrokooll dans le forum VBA Access
    Réponses: 79
    Dernier message: 07/07/2009, 14h22
  4. insertion d'un type date dans une table access
    Par monstour dans le forum ASP
    Réponses: 7
    Dernier message: 18/06/2004, 16h57
  5. recherche dans une table Access en ASP
    Par D-D dans le forum ASP
    Réponses: 3
    Dernier message: 09/06/2004, 10h12

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