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 :

[c#] compactage d'une base Access


Sujet :

Access

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 9
    Points : 1
    Points
    1
    Par défaut [c#] compactage d'une base Access
    Alors après de longue recherche (pas trouvé )

    Je m'en remet à vous les autres dev.

    J'explique le truc quand je crée ma base Access avec ADOX

    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
     
    class Class1
    	{
    		[STAThread]
    		static void Main(string[] args)
    		{
    			createDB();
    			ADODB.ConnectionClass conn = new ADODB.ConnectionClass();
    						conn.ConnectionString = "Data Source=test.mdb;";
     
    			JRO.JetEngine compact = new JRO.JetEngineClass();
    			compact.CompactDatabase("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb;","Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test2.mdb;");
    			Console.ReadLine();
    		}
     
    		private static void createDB()
    		{
    			ADOX.CatalogClass cat = new ADOX.CatalogClass();
    			cat.Create(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb;");
    			cat=null;
    			Console.WriteLine("BD CREER");
    		}
    	}
    La base est bien créer mais après au moment du compactage, une erreur se produit. J'ai bien compris qu'un utilisateur était connecté à la base. Mais je ne sais pas comment me déconnecter une solution pour ca ca serait top.

    Merci d'avance.

  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 : 40
    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
    A priori cela vient de ta connexion ADODB avant. Tu ne dois pas être connecté à la base avant compactage. Utilise uniquement JRO ici.

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Oui mais je ne peux pas me servir de jro pour créer la base.

    il faut obligatoirment que j'utilise ADOX.

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Non personne n'a une idée ?

  5. #5
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Pourquoi compacter une base qui ne contient pas de tables ?

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Ok d'accord c'est ma faute.

    J'entre des donées entre temps avec un dataset.

    Mais le problème est le même.

    Le vrai problème si quelqu'un peut essayer le fichier .ldb bloc le compactage de la base.

    Moi ce que je voudrais c'est supprimer tous les utilisateur qui sont en train d'utiliser cette base.

    Et compacter ma base qui a une table.

  7. #7
    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 : 40
    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
    Désolé, je ne comprend pas ...

    Je ne vois nulle part de ADOX

    La ligne qui bloque le compactage est celle ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ADODB.ConnectionClass conn = new ADODB.ConnectionClass(); 
                      conn.ConnectionString = "Data Source=test.mdb;";
    De même avant compactage il faudra fermer tout recordset

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Voila le code que j'essaye de faire fonctionner et l'erreur qu'il me fait

    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
     
    using System;
    using System.Data;
    using System.IO;
     
     
    namespace ConsoleApplication1
    {
    	/// <summary>
    	/// Summary description for Class1.
    	/// </summary>
    	class Class1
    	{
    		[STAThread]
    		static void Main(string[] args)
    		{
    			createDB();
    			JRO.JetEngine compact = new JRO.JetEngineClass();
    			compact.CompactDatabase("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb;User ID=Admin;","Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test2.mdb;User ID=Admin;");
    			Console.ReadLine();
    		}
     
    		private static void createDB()
    		{
    			ADOX.CatalogClass cat = new ADOX.CatalogClass();
    			cat.Create(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb;");
    			cat=null;
    			Console.WriteLine("BD CREER");
    		}
    	}
    }
    An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in ConsoleApplication1.exe

    Additional information: You attempted to open a database that is already opened exclusively by user 'Admin' on machine 'MACHINE'. Try again when the database is available.

    Ca sera peut etre plus clair. En tout cas merci de passer du temps à regarder.

  9. #9
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Re,

    Le principe du compactage reste le même qu'il soit développé en VB en .Net ou en C#.
    Tu as un BDD nommée ActualDB que tu veux compacter...
    Il te faut spécifier alors le nouveau nom temporaire de la base compactée, détruire l'ancienne et renommer la nouvelle avec l'ancien nom.
    C'est pour cela que tu as l'erreur... Tu ne peux pas compacter une base qui est ouverte.
    Algo:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Compact ActualDB, TempDB
    Kill ActualDB
    Name TempDB As ActualDB
    Bien entendu, un Try/Catch s'impose mais j'ai le sentiment que tu découvre le C#, non ???

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  10. #10
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    J'ai viré le try catch pour que ca soit plus lisible.

    Mais c'est ce que je fais je prend la base actuel test et je la compacte en test2

    Mais au moment où je la compacte bim erreur, l'erreur me dit qu'elle est ouverte comment dois je faire pour la fermer avant de la compacter en prenant ce code.

  11. #11
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    De plus ce code n'est qu'un exemple simple qu'on arrive pas à résoudre alors si c'était plus compliqué.

    (ref tu débute c#)

  12. #12
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Bon, je te propose de tenter avec ceci...
    Ca fonctionne et bien entendu, c'est une base qui contient des tables

    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
    		/// <summary>
    		/// Point d'entrée principal de l'application.
    		/// </summary>
    		[STAThread]
    		static void Main() 
    		{
    		Application.Run(new Form1());
    		} 
     
    		private void button1_Click(object sender, System.EventArgs e)
    		{
            // Faire une référence COM à MSJRO.DLL
            String PROVIDER  = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=";
            String JETOLEDB = ";Jet OLEDB:Engine Type=5";
            String strDBSource = "C:\\Documents and Settings\\argyronet\\Mes documents\\Comptoir.mdb";
            String strDBTemp = "C:\\Documents and Settings\\argyronet\\Mes documents\\ComptoirTMP.mdb";
    			try 
    			{
    				JRO.JetEngine oJRO = new JRO.JetEngine(); 
    				oJRO.CompactDatabase(PROVIDER + strDBSource, PROVIDER + strDBTemp + JETOLEDB);
    				System.IO.File.Delete(strDBSource);
    				System.IO.File.Move(strDBTemp, strDBSource);
    			}
     
    			catch (Exception ex)
    			{
    				Console.WriteLine("{0} Y a un shmurtz !!!", ex);
     
    			}
    		}
    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  13. #13
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Non mais je sais que ca marche avec une base qui existe, LE problème c'est que quand je crée la base ensuite il me laisse un utilisateur connecté. Je veux juste le virer cette utilisateur.

    J'ai bien compris comment marche le compactage.

    Mais bon ya rien à faire on se comprend pas

    Dommage tampis pour moi.

  14. #14
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Bah, il faut que tu fermes la base de données !!!
    Ca me parait évident, non...
    Tu ne peux pas compacter une base ouverte...

    Tu créés, tu quittes, tu compactes...

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  15. #15
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    C'est ce que je cherche à faire !!!

    Depuis le début je veut quittez

  16. #16
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Ok, ok, te fâche pas
    Voilà...

    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
     
    		[STAThread]
    		static void Main() 
    		{
    		Application.Run(new Form1());
    		} 
     
    		private void cmdCompact_Click(object sender, System.EventArgs e)
    		{
            // Faire une référence COM à MSJRO.DLL
            String PROVIDER  = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=";
            String JETOLEDB = ";Jet OLEDB:Engine Type=5";
     
    		String strDBTarget = "C:\\Documents and Settings\\Argyronet\\Mes documents\\MyDB.mdb";
            String strDBTemp = "C:\\Documents and Settings\\Argyronet\\Mes documents\\MyTMP.mdb";
        // Création de la Base...
    			CreateDB();
    			try 
    			{
    				JRO.JetEngine oJRO = new JRO.JetEngine(); 
    				oJRO.CompactDatabase(PROVIDER + strDBTarget, PROVIDER + strDBTemp + JETOLEDB);
    				System.IO.File.Delete(strDBTarget);
    				System.IO.File.Move(strDBTemp, strDBTarget);
    			}
     
    			catch (Exception ex)
    			{
    				Console.WriteLine("{0} Boulette !!!", ex);
     
    			}
    		}
     
    		private void cmdCreate_Click(object sender, System.EventArgs e)
    		{
    			CreateDB();
    		}
     
    		private void CreateDB()
    		{
    			// Faire une référence COM à Microsoft ADO Ext. 2.7 for DDL and Security
    			String PROVIDER  = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=";
    			String JETOLEDB = ";Jet OLEDB:Engine Type=5";
    			String strDBTarget = "C:\\Documents and Settings\\Argyronet\\Mes documents\\MyDB.mdb";
    			ADOX.CatalogClass clsCAT = new ADOX.CatalogClass();
    			clsCAT.Create(PROVIDER + strDBTarget + JETOLEDB);
     
    			ADODB.Connection oCnx = clsCAT.ActiveConnection as	ADODB.Connection;
    			if (oCnx != null)
    			{
    				oCnx.Close();
    			}
    			clsCAT.ActiveConnection = null;
    			clsCAT = null;
    		}
    ++
    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  17. #17
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    moah ce que je croah c'est qu'après de longues vacances dans la mare access on a envie de retourner chez soah, à la maison des grenouilles : http://froggyhome.com !


    désolé mais je ne pouvais pas laisser passer ça.


    signé bruno : fondu d'access (depuis 1996) et de météo, éditeur de http://froggyhome.com

Discussions similaires

  1. compactage d'une base de données access déjà ouverte
    Par djelloharmel dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 24/08/2011, 17h16
  2. probleme lors du compactage d'une base de donnée access
    Par modafine dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 11/12/2008, 11h50
  3. [D7],[Access],[ado], compactage d'une base de données
    Par iam dans le forum Bases de données
    Réponses: 1
    Dernier message: 19/03/2007, 09h42
  4. compactage d'une base access
    Par tomy29 dans le forum Bases de données
    Réponses: 4
    Dernier message: 17/11/2006, 15h48
  5. Renommer une base access après compactage
    Par VBBBA dans le forum Access
    Réponses: 5
    Dernier message: 04/09/2006, 16h37

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