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

VB 6 et antérieur Discussion :

Compactage base Access 2010 avec JRO


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 6
    Par défaut Compactage base Access 2010 avec JRO
    Bonjour à tous,

    dans mon entreprise je developpe avec VB6 et Office 2003. Depuis quelques semaines nous avons migré sous Office 2010.
    Je fais donc évoluer mes applis (extention de la base accdb au lieu de mdb, chaine de connection, etc...)
    Par contre je compacte certaines de ces bases avec JRO depuis VB et après compactage, la base de données revient au format Acces 2003.
    Le problème est le même que la base soit protégée par mot de passe ou pas.

    Mon code :
    Appli.Chemin étant le chemin du dossier contenant la base données accdb
    Appli.CheminBase étant le chemin et le nom de la base données accdb
    Appli.CleCryptage étant le mot de passe de la base de données

    Dim JRO As New JRO.JetEngine

    Source = "Provider=Microsoft.ACE.OLEDB.12.0;"
    Source = Source & "Jet OLEDB:Engine Type=5;Data Source=" & Appli.CheminBase & ";"
    Source = Source & "Jet OLEDB:Database Password=" & Appli.CleCryptage & ";"

    Cible = "Provider=Microsoft.ACE.OLEDB.12.0;"
    Cible = Cible & "Jet OLEDB:Engine Type=5;Data Source =" & Appli.Chemin & "BaseTempo.accdb;"
    Cible = Cible & "Jet OLEDB:Database Password=" & Appli.CleCryptage & ";"

    JRO.CompactDatabase Source, Cible
    Set JRO = Nothing

    Kill Appli.CheminBase
    Name Appli.Chemin & "BaseTempo.accdb" As Appli.CheminBase

    Si quelqu'un a déjà résolu ce problème, il me rendrait grandement service.
    Merci d'avance et bonne journée.

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2010
    Messages : 258
    Par défaut SANS REPONSE
    1 an plus tard je me trouve confronté au même problème et mes multiples recherches ne donnent rien.

    La méthode indiquée par "dany108" est celle préconisée par Microsoft mais le fichier obtenu après compactage est au format 2000/2003!
    Outre la perte des caractéristiques particulières liées au format 2010 le fichier de verrouillage reprend l'extension "mdb" au lieu de "lacccdb".

    Alors, vraiment pas d'idée ?

  3. #3
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2013
    Messages : 18
    Par défaut Compactage Base ACCESS 2016
    Bonjour à tous,

    Et 3 ans plus tard le problème reste entier : JRO ne fonctionne qu'avec "Provider=Microsoft.Jet.OLEDB.4.0" et pas avec "Provider=Microsoft.ACE.OLEDB.12.0;". La méthode JRO.CompactDatabase Source, Cible s'arrête avec le message "Argument non valide".

    Merci à quiconque trouvera une solution

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2010
    Messages : 258
    Par défaut Moteur de données Access
    Bonjour,

    J'ai modifié mes applications VB6 et VB.net accédant à des bases Access pour utiliser le moteur "Microsoft Office 14.0 Access Database engine Object Library".
    Cette librairie me permet d'utiliser du code DAO et je compacte les bases Access (2000, 2003, 2010) protégées ou non sans problème - mais j'ai mis du temps à comprendre !

    Voici un extrait de code effectuant le compactage d'une base, les instructions varient selon qu'on utilise un fichier système (identification de l'opérateur connecté) ou pas.
    S'il on utilise un fichier système je ne prends pas en charge le cas ou la base serait elle-même protégée par mot de passe - je ne pratique pas comme ça.
    Si on n'a pas de fichier système la base peut être protégée (variable Pw renseignée) ou pas (Pw = "")

    Source = nom complet de la base à compacter
    Cible = nom complet de la base compactée
    FichierSystème = nom complet du fichier système si utilisé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    '  compactage & réparation automatique
    If FichierSystème = "" Then '  pas de workgroup, vraisemblablement format 2010
       If Pw <> "" Then   '  base 2010 protégée par mot de passe contenu dans la variable Pw
          Pw = ";pwd=" & Pw
          Call DBEngine.CompactDatabase(Source, cible, Pw, , Pw)
       Else   ' pas de mot de passe
          Call DBEngine.CompactDatabase(Source, cible)
       End If '  Pw
    Else   '  utilise l'identification du fichier système; fournis dans cet exemple par les variables gUserId et gUserPwd
       DBEngine.DefaultPassword = gUserPwd
       DBEngine.DefaultUser = gUserId
       Call DBEngine.CompactDatabase(Source, cible)
    End If
    En espérant que ça serve...

  5. #5
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2013
    Messages : 18
    Par défaut
    Citation Envoyé par Depite Voir le message
    Bonjour,

    J'ai modifié mes applications VB6 et VB.net accédant à des bases Access pour utiliser le moteur "Microsoft Office 14.0 Access Database engine Object Library".
    Cette librairie me permet d'utiliser du code DAO et je compacte les bases Access (2000, 2003, 2010) protégées ou non sans problème - mais j'ai mis du temps à comprendre !

    Voici un extrait de code effectuant le compactage d'une base, les instructions varient selon qu'on utilise un fichier système (identification de l'opérateur connecté) ou pas.
    S'il on utilise un fichier système je ne prends pas en charge le cas ou la base serait elle-même protégée par mot de passe - je ne pratique pas comme ça.
    Si on n'a pas de fichier système la base peut être protégée (variable Pw renseignée) ou pas (Pw = "")

    Source = nom complet de la base à compacter
    Cible = nom complet de la base compactée
    FichierSystème = nom complet du fichier système si utilisé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    '  compactage & réparation automatique
    If FichierSystème = "" Then '  pas de workgroup, vraisemblablement format 2010
       If Pw <> "" Then   '  base 2010 protégée par mot de passe contenu dans la variable Pw
          Pw = ";pwd=" & Pw
          Call DBEngine.CompactDatabase(Source, cible, Pw, , Pw)
       Else   ' pas de mot de passe
          Call DBEngine.CompactDatabase(Source, cible)
       End If '  Pw
    Else   '  utilise l'identification du fichier système; fournis dans cet exemple par les variables gUserId et gUserPwd
       DBEngine.DefaultPassword = gUserPwd
       DBEngine.DefaultUser = gUserId
       Call DBEngine.CompactDatabase(Source, cible)
    End If
    En espérant que ça serve...
    Bonjour,
    Et merci pour votre aide mais je n'y arrive toujours pas : la méthode CompacDataBase, si elle fonctionne parfaitement avec les bases ACCESS *.mdb provoque une erreur pour les bases ACCESS *.accdb :

    "Une exception non gérée du type 'System.Runtime.InteropServices.COMException' s'est produite dans CompactDataBase.exe"
    "Informations supplémentaires*: Format de base de données ("*****************.accdb") non reconnu."

    Je pense que le problème se situe soit dans les Imports, soit dans les références, soit dans les 2

    Références :
    Nom : Captureref.JPG
Affichages : 1114
Taille : 31,2 Ko

    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
    Imports System.Data
    Imports System.Runtime.InteropServices
    Imports System.IO
    Imports DAO
    'Imports DAO.LanguageConstants
     
    Public Class Form1
        Dim infoReader As System.IO.FileInfo
        Dim strSourcePath As String = ""
     
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            'OpenFileDialog1.Filter = "Base ACCESS 2010 (*.accdb)|*.accdb"  '   activer pour access 2010
            OpenFileDialog1.Filter = "Base ACCESS 97 (*.mdb)|*.mdb"         '   activer pour access 97
            OpenFileDialog1.ShowDialog()
            Label1.Text = OpenFileDialog1.FileName
            strSourcePath = Label1.Text
            infoReader = My.Computer.FileSystem.GetFileInfo(strSourcePath)
            Dim SizeBefore As Double = infoReader.Length
            Label4.Text = Format(SizeBefore / 1048576, "###.# Mo")
        End Sub
     
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim DBE As New DBEngine
     
            'Dim strDestPath As String = Replace(Label1.Text, ".accdb", "_new.accdb")  '   activer pour access 2010
            Dim strDestPath As String = Replace(Label1.Text, ".mdb", "_new.mdb")       '   activer pour access 97
            infoReader = My.Computer.FileSystem.GetFileInfo(strDestPath)
            If infoReader.Exists Then Kill(strDestPath)
     
            DBE.CompactDatabase(strSourcePath, strDestPath)
     
            infoReader = My.Computer.FileSystem.GetFileInfo(strDestPath)
            Dim SizeAfter As Double = infoReader.Length
            Label5.Text = Format(SizeAfter / 1048576, "###.# Mo")
        End Sub
    End Class
    Merci si vous pouvez m'aider

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2010
    Messages : 258
    Par défaut
    ATTENTION: ce n'est pas Microsoft.Office.interop.Access.DAO que j'utilise mais "Microsoft Office 14.0 Access Database engine Object Library" comme je l'indiquais dans mon précédent Post.

    Est-ce que ça te pose un problème d'ajouter cette ressource à ton projet ?
    Elle offre l'intégralité des commandes de gestion des objets de bases de données Access 2010 en DAO dont le compactage des bases Accdb comme je le montre dans mon Post.

    A toutes fins utiles et pour qu'il n'y ait pas de confusion voici le lien de téléchargement de cette ressource:
    https://www.microsoft.com/fr-fr/down....aspx?id=13255

    Je précise encore que, bien que j'ai utilisé un extrait de code VB6 j'emploie également cette ressource dans des projets VB.net.

    Bon code!

Discussions similaires

  1. [XL-2010] Faire fonctionner une requête qui lit une base Access 2010 avec mot de passe
    Par mister red dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/03/2015, 16h39
  2. [AC-2010] Sauvegarde base Access 2010 avec scrip powershell
    Par patito1975 dans le forum Access
    Réponses: 5
    Dernier message: 03/03/2014, 13h00
  3. Réponses: 4
    Dernier message: 20/06/2012, 13h56
  4. [VB6+Base Access]probleme avec des dates calculées
    Par jam92400 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 18/01/2007, 18h26
  5. Réponses: 2
    Dernier message: 23/02/2006, 12h23

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