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

Accès aux données Discussion :

Creer base access dynamiquement (à partir du code C#)


Sujet :

Accès aux données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Par défaut Creer base access dynamiquement (à partir du code C#)
    Bonjour,
    j'ai une application qui se sert d'une db access.
    je souhaiterai savoir si il est possible de creer cette base + les tables a partir du code (j'ai un doute si je suis sur le bon forum ...)
    Merci de vos reponses.

  2. #2
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Par défaut
    A essayer dans un projet console:

    tu spécifies dans la console le path complet et l'extension mdb.
    eg. : C:\TMP\MADB.mdb

    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
     
    using System;
    using System.Collections.Generic;
    using System.Text;
     
    namespace CreateMDB
    {
        class Program
        {
            static void Main(string[] args)
            {
                string _name = Console.ReadLine();
                Type _adox = Type.GetTypeFromProgID("ADOX.Catalog");
                if (_adox != null)
                    {
                            object _object = Activator.CreateInstance(_adox);
                            _object.GetType().InvokeMember("Create",System.Reflection.BindingFlags.InvokeMethod, null, _object, new object[]{
                    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + _name + ";" });
                    Console.WriteLine("Database created");
                    Console.ReadLine();
                    }
     
        }
        }
    }

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Par défaut
    ok je vais testé ca. Mais dans mon cas il faudrait pouvoir creer une table et sa structure pour que ce soit utilisable.
    je continue ma recherche, merci de ton aide.

  4. #4
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Par défaut
    Ben je vois pas le rapport :
    1 - tu génére le fichier MDB
    2 - Tu te connectes et tu envois les tables.

    .....

    Je suis pas certain de comprendre ce qui te manque.?

  5. #5
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Solution 1 : tu peux recopier une base de reference (Fichier mdb) avec des tables vides et l'exploiter ensuite.

    Solution 2 : ADOX
    Créer la base (vide sans tables) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    using ADOX;  
    // add a COM reference to "Microsoft ADO Ext. x.x for DDL and Security" static void CreateMdb(string fileNameWithPath)
    { 
      ADOX.Catalog cat = new ADOX.Catalog();
      string connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Jet OLEDB:Engine Type=5";  
      cat.Create(String.Format(connstr, fileNameWithPath)); 
    }
    Ajouter les 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
    //Set a COM Reference to "Microsoft ADO Extensions for DDL and Security" (ADOX) 
     
    private ADOX.Catalog cat = new ADOX.Catalog(); 
    private ADOX.Table tbl = new ADOX.Table(); 
    private string db_file_path; 
    db_file_path = ActiveWorkbook.Path + "\\abc.mdb"; 
    //connect to the Access database 
    cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + db_file_path; 
     
    //Create a table 
    tbl.Name = "Prospects"; 
    // First, fields are appended to the table object 
    // Then the table object is appended to the Tables collection 
    tbl.Columns.Append "Name", adVarWChar; 
    tbl.Columns.Append "Company", adVarWChar; 
    tbl.Columns.Append "Phone", adVarWChar; 
    tbl.Columns.Append "Address", adVarWChar; 
     
    cat.Tables.Append tbl; 
     
    Set cat = null; 
    MessageBox.Show()MsgBox "Table created!";

  6. #6
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Par défaut
    Je vois pas trop la différence sauf que dans la solution 2 il faut qu'il puisse référence la com directement dans son projet et la redistribuer.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Par défaut
    Citation Envoyé par B.AF Voir le message
    2 - Tu te connectes et tu envois les tables.
    C'est ce point la que je n'ai pas saisi.
    C'est a dire tu envois les tables?
    Merci

  8. #8
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Par défaut
    Plusieurs options :

    Soit tu passes par l'interrop com ADO (pour moi, bof...)
    Soit tu passes par des instructions SQL ("CREATE Table ...")
    Soit tu utilises un ORM qui peut générer les tables depuis les entités

    Par rapport au code que je t'ai envoyé :
    Tu crées la base access en utilisant le code que je t'ai envoyé
    Si la création est un succès;
    Tu crées une connection à cette base et tu travailles avec :
    Tuto développez.com

    Il faut juste que tu dissocies le fait de créer un fichier MDB avec le fait de travailler une connection ADO.NET vers access.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/10/2008, 12h00
  2. Comment creer un rapport dynamiquement avec le code
    Par fulles dans le forum SAP Crystal Reports
    Réponses: 7
    Dernier message: 02/09/2008, 10h34
  3. Comment créer un exe à partir des codes source
    Par daniel50171 dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 20/08/2007, 19h49
  4. Réponses: 5
    Dernier message: 10/07/2006, 15h02
  5. Mise à jour de la base Access a partir des fichiers Ascii
    Par mehdichess74 dans le forum Access
    Réponses: 3
    Dernier message: 21/06/2006, 18h00

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