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 6 et antérieur Discussion :

Moulinette vb 6 avec bdd Access


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2008
    Messages : 119
    Par défaut Moulinette vb 6 avec bdd Access
    Bonjour a tous,

    Je viens vers vous car j'ai un petit problème.
    Je développe une moulinette vb6 qui traite deux fichiers différents et qui les insères dans une bdd Access.
    Ceci marche parfaitement.

    Cependant, j'ai écrit une fonction qui permet de regrouper des données. Ma fonction marche mais elle est trop longue (30 min par fichier). J'en ai trois a traiter. Donc Il faudrait que je réduise le temps.

    Dans un premier temps je vous donne le code qui marche:
    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
     
    compteur = 0
        rstCotisationHR.MoveFirst
        While (Not rstCotisationHR.EOF)
            IDSalaireHR = rstCotisationHR.Fields("idSalaire").Value
            rstCotisationMSA.MoveFirst
            trouve = False
            While (Not rstCotisationMSA.EOF) And (trouve = False)
                If IDSalaireHR = rstCotisationMSA.Fields("idSalaire").Value Then
                    If rstCotisationMSA.Fields("typeCotisationMSA").Value = rstCotisationHR.Fields("typeCotisationMSA").Value Then
                        rstCotisationMSA.Fields("typeCotisationHR").Value = rstCotisationHR.Fields("typeCotisationHR").Value
                        rstCotisationMSA.Fields("montantHR").Value = rstCotisationHR.Fields("montantHR").Value
                        trouve = True
                    End If
                End If
                rstCotisationMSA.MoveNext
            Wend
            If trouve = False Then
                With rstCotisationMSA
                    .AddNew
                    .Fields("idSalaire").Value = IDSalaireHR
                    .Fields("origine").Value = rstCotisationHR.Fields("origine").Value
                    .Fields("typeCotisationMSA").Value = rstCotisationHR.Fields("typeCotisationMSA").Value
                    .Fields("typeCotisationHR").Value = rstCotisationHR.Fields("typeCotisationHR").Value
                    .Fields("montantHR").Value = rstCotisationHR.Fields("montantHR").Value
                    .Fields("montantMSA").Value = 0
                    .Update
                 End With
            End If
            rstCotisationHR.MoveNext
            compteur = compteur + 1
            Label2.Caption = compteur
            Label2.Refresh
        Wend
    Comment puis-je réduire le temps de traitement? Je pensais a faire directement en SQL? Qu'en pensez-vous?
    Le problème, je ne connait le SQL mais le SQL plus poussé (comme la requête que je dois faire) est pour moi étranger (j'exagère un peu ^^).


    PS: Le temps est si long car mon premier While (Not rstCotisationHR.EOF) boucle sur environ 15 000 enregistrements et mon second While (Not rstCotisationMSA.EOF) boucle sur environ 50 000 enregistrements. Comment puis-je faire? mise a part laisser tourner le PC 90 minutes?

    Cordialement et bonne journée a tous.

  2. #2
    Membre Expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Une premiere amélioration pourrait consister a e faire qu'une requête regroupant les deux tables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select CotisationHR.*,CotisationMSA.* from
       CotisationHR Inner Join CotisationMSA on
          CotisationHR.idSalaire=CotisationMSA.idSalaire
    Ca donnera un recordset à ne lire qu'une fois

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2008
    Messages : 119
    Par défaut
    Bonjour Delbeke,

    Je viens de tester une requête SQL sur access pour voir le résultat (inspiré de ta requête).
    Elle marche mais elle ne prend pas tous les enregistrements que j'ai besoin.

    Voici ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Select CotisationsHR.*,CotisationsMSA.* from
    (CotisationsHR Inner Join CotisationsMSA ON
    CotisationsHR.idSalaire=CotisationsMSA.idSalaire 
    AND CotisationsHR.typeCotisationMSA=CotisationsMSA.typeCotisationMSA)
    Sa me sélectionne les bonnes correspondance (tu vas me dire "C'est ce que tu as demandés a ta requête"). Cependant dans ma table j'ai deux enregistrements ou je n'ai pas de correspondance. et je voudrais que a chaque fois que je n'ai pas de correspondance. J'insere une nouvelle ligne.

    Suis-je claire dans mon explication?
    Est-il possible de faire sa en SQL?

    El

Discussions similaires

  1. application Builder C++ avec BDD access.
    Par débutant11 dans le forum C++Builder
    Réponses: 3
    Dernier message: 09/12/2010, 02h50
  2. Cherche tutoriel dual listbox avec BDD access
    Par andy38 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/06/2008, 16h44
  3. Probleme Requete avec BDD access
    Par theoffss dans le forum VB.NET
    Réponses: 10
    Dernier message: 30/05/2008, 22h46
  4. Moteur Hyper File avec BDD Access
    Par Jacques-Henri dans le forum HyperFileSQL
    Réponses: 1
    Dernier message: 22/03/2008, 15h36
  5. [C#]Problème OleDbCommand.ExecuteReader avec BdD Access
    Par Renesis57 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 24/09/2006, 19h36

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