为什么我的 winform 在打开访问数据库 (.accdb) 时会调整大小,我该如何解决?
Why does my winform resize when i open an access database (.accdb), and how do i fix it?
我有一个正在处理的大型项目,打开一个访问数据库会导致整个表单缩小,经过很多天我已经将问题缩小到在我的项目中打开一个访问数据库 (.accdb)。 (也可能与其他数据库一起工作,但我只用 Access 确认过。
为了确认打开数据库是问题所在,我创建了一个只有一个按钮的小项目,一个用于打开数据库的“打开文件”对话框。
这是该项目中的所有代码。
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);
}
}
}
}
为了节省时间我把测试项目上传到My DropBox Here
我不知道为什么会发生这种调整,我的老师也被难住了,所以也许其他人可以解决。
注意:要遇到此问题,您需要打开 .accdb 数据库文件,因为只有打开数据库并建立连接后才会出现此问题。 conn.open();如果您在尝试打开数据库时遇到错误,您可能还需要来自 https://www.microsoft.com/en-us/download/details.aspx?id=23734 的驱动程序。
在 OleDb / OleDbConnection resizing form (bug?) 上找到了一些帮助我解决问题的信息。
这是微软的问题,但我的问题是我已经安装了
2007 Office System 驱动程序:来自 https://www.microsoft.com/en-us/download/details.aspx?id=23734 的数据连接组件,因为它需要打开连接以访问 64 位计算机上的数据库,但仅仅拥有它会导致调整大小问题并且不会提供任何错误或反馈问题,就像我一样不直接更改我表单中任何地方的大小,它变得非常混乱且难以调试。
但是我还发现还安装了 Microsoft Access Database Engine 2010 Redistributable(32 位)
https://www.microsoft.com/en-au/download/details.aspx?id=13255 修复了打开数据库时发生的调整大小问题。
希望这对将来也尝试将数据加载和保存到访问数据库的其他人有所帮助。
我有一个正在处理的大型项目,打开一个访问数据库会导致整个表单缩小,经过很多天我已经将问题缩小到在我的项目中打开一个访问数据库 (.accdb)。 (也可能与其他数据库一起工作,但我只用 Access 确认过。
为了确认打开数据库是问题所在,我创建了一个只有一个按钮的小项目,一个用于打开数据库的“打开文件”对话框。
这是该项目中的所有代码。
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);
}
}
}
}
为了节省时间我把测试项目上传到My DropBox Here
我不知道为什么会发生这种调整,我的老师也被难住了,所以也许其他人可以解决。
注意:要遇到此问题,您需要打开 .accdb 数据库文件,因为只有打开数据库并建立连接后才会出现此问题。 conn.open();如果您在尝试打开数据库时遇到错误,您可能还需要来自 https://www.microsoft.com/en-us/download/details.aspx?id=23734 的驱动程序。
在 OleDb / OleDbConnection resizing form (bug?) 上找到了一些帮助我解决问题的信息。
这是微软的问题,但我的问题是我已经安装了 2007 Office System 驱动程序:来自 https://www.microsoft.com/en-us/download/details.aspx?id=23734 的数据连接组件,因为它需要打开连接以访问 64 位计算机上的数据库,但仅仅拥有它会导致调整大小问题并且不会提供任何错误或反馈问题,就像我一样不直接更改我表单中任何地方的大小,它变得非常混乱且难以调试。
但是我还发现还安装了 Microsoft Access Database Engine 2010 Redistributable(32 位) https://www.microsoft.com/en-au/download/details.aspx?id=13255 修复了打开数据库时发生的调整大小问题。
希望这对将来也尝试将数据加载和保存到访问数据库的其他人有所帮助。