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

  1. #1
    Membre régulier Avatar de cdlr27
    Profil pro
    Inscrit en
    octobre 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : octobre 2003
    Messages : 93
    Points : 75
    Points
    75

    Par défaut Compresser une base

    Je dois promener ma base d'un PC à un autre, mais même avec le compactage, j'atteint les limites d'une disquette.

    J'ai voulu utiliser un compresseur extérieur (arj en autre) avec la commande ci-aprés :
    ' creer une version compressée de la base
    call Shell("arj.exe a db_arj.arj db_sauve.mdb", 1)
    ' La recopie sur le fichier de destination
    Reponse = Fs.CopyFile(Bd_Arj.arj, "a:\ Bd_Arj.arj")
    mais, access lance la copie avant la fin de l'execution de ARJ.

    Comment attendre la fin d'une appliaction extérieure.

    Ou une autre solution pour compresser ma base.

    Marcel

  2. #2
    Candidat au Club
    Inscrit en
    février 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 3
    Points : 4
    Points
    4

    Par défaut

    une carte mémoire USB 128Mo ( ou moins !! ), c'est pas chère, et ça peut rapporter gros...
    D'autant plus que la disquette 3 1/2" est en voie de disparition... - à mon grand regret -...
    Qui ne tente rien, n'a rien...

  3. #3
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : juin 2002
    Messages : 3 842
    Points : 9 188
    Points
    9 188

    Par défaut

    essaie plutôt de te faire ca dans un batch (.BAT)

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : avril 2002
    Messages : 3 338
    Points : 4 643
    Points
    4 643

    Par défaut

    cette fonction te permet d'attendre la fin du process mis en argument.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Sub attente_fin_trt(id As Long)
    Dim ret As Long
    Dim pHandle As Long
    Dim i As Integer
    Do
    CloseHandle (pHandle)
    pHandle = OpenProcess(SYNCHRONIZE, False, id)
    DoEvents
     
    Loop Until pHandle = 0
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id = Shell(commande_ligne, vbMinimizedNoFocus)

  5. #5
    Membre à l'essai
    Inscrit en
    août 2003
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : août 2003
    Messages : 21
    Points : 16
    Points
    16

    Par défaut

    Si çà passe pas pour pas grans chose, tu peux simplement zippé ton fichier.
    Sable, moi sous le sable.

  6. #6
    Membre régulier Avatar de cdlr27
    Profil pro
    Inscrit en
    octobre 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : octobre 2003
    Messages : 93
    Points : 75
    Points
    75

    Par défaut

    Goshiz,
    Ta réponse est trés intéressante pour son aspect technique.
    Je suis sous access 2000, et le prgramme bute sur deux fonctions que je ne retrouve pas dans l'aide :
    - CloseHandle & OpenProcess

    Est-ce dù à une option du compilateur ou à autre chose ?.

    Merci pour ton aide car cela répond exactement à ma question.

    Id = Shell("ARJ.EXE a -e bd_arj.arj bd_source",vbMinimizedNoFocus)
    puis ta procedure sub attente_fin_trt(Id)

    Marcel

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : avril 2002
    Messages : 3 338
    Points : 4 643
    Points
    4 643

    Par défaut

    excuse moi j'ai oublié les déclarations :

    ce sont en faites des API :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Declare Function CloseHandle Lib "kernel32" _
       (ByVal hObject As Long) As Long
     
    Private Declare Function OpenProcess Lib "kernel32" _
       (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
        ByVal dwProcessId As Long) As Long
     
    Private Const SYNCHRONIZE = &H100000

    sinon tu as aussi ca qui marche bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Declare Function WaitForSingleObject Lib "kernel32" _
       (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
    Private Const INFINITE = -1&
     
    pHandle = OpenProcess(SYNCHRONIZE, False, id)
    ret = WaitForSingleObject(pHandle, INFINITE)
    ret = CloseHandle(pHandle)

  8. #8
    Membre régulier Avatar de cdlr27
    Profil pro
    Inscrit en
    octobre 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : octobre 2003
    Messages : 93
    Points : 75
    Points
    75

    Par défaut Sujet terminé

    Les amis, pour une première utilisation de ce forum, chapeau pour l'aide.

    En final, j'ai utilisé un mélange des deux solutions soit :
    - Une commande shell pour le *.BAT et le paramêtre "fermer en quittant" sur le *.PIF qui s'est créer automatiquement.
    - un appel à "attente_fin_trt(Id As Long)" pour attendre la fin du traitement.

    Cela me donne un assez grand avenir, mon fichier compressé étant à 420Ko.

    Pour répondre à d'autres, je n'ai pas de port USB sur un des PC et le sujet était intéressant.

    A plus tard pour d'autres délires et je vais continuer à apprendre à utiliser ce forum.

    Marcel

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    janvier 2004
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : janvier 2004
    Messages : 32
    Points : 27
    Points
    27

    Par défaut

    Je voudrais faire la même chose, compresser des fichiers externe avec 7-Zip.
    Mais dès que je mets la déclaration des API dans un module j'ai l'erreur suivante: 'Expected variable or procedure, not module' en pointant sur une ligne contenant une fonction shell.
    Si je cherche dans l'explorateur d'objet shell, j'ai 2 réponses, la nomal et 1 autre: bibliothéque:nom_base Class:Shell.
    Mais si je fais ca dans une base vide tout marche impec, et 1 réponse dans l'explorateur d'objet. Dans les 2 cas les ref sont identique et dans le même ordre.

    Quelqu'un aurait une idée pour débloquer la situation??

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Compresser une base de données *.mdb sans Access
    Par Fbartolo dans le forum C++Builder
    Réponses: 12
    Dernier message: 15/03/2009, 14h12
  2. compresser une base de données firebird
    Par QAYS dans le forum Administration
    Réponses: 4
    Dernier message: 12/05/2007, 12h05
  3. Compresser/Compacter une base Sqlite
    Par Gold.strike dans le forum SQLite
    Réponses: 1
    Dernier message: 18/07/2006, 10h12
  4. Taux de compression d'une base Oracle
    Par Manasse dans le forum Oracle
    Réponses: 7
    Dernier message: 30/11/2005, 19h29
  5. compresser une base de donnée
    Par mic79 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 23/02/2005, 11h13

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