2 votes

Pourquoi ma winform se redimensionne-t-elle lorsque j'ouvre une base de données Access (.accdb), et comment puis-je y remédier ?

J'ai un grand projet sur lequel je travaille et l'ouverture d'une base de données Access provoque le rétrécissement de l'ensemble du formulaire. Après plusieurs jours, j'ai réduit le problème à l'ouverture d'une base de données Access (.accdb) au sein de mon projet. (Il est possible que cela fonctionne avec d'autres bases de données, mais je ne l'ai confirmé qu'avec Access.

Pour confirmer que l'ouverture de la base de données est le problème, j'ai créé un petit projet avec un seul bouton, une boîte de dialogue Ouvrir un fichier pour ouvrir la base de données.

Voici tout le code de ce projet.

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

using ADOX; //Requires Reference 'Microsoft ADO Ext. 6.0 for DDL and Security' found in the reference manager under COM. Rightclick and click add reference...
using ADODB; //Requires Reference 'ADODB' found in the reference manager under assemblies. Rightclick and click add reference...

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        String databaseLocation = "";
        String connectionString = "";
        String q = "";

        OleDbConnection conn = null;

        bool DatabaseOpen = false;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void bStartLoad_Click(object sender, EventArgs e)
        {
            openDB.Title = "Select Database To Load";
            openDB.InitialDirectory = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(Application.ExecutablePath), @"Databases");
            openDB.FileName = "";
            openDB.Filter = "Access Database|*.accdb";

            try
            {

                if (openDB.ShowDialog() == DialogResult.Cancel)
                {

                    MessageBox.Show("Operation Cancelled");

                }
                else {
                    databaseLocation = openDB.FileName;
                    connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + databaseLocation + ";Persist Security Info=False";
                    conn = new OleDbConnection(connectionString);
                    conn.Open();
                    DatabaseOpen = true;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

    }
}

Pour gagner du temps, j'ai téléchargé le projet de test vers Mon DropBox ici

Je n'ai aucune idée de la raison pour laquelle ce redimensionnement se produit, mes professeurs ont également été déconcertés, alors peut-être que quelqu'un d'autre pourra trouver la solution.

REMARQUE : Pour résoudre ce problème, vous devez ouvrir un fichier de base de données .accdb, car le problème ne se produit que si la base de données est ouverte et que la connexion a été établie. conn.open() ; Vous pouvez également avoir besoin du pilote de https://www.microsoft.com/en-us/download/details.aspx?id=23734 si vous obtenez une erreur lorsque vous essayez d'ouvrir une base de données.

1voto

Yuri Suzumiya Points 23

J'ai trouvé des informations sur OleDb / OleDbConnection redimensionnement du formulaire (bug ?) qui m'a aidé à résoudre le problème.

Il s'agit d'un problème lié à Microsoft, mais le problème dans mon cas était que j'avais installé 2007 Office System Driver : Data Connectivity Components de https://www.microsoft.com/en-us/download/details.aspx?id=23734 car il est nécessaire pour ouvrir des connexions afin d'accéder aux bases de données sur les ordinateurs 64bit, mais le simple fait d'avoir cela provoque le problème de redimensionnement et ne fournit pas d'erreurs ou de retour d'information sur le problème, et comme je ne modifie pas directement la taille dans mon formulaire, cela devient vraiment confus et difficile à déboguer.

Cependant, j'ai également découvert que l'installation de Microsoft Access Database Engine 2010 Redistributable (32bit) trouvé à l'adresse https://www.microsoft.com/en-au/download/details.aspx?id=13255 corrige le problème de redimensionnement qui se produit lors de l'ouverture de la base de données.

J'espère que cela aidera d'autres personnes à l'avenir qui tentent de charger et d'enregistrer des données dans une base de données Access.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X