为啥我打开 access 数据库 (.accdb) 时我的 winform 会调整大小,我该如何解决?
Posted
技术标签:
【中文标题】为啥我打开 access 数据库 (.accdb) 时我的 winform 会调整大小,我该如何解决?【英文标题】:Why does my winform resize when i open an access database (.accdb), and how do i fix it?为什么我打开 access 数据库 (.accdb) 时我的 winform 会调整大小,我该如何解决? 【发布时间】:2016-06-13 20:03:24 【问题描述】:我正在处理一个大型项目,其中打开 Access 数据库会导致整个表单缩小,经过很多天后,我已将问题缩小到在我的项目中打开 Access 数据库 (.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 的驱动程序。
【问题讨论】:
您是否显示了有关 DataGridView 的任何内容.. 我无法看到单击一个简单按钮后表单如何调整大小.. 你为什么不检查设计器.. 你有吗尝试使用调试器查看是否发生了其他事情..?我也怀疑是否有人会下载您的源代码并为您调试它.. 不,我所做的只是拖入一个按钮和 openFile 对话框,没有包含任何其他内容,仍应设置为默认值。 可能只是 Visual Studio 2015 的错误 这有帮助吗***.com/questions/6351081/… 这些属性在 VS 2015 中似乎不可编辑,我也尝试了那里提到的建议,但在这种情况下它们不起作用。 【参考方案1】:在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 (32bit) 发现于https://www.microsoft.com/en-au/download/details.aspx?id=13255 修复了打开数据库时出现的调整大小问题。
希望这对将来也尝试将数据加载和保存到 access 数据库的其他人有所帮助。
【讨论】:
以上是关于为啥我打开 access 数据库 (.accdb) 时我的 winform 会调整大小,我该如何解决?的主要内容,如果未能解决你的问题,请参考以下文章
MS Access/accdb“无法打开数据库”错误(C#)
MS Access .accdb 文件为其他打开,但给了我“无法识别的数据库格式”
可以从 R 打开 accdb 数据库(MS Access),现在我不能
Access Office 365 accdb 文件完全零覆盖的原因?