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

Access Discussion :

Plantage Access avec trop d'enregistrements


Sujet :

Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Août 2006
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 82
    Par défaut Plantage Access avec trop d'enregistrements
    Bonjour,
    J'ai un module qui doit gerer beaucoup d'enregistrements, environ 50000.
    J'ai fais une importation venant d'excell dans une table 'temporaire' et je doit regarder si l'enregistrement existe dans la table principale ou pas.
    Pour celà j'utilise des recordset.
    Ma routine marche trés bien avec peu d'enregistrement, mais quand il comence a y en avoir trop access plante (pas de reponse) mais continue de tourner, mais s'il y en a plus, il plante et et ne revient pas comme par 'magie' j'ai donc mis des messages box tout les 2500 enregistrements. Mais je vous avoue que c'est pas trés pratique ! SI l'utilisateur doit entrer 50k lignes ... avec un clique sur Ok toutes les 2500 lignes (environ 30 secondes).
    Auriez vous une idée ??

    Voilà une de mes routines qui marche à moitié ...

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    Dim vS As String
    Dim vI As Recordset
    Dim vU As Recordset
    Dim vRs As Recordset
    Dim vTest As String
    Dim vT As Integer
    Dim vL As String
    Dim s As Integer
    Dim i As Integer
     
     
    vS = OuvrirUnFichier(Me.Hwnd, "Parcourir", 1, "Microsoft Excel", "xls")
     
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "PosteTechniqueImport", vS, True
     
    If MsgBox("Les données vont être ajoutées dans la base. Voulez vous continuer ?", vbYesNo, "Atnnetion !") = vbYes Then
    s = 0
    i = 0
    Set vI = CurrentDb.OpenRecordset("PosteTechnique")
    Set vRs = CurrentDb.OpenRecordset("PosteTechniqueImport")
    While vRs.EOF = False
            i = i + 1
            vTest = "SELECT * FROM PosteTechnique " & _
                    "WHERE pTNom = '" & [vRs]![pTNom] & "'"
            vT = InStr(1, vRs!pTNom, "-")
            vL = Mid(vRs!pTNom, vT + 1, 3)
            Set vU = CurrentDb.OpenRecordset(vTest)
            If vU.EOF Then
                        vI.AddNew
                        vI!pTNom = vRs!pTNom
                        vI!pTDesc = vRs!pTDesc
                        vI!pTZoneDeTri = vRs!pTZoneDeTri
                        vI!pTType = vRs!pTType
                        vI!pTClasse = vRs!pTClasse
                        vI!pTSecteur = vRs!pTSecteur
                        vI!pTUnit = vL
                        vI.Update
                    Else
                        vU.Edit
                        vU!pTDesc = vRs!pTDesc
                        vU!pTZoneDeTri = vRs!pTZoneDeTri
                        vU!pTType = vRs!pTType
                        vU!pTClasse = vRs!pTClasse
                        vU!pTSecteur = vRs!pTSecteur
                        vU!pTUnit = vL
                        vU.Update
            End If
     
            vRs.Delete
            vRs.MoveFirst
     
        If i = 2500 Then
            s = s + 1
            MsgBox "2500 enreigstrements effectués (" & s & ")"
            i = 0
        End If
     
    Wend
     
            MsgBox "Importation réalisée avec succé"
        Else
            DoCmd.RunSQL ("Delete * from ClasseImp")
    End If

    (Autre question vite fait : Comment on enleve les messages de confirmation de suppression avec une requete delete effectué dans un runsql ?)

    Meric d'avance !

  2. #2
    Expert confirmé
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Par défaut
    Salut,
    pour les messages fait une recherche.. sujet traité x fois

    Pour ton autre problème, pourquoi tu ne parcours pas d'abord ta table temporaire et après la boucle tu supprimes tous les enregistrements ?
    Tu t'embêterais moins.

  3. #3
    Membre éclairé
    Inscrit en
    Août 2006
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 82
    Par défaut
    Bah ça change rien à mon problème de supprimer aprés
    Et je prefere supprimer chaque ligne traitées, comme ça si ça plante elle ne sera plus dans la base.

  4. #4
    Expert confirmé
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Par défaut
    Si ça plante c'est que ton code ne fonctionne pas correctement.
    As tu essayé le mode pas à pas pour voir si tout se déroulait correctement ?

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 402
    Par défaut
    moi je sais pas si ca optimise le truc, mais je fonctionne plus souvent par ordre sql.

  6. #6
    Membre éclairé
    Inscrit en
    Août 2006
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 82
    Par défaut
    Niveau code, il marche niquel, si je prendre 500 lignes environs, ya aucun problèmes !
    J'ai l'impression qu'a force de boucler access s'emmêle les pinceaux ...
    SInon j'ai lu dans la faq que le recordset etait beaucoup plus rapide qu'un runSql.
    Je vais essayer de faire une routine avec des requetes sql, voir s'il tourne mieu.

Discussions similaires

  1. [AC-2003] Fusion Word-Access avec enregistrement .doc
    Par Richard_35 dans le forum VBA Access
    Réponses: 3
    Dernier message: 04/05/2010, 16h04
  2. [AC-2003] Crash / plantage de Access avec requête de somme cumulée
    Par -ULK- dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 23/07/2009, 10h23
  3. Réponses: 4
    Dernier message: 17/11/2008, 22h04
  4. Plantage d'Access avec groupe d'option
    Par Anonymouse dans le forum IHM
    Réponses: 2
    Dernier message: 23/04/2008, 09h14
  5. Réponses: 4
    Dernier message: 28/04/2006, 23h21

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