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 :

Enorme taille de fichier Access


Sujet :

Access

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Enorme taille de fichier Access
    Bonjour,

    Mon problème est quelque peu bizarre :
    Je suis passé sous la nouvelle version d'Access et lorsque j'exécute le code ci-dessous la taille de mon fichier augmente 100 fois plus qu'auparavant ! Je me retrouve avec un fichier de 2Go alors que ma base ne s'agrandit pas ou presque pas. Seraient-ce les recordset ? Je ne vois pas en plus ou il pourrait mettre les 2Go d'informations ...

    Mon programme sert à créer des tables que l'on peut importer dans un serveur de facturation A2Billing (qui fonctionne avec Asterisk, pour ceux qui ne connaissent pas nous sommes dans la VOIP - téléphonie par internet).
    Donc en premier, je sélectionne les lignes avec le préfix en commun des tables nommées Ready2Export grâce à une requète SQL (SELECT DISTINCT) que je met dans une table nommée Verif_Tmp.
    Nous avons une table nommé VOIPProvidersList qui contient toutes les informations de tous les fournisseurs. Nous la parcourons donc au début grâce à un recordset (première boucle While) et dans cette même boucle nous parcourons chaque ligne de la table Ready2Export du fournisseur pour remplir les informations manquantes dans Verif_Tmp (qui ne possède que les prefix). Tout le monde suit ? :p Puis pour finir, j'écrase le contenu de la table Ready2Export par Verif_Tmp.
    Nous avons X tables avec des prefix identiques pour X fournisseurs avec pour chaque table les informations de chaque fournisseur (les coûts ...)

    Donc pour en revenir à mon problème, lorsque je fais cette manipulation, mon fichier grossit considérablement et sans raison (mon fichier à l'origine fait 44Mo, il se retrouve à 2Go le bougre ^^). Et cela ne me le fait que depuis que je suis passé à Access 6.3. Sinon le résultat est bien celui que l'on attend.

    Un bug de la nouvelle version ?

    Merci pour le coup de main. Si vous avez une idée, et il n'y a pas de mauvaises idées, n'hésitez pas s'il-vous-plaît.
    Voici le fameux code :



    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    Private Sub BtnVerifExport_Click()
     
     
    'Traitement des doublons :
     
     
     
        '######## Suppression des doublons ########
     
     
        'Déclaration des variables
        Dim objConn As ADODB.Connection
        Dim objVoipProvidersTable As ADODB.Recordset
        Dim query As String
        Set objConn = New ADODB.Connection
        Dim objVOIPProvidersList As Recordset
     
        'Déclaration des informations
        Dim dialprefix As String
        Dim Destination As String
        Dim rateinitial As String
        Dim buyrate As String
        Dim buyrateinitblock As String
        Dim buyrateincrement As String
        Dim billingblock As String
        Dim connectcharge As String
        Dim disconnectcharge As String
        Dim stepchargea As String
        Dim chargea As String
        Dim timechargea As String
        Dim billingblocka As String
        Dim stepchargeb As String
        Dim chargeb As String
        Dim timechargeb As String
        Dim billingblockb As String
        Dim stepchargec As String
        Dim chargec As String
        Dim timechargec As String
        Dim billingblockc As String
        Dim startdate  As String
        Dim stopdate As String
        Dim starttime As String
        Dim endtime As String
     
        Dim objTmp As Recordset
     
        'Instanciation des variables
        Set objVOIPProvidersList = CurrentDb.OpenRecordset("VoipProvidersList")
        Set objUpdate = New ADODB.Recordset
     
        objConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "User ID=Admin;" & _
        "Data Source=C:\Documents and Settings\Bequet Jonathan\Bureau\tarifs Jo 29 aout version 1.6.mdb"
     
        objVOIPProvidersList.MoveLast
        objVOIPProvidersList.MoveFirst
     
        While Not objVOIPProvidersList.EOF
     
     
          objConn.Open
     
          NameProvider = objVOIPProvidersList.Fields("Nom")
          TableNameR = objVOIPProvidersList.Fields("TableA2Billing")
          TableNameI = objVOIPProvidersList.Fields("TableImport")
     
          'Vide Verif_Tmp
          query = "DELETE * FROM Verif_Tmp"
          Set objVoipProvidersTable = objConn.Execute(query)
     
          'Copie les prefix sans les doublons dans Verif_Tmp
          query = "INSERT INTO Verif_Tmp (dialprefix)SELECT DISTINCT dialprefix FROM " & TableNameR & ""
          Set objVoipProvidersTable = objConn.Execute(query)
     
          objConn.Close
          objConn.Open
     
          Set objTmp = CurrentDb.OpenRecordset("Verif_Tmp")
     
          objTmp.MoveLast
          objTmp.MoveFirst
          MsgBox ("Vérification de la pertinence de la table " + NameProvider)
     
     
          While Not objTmp.EOF
     
            dialprefix = objTmp("dialprefix")
     
            objUpdate.Open ("SELECT * FROM " & TableNameR & " WHERE dialprefix = '" & dialprefix & "'"), objConn
     
            If (Not objUpdate.EOF) Then
     
              Destination = objUpdate.Fields("destination")
              rateinitial = objUpdate.Fields("rateinitial")
              buyrate = objUpdate.Fields("buyrate")
              buyrateinitblock = objUpdate.Fields("buyrateinitblock")
              buyrateincrement = objUpdate.Fields("buyrateincrement")
              initblock = objUpdate.Fields("initblock")
              billingblock = objUpdate.Fields("billingblock")
              connectcharge = objUpdate.Fields("connectcharge")
              disconnectcharge = objUpdate.Fields("disconnectcharge")
              stepchargea = objUpdate.Fields("stepchargea")
              chargea = objUpdate.Fields("chargea")
              timechargea = objUpdate.Fields("timechargea")
              billingblocka = objUpdate.Fields("billingblocka")
              stepchargeb = objUpdate.Fields("stepchargeb")
              chargeb = objUpdate.Fields("chargeb")
              timechargeb = objUpdate.Fields("timechargeb")
              billingblockb = objUpdate.Fields("billingblockb")
              stepchargec = objUpdate.Fields("stepchargec")
              chargec = objUpdate.Fields("chargec")
              timechargec = objUpdate.Fields("timechargec")
              billingblockc = objUpdate.Fields("billingblockc")
              startdate = objUpdate.Fields("startdate")
              stopdate = objUpdate.Fields("stopdate")
              starttime = objUpdate.Fields("starttime")
              endtime = objUpdate.Fields("endtime")
     
            End If
     
            objTmp.Edit
            objTmp("destination") = dialprefix 'Destination
            objTmp.Update
            objTmp.Edit
            objTmp("buyrate") = rateinitial
            objTmp.Update
            objTmp.Edit
            objTmp("buyrateinitblock") = buyrateinitblock
            objTmp.Update
            objTmp.Edit
            objTmp("buyrateincrement") = buyrateincrement
            objTmp.Update
            objTmp.Edit
            objTmp("rateinitial") = rateinitial
            objTmp.Update
            objTmp.Edit
            objTmp("initblock") = initblock
            objTmp.Update
            objTmp.Edit
            objTmp("billingblock") = billingblock
            objTmp.Update
            objTmp.Edit
            objTmp("connectcharge") = connectcharge
            objTmp.Update
            objTmp.Edit
            objTmp("disconnectcharge") = disconnectcharge
            objTmp.Update
            objTmp.Edit
            objTmp("stepchargea") = stepchargea
            objTmp.Update
            objTmp.Edit
            objTmp("chargea") = chargea
            objTmp.Update
            objTmp.Edit
            objTmp("timechargea") = timechargea
            objTmp.Update
            objTmp.Edit
            objTmp("billingblocka") = billingblocka
            objTmp.Update
            objTmp.Edit
            objTmp("stepchargeb") = stepchargeb
            objTmp.Update
            objTmp.Edit
            objTmp("chargeb") = chargeb
            objTmp.Update
            objTmp.Edit
            objTmp("timechargeb") = timechargeb
            objTmp.Update
            objTmp.Edit
            objTmp("billingblockb") = billingblockb
            objTmp.Update
            objTmp.Edit
            objTmp("stepchargec") = stepchargec
            objTmp.Update
            objTmp.Edit
            objTmp("chargec") = chargec
            objTmp.Update
            objTmp.Edit
            objTmp("timechargec") = timechargec
            objTmp.Update
            objTmp.Edit
            objTmp("billingblockc") = billingblockc
            objTmp.Update
            objTmp.Edit
            objTmp("startdate") = startdate
            objTmp.Update
            objTmp.Edit
            objTmp("stopdate") = stopdate
            objTmp.Update
            objTmp.Edit
            objTmp("starttime") = starttime
            objTmp.Update
            objTmp.Edit
            objTmp("endtime") = endtime
            objTmp.Update
     
     
            objUpdate.Close
            objTmp.MoveNext
     
     
          Wend
     
     
          objTmp.Close
          objConn.Close
          objConn.Open
     
          'Vide la table A2Billing
          query = "DELETE * FROM " & TableNameR & ""
          Set objVoipProvidersTable = objConn.Execute(query)
          'Copie la table Verif_Tmp vers la table A2Billing
          query = "INSERT INTO " & TableNameR & " (dialprefix, destination, rateinitial, buyrate, buyrateinitblock, buyrateincrement, initblock, billingblock, connectcharge, disconnectcharge, stepchargea, chargea, timechargea, billingblocka, stepchargeb, chargeb, timechargeb, billingblockb, stepchargec, chargec, timechargec, billingblockc, startdate, stopdate, starttime, endtime)SELECT * FROM Verif_Tmp"
          Set objVoipProvidersTable = objConn.Execute(query)
          'Vide Verif_Tmp
          'query = "DELETE * FROM Verif_Tmp"
          'Set objVoipProvidersTable = objConn.Execute(query)
     
     
          objVOIPProvidersList.MoveNext
          objConn.Close
     
     
     
     
        Wend
     
        objVOIPProvidersList.Close
     
     
      BtnVerifExport.Value = False
      MsgBox ("Vérification terminée. Cependant certains coûts peuvent être vides, veuillez vérifier les tables Ready2Export. Merci.")
     
    End Sub

  2. #2
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Merci d'utiliser les balises codes à l'avenir pour mettre en forme vos messages.

    L'accumulation de Edit/Update n'est pas vraiment recommandée. De plus sous ADO, l'edit n'est pas utilisable, on modifie et on update une fois toutes les modifications apportées. Ce code est loin d'être clair. Quant à la version d'Access 6.3, je ne sais pas c'est laquelle, la dernière sortie est la 2007 (béta) soit V12, la précédente est la 2003 V11

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci pour votre réponse éclair
    Pardon pour les quotes CODE, je trouvais que c'était pas très lisible avec
    Je note pour l'histoire des Update et Edit. Je ne le ferais qu'une fois dorénavant. Cependant vous dîtes que le Edit n'est pas utilisable sous ADO. Mais si je l'enlève il me met une erreur et me demande de le rajouter.
    Je sais bien que mon code n'est pas très clair puisqu'en fait c'est une des étapes de mon programme et de plus étant débutant en Visual Basic je fais plein de choses inutiles
    Voilà pourquoi j'ai essayé de vous l'expliquer avec le plus de détails possibles sans vous endormir par sa longueur ^^
    Avez-vous déjà rencontré un problème de fichier qui grossit auparavant ? Ou avez-vous une idée d'ou cela peut venir ?

  4. #4
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    En fait je n'avais pas bien fait attention, tu utilises à la fois ADO et DAO... C'est hyper confus. Je serais toi, je me limiterais à DAO qui a été pensé pour Access

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Oki Doki Je me lance. Merci.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 047
    Points : 1 042
    Points
    1 042
    Par défaut
    C'est vrai que DAO est pensé pour ACCESS mais quand on migre vers SQL Server quelle galère.

    Pour le reste as tu simplement fais un compactage de la base de donnée pour la réduire?

    Pour ce qui est du programme j'avais jamais vu autant d'edit l'un après l'autre.

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Faire un compactage de la base ? Non je ne sais pas comment faire
    Pour les Edit c'est bon c'est corrigé . Pour le moment je pense que l'on restera en Access, donc pour la migration vers SQL Server ce sera pour bien plus tard
    Je vais me renseigner pour lancer les requètes et parcourir les tables uniquement avec DAO.
    Merci pour vos remarques, je vous tiendrais au courant, c'est le moins que je puisse faire.

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Ton idée de compactage de la base m'interresse grandement. En supprimant tous les Edit et Update (on garde un Edit au début et un Update à la fin), le fichier double de taille ... et sans raison. Je pensais à des objets qui seraient créés et non supprimé ou à des tables fantomes.
    Je sais je vais loin mais je ne comprends pas pourquoi ça fait ça. Bon je me renseigne en attendant sur le DAO.

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 047
    Points : 1 042
    Points
    1 042
    Par défaut
    pour le compactage

    Outil->utilitaire de base de donnée-> compacter

    salutations.

  10. #10
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 27
    Points : 22
    Points
    22
    Par défaut
    Pour le compactage, tu vas dans : Tools/Database Utililities/Compact and Repair. Mon Access est en anglais, mais je pense que tu nauras pas de prb pour la traduction. Tu peux aussi faire un compactage systematique a chaque fermeture du fichier Access : Options / Onglet General/ Compact on close.

    voila voilou. Moi ca me sert bien.
    + greg

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Bonsoir,
    Le fait de compacter la base de données après avoir fait fonctionner l'algorithme permet au fichier de retrouver une taille normale ! Je ne sais toujours pas pourquoi le fichier se comporte ainsi mais j'ai résolu mon problème de façon indirecte.
    Néanmoins, je continuerais à chercher la raison d'un tel comportement.
    Merci encore à tous.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Jobijoba

    Le fait de compacter la base de données après avoir fait fonctionner l'algorithme permet au fichier de retrouver une taille normale ! Je ne sais toujours pas pourquoi le fichier se comporte ainsi mais j'ai résolu mon problème de façon indirecte.
    Néanmoins, je continuerais à chercher la raison d'un tel comportement.
    Ne cherche pas, c'est simplement qu'Access sauvegarde toutes les modifications apportées dans la base. Le compactage permet de supprimer ces enregistrements !

Discussions similaires

  1. Taille fichier Access inchangé (base vidé)
    Par JimJames23 dans le forum Access
    Réponses: 1
    Dernier message: 23/07/2010, 15h43
  2. Taille de fichier Access
    Par giancomo dans le forum Access
    Réponses: 5
    Dernier message: 10/08/2009, 10h52
  3. Taille fichier Access>2G : arrêt de programe
    Par fafabzh6 dans le forum VBA Access
    Réponses: 6
    Dernier message: 17/06/2008, 09h25
  4. Réponses: 2
    Dernier message: 13/08/2007, 19h45
  5. Taille d'un fichier Access
    Par Aspic dans le forum Access
    Réponses: 6
    Dernier message: 02/07/2007, 14h59

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