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 :

Lier plusieurs bases access par code


Sujet :

Accès aux données

  1. #1
    Membre à l'essai
    Homme Profil pro
    apprenti
    Inscrit en
    Décembre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 13
    Points : 10
    Points
    10
    Par défaut Lier plusieurs bases access par code
    Bonjour,

    J'ai crée une application en C#, mon problème est que je souhaiterai afficher plusieur base access (.accdb) dans le même datagried via des lignes de code.
    Mon application génère chaque année une nouvelle base (actuelement: Base2013.accdb, Base2014.accdb, Base2015.accdb, Base2016.accdb).
    Si je lie mes base directement dans acces et que je les unies, j'arrive à afficher toute mes bases dans la même datagried, mais les nouvelles base ne serons pas inclues automatiquement...

    Si vous avez des idées .

    Merci pour votre aide!!!

  2. #2
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    si tes .accdb sont tous dans le même répertoire tu pourrais les lister et donc prendre en compte toute nouvelle base ajoutée, nop ?
    Plus je connais de langages, plus j'aime le C.

  3. #3
    Membre à l'essai
    Homme Profil pro
    apprenti
    Inscrit en
    Décembre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par jopopmk Voir le message
    Salut,

    si tes .accdb sont tous dans le même répertoire tu pourrais les lister et donc prendre en compte toute nouvelle base ajoutée, nop ?
    Je sais pas si c'est possible de lier la totalité des .accdb d'un fichier mais si c'est possible ca résoudrai mon problème. Et dû coups j'aimerai bien savoir comment faire ça...

  4. #4
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Ben je sais pas comment tu "lies" tes bases de données.
    Soit tu arrives à faire ce lien avec du code, soit tu remplies toi-même ton DataGrid en requêtant chacune de tes bases.
    Tiens, j'ai aussi trouver ça qui pourrait être une solution (à creuser, ni validé ni testé) : Linking two access databases in C#
    Plus je connais de langages, plus j'aime le C.

  5. #5
    Membre à l'essai
    Homme Profil pro
    apprenti
    Inscrit en
    Décembre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par jopopmk Voir le message
    Ben je sais pas comment tu "lies" tes bases de données.
    Soit tu arrives à faire ce lien avec du code, soit tu remplies toi-même ton DataGrid en requêtant chacune de tes bases.
    Tiens, j'ai aussi trouver ça qui pourrait être une solution (à creuser, ni validé ni testé) : Linking two access databases in C#
    Par lier je veut dire utiliser dans access dans l'onglet "données externes", "importer et lier", "access", et utiliser le mode "lier à la source de donnée en créant une table attaché". Cela me permet d'utiliser par la suite la fonction union dans une requête

    (OledbaDapter.SelectCommand = new OleDbCommand("SELECT * FROM [base2013] union SELECT * FROM [base2014] union SELECT * FROM [base2015] union SELECT * FROM [base2016]", con));

  6. #6
    Membre actif
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Avril 2006
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 141
    Points : 210
    Points
    210
    Par défaut
    Bonjour,

    Techniquement ce n'es pas possible il me semble. maintenant rien ne vous empêche de lire les différentes base de données, de créé un objet ou vous déversez le tout et ensuite vous l'affiché dans la grid.
    Vous utilisez quelle méthode pour lire les données ? entity ou DataSet ?

    Cordialement,
    DSI et développeur du logiciel Lulidb
    http://www.lulidb.com - outils de gestion de base de données orienté développer.

  7. #7
    Membre à l'essai
    Homme Profil pro
    apprenti
    Inscrit en
    Décembre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Pour me connecter à ma base de donnée j'utilise des commandes OleDb.

    BindingSource bSour = new BindingSource();
    //Connexion à la base access
    OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\Base.accdb");

    //Création de la data adapter
    OleDbDataAdapter oledbaDapter;
    //Déclaration de la data set
    DataSet ds;
    //Déclaration de la commande
    OleDbCommand cmd;

    public Test()
    {
    InitializeComponent();
    }

    private void Test_Load(object sender, EventArgs e)
    {
    afficher();
    }

    public void afficher()
    {
    //Vérifier si le statue de la base est fermé
    if (con.State.ToString().Equals("Closed"))
    {
    //Si fermé alors l'ouvrir
    con.Open();
    }
    oledbaDapter = new OleDbDataAdapter();
    ds = new DataSet();

    try
    {
    oledbaDapter.SelectCommand = new OleDbCommand("SELECT * FROM [GENERAL1] union SELECT * FROM [GENERAL2] union SELECT * FROM [GENERAL3] union SELECT * FROM [GENERAL4]", con);
    dataGridView1.DataSource = null;
    oledbaDapter.Fill(ds, "GENERAL");
    oledbaDapter.Dispose();
    }
    catch (Exception ex)
    {
    //Si erreur alors afficher l'erreur
    MessageBox.Show(ex.ToString());
    }
    //Vérifier si le statue de la base est ouvert
    if (con.State.ToString().Equals("Open"))
    {
    //Si ouvert alors fermer
    con.Close();
    }
    bSour.DataSource = ds;
    bSour.DataMember = "GENERAL";
    dataGridView1.DataSource = bSour;

    dataGridView1.Sort(this.dataGridView1.Columns[7], ListSortDirection.Descending);

    Voici mon code pour me connecter à ma base et pour l'afficher dans mon datagriedview (GENERAL1,GENERAL2,GENERAL3 et GENERAL4 correspond aux autres base access que j'ai lier à celle ci vias access).

  8. #8
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Pense à utiliser les balises CODE (bouton #)

    Sinon je viens de voir que la classe DataSet possède une méthode Merge. Ça correspondrait pas à ton besoin ?
    Pour chaque fichier tu remplies un DataSet, tu les merges tous dans un seul puis tu le files à manger à ton DataGridView.
    Par contre il faut les mêmes noms/types de champs et mêmes noms de table.

    A voir.
    Plus je connais de langages, plus j'aime le C.

  9. #9
    Membre à l'essai
    Homme Profil pro
    apprenti
    Inscrit en
    Décembre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par jopopmk Voir le message
    Pense à utiliser les balises CODE (bouton #)

    Sinon je viens de voir que la classe DataSet possède une méthode Merge. Ça correspondrait pas à ton besoin ?
    Pour chaque fichier tu remplies un DataSet, tu les merges tous dans un seul puis tu le files à manger à ton DataGridView.
    Par contre il faut les mêmes noms/types de champs et mêmes noms de table.

    A voir.
    je vais voir comment fonction cette fonction mais elle as de correspondre à ce que je recherche. toute mes bases sont identique en noms et en types, seul le contenu diffère.

    merci.

  10. #10
    Membre à l'essai
    Homme Profil pro
    apprenti
    Inscrit en
    Décembre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    J'ai essayé la fonction merge, ça marche!!!

    une peut briquol mais maintenant mon application peut créer charque début d'année une nouvelle base toute en affichant les anciennes tout ca sans l'intervantion de quelqu'un.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.OleDb;
    using System.IO;

    namespace WindowsFormsApplication1
    {
    public partial class Test : Form
    {


    BindingSource bSour = new BindingSource();
    //Connexion à la base access
    OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\User\\Data\\BaseTest(2016).accdb");

    //Création de la data adapter
    OleDbDataAdapter oledbaDapter;
    //Déclaration de la data set
    DataSet das;
    DataSet ds;
    //Déclaration de la commande
    OleDbCommand cmd;

    List<OleDbConnection> con = new List<OleDbConnection>();

    public Test()
    {
    InitializeComponent();
    }

    private void Test_Load(object sender, EventArgs e)
    {
    afficher();
    }

    public void afficher()
    {
    string[] filenames = Directory.GetFiles(@"C:\User\SAV\Data\", "*.accdb", SearchOption.TopDirectoryOnly);
    foreach (string fName in filenames)
    {
    con.Add(new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fName));
    }

    int nb = Directory.GetFiles(@"C:\User\SAV\Data\", "*.accdb", SearchOption.AllDirectories).Length;

    //Vérifier si le statue de la base est fermé
    if (conn.State.ToString().Equals("Closed"))
    {
    //Si fermé alors l'ouvrir
    conn.Open();
    }
    oledbaDapter = new OleDbDataAdapter();
    das = new DataSet();

    try
    {
    oledbaDapter.SelectCommand = new OleDbCommand("SELECT * FROM [GENERAL]", conn);
    dataGridView1.DataSource = null;
    oledbaDapter.Fill(das, "GENERAL");
    oledbaDapter.Dispose();
    }
    catch (Exception ex)
    {
    //Si erreur alors afficher l'erreur
    MessageBox.Show(ex.ToString());
    }
    //Vérifier si le statue de la base est ouvert
    if (conn.State.ToString().Equals("Open"))
    {
    //Si ouvert alors fermer
    conn.Close();
    }

    for (int i = 1; i <= nb; i++)
    {
    //Vérifier si le statue de la base est fermé
    if (con[i-1].State.ToString().Equals("Closed"))
    {
    //Si fermé alors l'ouvrir
    con[i-1].Open();
    }
    oledbaDapter = new OleDbDataAdapter();
    ds = new DataSet();

    try
    {
    oledbaDapter.SelectCommand = new OleDbCommand("SELECT * FROM [GENERAL]", con[i-1]);
    dataGridView1.DataSource = null;
    oledbaDapter.Fill(ds, "GENERAL");
    oledbaDapter.Dispose();
    }
    catch (Exception ex)
    {
    //Si erreur alors afficher l'erreur
    MessageBox.Show(ex.ToString());
    }
    //Vérifier si le statue de la base est ouvert
    if (con[i-1].State.ToString().Equals("Open"))
    {
    //Si ouvert alors fermer
    con[i-1].Close();
    }

    das.Merge(ds, true, MissingSchemaAction.Add);
    }

    bSour.DataSource = das;
    bSour.DataMember = "GENERAL";
    dataGridView1.DataSource = bSour;

    dataGridView1.Sort(this.dataGridView1.Columns[7], ListSortDirection.Descending);
    }
    }
    }

  11. #11
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Bonne nouvelle

    Mais n'oublie pas d'utiliser les balises CODE ...
    Plus je connais de langages, plus j'aime le C.

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

Discussions similaires

  1. Changer le Mot de Passe d'une Base Access par Le code
    Par sigap dans le forum Contribuez
    Réponses: 9
    Dernier message: 21/12/2010, 11h36
  2. Evolution code sur plusieurs bases access
    Par Phabbrrysse dans le forum VBA Access
    Réponses: 10
    Dernier message: 29/08/2008, 18h05
  3. Réponses: 2
    Dernier message: 02/02/2007, 14h53
  4. [VB] Ouverture d'une base Access par le code
    Par jouf dans le forum Access
    Réponses: 4
    Dernier message: 15/06/2006, 17h54
  5. pb de reconnaissance de base access par excel
    Par xycoco dans le forum Access
    Réponses: 1
    Dernier message: 02/02/2006, 20h19

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