Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

COMPACTAGE BDD AVEC JETCOMP


Information sur la source

Catégorie :Base de Donnees Classé sous : compactage, jetcomp, access Niveau : Débutant Date de création : 04/09/2007 Vu / téléchargé: 3 759 / 440

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (14)
Ajouter un commentaire et/ou une note


Description

Pour faire suite à une demande du Forum.
Le compactage de la base se fait avec l'utilitaire JETCOMP de microsoft au lieu d'utiliser MSJRO.

J'ai codé cela il y à quelques temps sur les conseils de Renfield car je voulais pouvoir faire défiler une progressbar pendant le compactage.
Chose que l'on ne peut pas faire avec MSJRO.

Le code est simple et commenté.

Désolé j'ai du faire une double compression RAR puis ZIP pour que cela passe sur le serveur (à cause de la BDD).
 

Source

  • Public Sub BDD_Compacter(ByRef FileName As String, _
  • Optional ByRef Password As String = vbNullString, _
  • Optional ByVal Confirmation As Boolean = True)
  • ....
  • End Sub
Public Sub BDD_Compacter(ByRef FileName As String, _
                Optional ByRef Password As String = vbNullString, _
                Optional ByVal Confirmation As Boolean = True)

....

End Sub

Conclusion

Le module mShellWait est un code qui vient de Renfield. Pris quelque part sur ce site.

 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • Source.rarTélécharger ce fichier [Réservé aux membres club]557 453 octets

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de Chatbour le 04/09/2007 19:55:16

Merci pour la source :)

en quoi consiste le compactage d'une base de donnée ?
c'est peut être éliminer l'espace gaspillé ?

signaler à un administrateur
Commentaire de BruNews le 04/09/2007 20:13:29 administrateur CS

Vaste sujet...

espace gaspillé, on va voir que ça dépend du point de vue, place disque ou performances.

Une BDD est faite pour croitre donc elle ne fait que marquer 'libres' les lignes supprimées mais ne resserre jamais les fichiers de données (suppression physique) par un appel SetEndOfFile(). Il est moins couteux (en perfs) d'écrire sur une place déjà attribuée sur le disque (réécriture) plutot qu'une écriture nouvelle car oblige le driver fichier à trouver des clusters libres, si non contigus il faut à chaque morceau écrire aussi le pointeur sur le prochain cluster.

Résumé rapide mais c'est le principe.

signaler à un administrateur
Commentaire de bouv le 04/09/2007 20:37:27

J'allais le dire...
Non je déconne mais c'est un bon résumé.
Peut être déjà un peu trop technique pour les néophytes mais faut bien progresser ;-)

signaler à un administrateur
Commentaire de Chatbour le 04/09/2007 21:16:35

Merci pour les informations, mais je ne pige pas encore la tâche du compactage de la base de donnée :-/

signaler à un administrateur
Commentaire de BruNews le 04/09/2007 21:20:00 administrateur CS

Suppression physique des places non occupées, se fait par réécriture complète.

signaler à un administrateur
Commentaire de Chatbour le 04/09/2007 21:40:44

Merci chef !

signaler à un administrateur
Commentaire de PCPT le 04/09/2007 21:53:50 administrateur CS

c'est le même principe avec des variables.

il est plus rapide d'écrire dans une allocation créée que de redimensionner à chaque écriture


voici un exemple plus ou moins comparable (principe pour les variables)


Option Explicit
Const LB As Integer = 1000
Const UB As Integer = 9000
Dim a(LB To UB) As String 'contiendra 4 caractères par item


Private Sub Form_Load()
    Dim i As Long, t As Currency
    
'   rempli le tableau
    For i = LB To UB
        a(i) = CStr(i)
    Next i

'   méthode longue
    Dim r1 As String
    t = Timer
    Call methode_longue(r1)
    Debug.Print "1> TEMPS : " & Timer - t & " ms"
    
    DoEvents
    
'   méthode rapide, en utilisant l'emplacement créé
    Dim r2 As String
    t = Timer
    Call methode_rapide(r2)
    Debug.Print "2> TEMPS : " & Timer - t & " ms"

    Unload Me
End Sub

Sub methode_longue(ByRef r As String)
    Dim i As Long
    r = vbNullString
    For i = LB To UB
        r = r & a(i)
    Next i
End Sub

Sub methode_rapide(ByRef r As String)
    Dim i As Long, iLen As Integer
    iLen = Len(a(LB))
    r = String(((UB - LB + 1) * iLen), " ")
    For i = LB To UB
        Mid$(r, ((((i - LB) + 1) * iLen) + 1 - iLen), iLen) = a(i)
    Next i
End Sub



++ ;)

signaler à un administrateur
Commentaire de PCPT le 04/09/2007 21:58:38 administrateur CS

* échelle en seconde mais c'est pareil... ;)

signaler à un administrateur
Commentaire de asimengo le 05/09/2007 14:05:43

@PCPT: je trouve toujours un peu lourd d'écrire des codes du genre de ta méthode rapide. L'utilisation des suites facilitent grandement la compréhension et même accélère également l'exécution. Je sais que c'était juste pour faire un aperçu mais c'est quand même pas une bonne habitude pour ceux qui lisent ça.

Voila, je la réecris comme il se doit.

Sub methode_rapide(ByRef r As String)
    Dim i As Long, iLen As Integer, Ui as long
    iLen = Len(a(LB))
    r = String(((UB - LB + 1) * iLen), " ")
    Ui=1: Mid$(r, Ui, iLen) = a(LB)

    For i = LB +1 To UB
       Ui=Ui+iLen: Mid$(r, Ui,iLen) = a(i)
    Next i
End Sub

C'est bien pour compréhensible et surtout plus rapide.

signaler à un administrateur
Commentaire de bouv le 05/09/2007 14:41:53

ASIMENGO>>Je crois que c'est une question de goût tout ça. Chacun ses préférences. Perso je préfère le code de PCPT pour les raisons suivantes :

- Plus concis
- Ne passe pas par la variable Ui ce qui peut faire gagner quelques précieux cycles.

++
Bouv

signaler à un administrateur
Commentaire de asimengo le 05/09/2007 15:26:57

@BOUV: Question de gout?, humm je dirais y'a même pas photo, hé ben faut pas dire des bétises.

signaler à un administrateur
Commentaire de BruNews le 05/09/2007 18:17:47 administrateur CS

Ui=Ui+iLen
devrait normalement couter 1 cycle, absolument imbattable.

((((i - LB) + 1) * iLen) + 1 - iLen)
ici approximativement 12 cycles.

signaler à un administrateur
Commentaire de PCPT le 05/09/2007 18:57:41 administrateur CS

pour l'exemple vaut mieux alors passer par une variable intermédiaire OK

le problème ne se serait pas posé si j'avais commencé le tableau à 1 en mettant "data_bidon" en boucle dans le load.

ce qui est important ici est évidemment le principe! en l'uccorence l'utilisation de mid dans l'espace déjà créé.

du reste on s'aperçoit au moins que malgré le manque d'optimisation de l'exemple, la différence des 2 méthode reste énorme ;)

bref pour une base çà nous rapelle donc le compromis qu'il peut falloir faire entre taille (de la base) et rapidité (d'écriture)

++ ;)

signaler à un administrateur
Commentaire de BruNews le 05/09/2007 19:12:07 administrateur CS

Très clair que ça n'influe pas sur le principe de l'exemple.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Compactage d'une base de données en Access 2000 [ par PierreRIVET ] Je cherche à compacter une base de données en Access 2000 à l'aide du code VB6 inclus dans le logiciel.Pour l'instant j'utilise la méthode CompactData Compactage de base de données ACCESS automatique [ par Nitocris ] Comment faire pour automatiser le compactage de la base de donnée ?J'aimerais que le compactage se réalise tous les soir a une certaine heure ou quant COMPACTAGE BD ACCESS [ par multipac ] Bonjour,Y a t-il quelqu'un qui peut m'aider comment compacter une base de données ACCESS en VB6.Sachant que j'utilise une base volumineuse, et j' Help Me ! Compactage Access [ par renaud ] Une de mes applis Access 97 travaille avec des formulaires générés en mode RunTime. Il s'agit de tableaux Gantt de suivi de projet (Prévu/consommé), c Droit sur compactage dans Access [ par Stoomm ] Bonjour, je souhaiterais empeché les utilisateurs d'une base access de pouvoir la compacté.Y a t il un moyen ?Merci d'avance.A+.Stoomm. Droit sur compactage dans Access [ par Stoomm ] Bonjour, je souhaiterais empeché les utilisateurs d'une base access de pouvoir la compacté.Y a t il un moyen ?Merci d'avance.A+.Stoomm. compactage d'une base access [ par johanduflost ] Quelqu'un sait-il comment compacter une base de données access sur internet avec vb?Je débute. Je connais la méthode dbengine.compactdatabase mais ça Gestion Access multi utilisateur [ par molo molo ] Bonjour à tous,Voilà j'ai une appli VB6-Access 2000 en réseau.J'ai une procédure automatique de backup de la base et de compactage de celle-ci à inter [VB6] AVANCEMENT COMPACTAGE BDD ACCESS [ par bouv ] Salut,Je souhaite faire patienter l'utilisateur lors du compactage de la base ACCESS de mon appliSauf que plus rien ne répond dans l'appli lorsqu'elle Compactage d'une base de donnee Access [ par vbmike ] Bonjour,Je travaille avec un base de donnée Access dont une table me sert table de travaille.Des records y sont créés et effacés. Celle ci grossit et


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,421 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.