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

VBA Access Discussion :

Ameliorer l'efficacité de l'incrementer par groupe


Sujet :

VBA Access

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Ameliorer l'efficacité de l'incrementer par groupe
    Bonjour,
    J'ai un souci de l'efficacité de mon code. Je voudrais faire incrementer le numéro de la colonne "ELT_ORD" pour chaque CIR_IDE(En fait chaque PAR_IDE a bp CIR_IDE. ) Il y a 797 013 lignes totales.
    voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Option Compare Database
     
    Public Function Incrementer_ELT_ORD_v0()
    InitModif
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub InitModif()
    Dim conDatabase As ADODB.Connection
    Set conDatabase = CurrentProject.AccessConnection
    SelectNOMITINL "Elements_Base", "CIR_IDE", "ELT_ORD"
    End Sub
    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
    44
    Private Sub SelectNOMITINL(StrNomTable As String, NomCritere As String, NomIncrementer1 As String)
    Dim rs As New ADODB.Recordset
    Dim res As New ADODB.Recordset
     
    Dim nbLignes As Integer
    Dim nbLignes1 As Integer
    Dim ChnSQL As String
    Dim counter As Integer
     
    'initialisation des variables
    nbLignes = 0
     
    ChnSQLRequete1 = "Select " & NomCritere & " from " & StrNomTable & " group by " & NomCritere & ";"
     
        rs.Open ChnSQLRequete1, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
        nbLignes = rs.RecordCount
        counter = 1
     
    If (nbLignes <> 0) Then
        rs.MoveFirst
        While rs.EOF <> True
     
            ChnSQLRequete2 = "Select " & NomIncrementer1 & " from " & StrNomTable & " where " & StrNomTable & "." & NomCritere & "=" & rs.Fields(0).Value & _
                 " order by " & StrNomTable & "." & NomIncrementer1 & ";"
            res.Open ChnSQLRequete2, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
            nbLignes1 = res.RecordCount
            If (nbLignes1 > 0) Then
                res.MoveFirst
                While res.EOF <> True
                    res.Fields(0).Value = counter
                    res.Update
                    counter = counter + 1
                    res.MoveNext
                Wend
                res.Close
            Else
                res.Close
            End If
     
            counter = 1
            rs.MoveNext
        Wend
    End If
    End Sub
    Mes questions sont:
    1. est-ce que la code est correct?
    2. comment je pourrai améliorer l'efficacité (797 013 lignes en totale)?
    3. comment je pourrai afficher un message box pour afficher l'état d'avancement de programme (par exemple, afficher le numéro de "CIR_IDE"), svp?

    Merci beaucoup!
    Images attachées Images attachées  

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 089
    Points : 5 206
    Points
    5 206
    Par défaut
    Bonjour,

    Tout d'abord pour l'avancement le plus simple est je pense d'utiliser syscmd :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    r = SysCmd(1, "Avancement", rst.RecordCount) 'initialise message en bas de l'écran
    puis
    r=syscmd(2,counter) 'dans la boucle
    et
    r=syscmd(3) 'supprime le message
    Ensuite il serait probablement plus rapide de faire un update global pour chaque valeur de counter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    docmd.runsql "update  " & StrNomTable & " set " & NomIncrementer1 & "=" & counter & " where " & NomCritere & "=" & rs.Fields(0).Value
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

Discussions similaires

  1. Compter nombre lignes générées par GROUP BY
    Par Trunks dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/03/2006, 16h52
  2. Nombre de pages par groupe dans un état
    Par loutsky dans le forum Access
    Réponses: 5
    Dernier message: 15/03/2006, 14h04
  3. Réponses: 7
    Dernier message: 23/09/2005, 20h58
  4. Trier les fichiers par type et les afficher par groupe ...
    Par KneXtasY dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 18/09/2005, 18h50
  5. concaténer par GROUP BY des champs text/varchar
    Par Fredobdx dans le forum Requêtes
    Réponses: 1
    Dernier message: 12/07/2005, 13h44

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