我在询问是否可以在.Net表单中托管Microsoft Access表单。
不,我没有发疯,我们正在维护一个完全由VBA编写的大型系统,有些人不知道很多VBA试图将Microsoft Access用作IDE。它基本上是成千上万的意大利面条代码,虽然我们希望废弃它并从头开始,但这不是一种选择。
因此,我们正在努力改进那里的内容,在这种特殊情况下,如果我们可以以某种方式在.Net Windows窗体中托管Microsoft Access表单,那将非常有用,因为我们可以与.Net的专有硬件进行交互。比VB6更有效。
我们目前有一个.Net应用程序,可以在计算机上运行,同时用户可以在任何时间打开许多MS-Access数据库,而.Net应用程序使用MS Access Interop与这些数据库进行交互,取得了不同程度的成功。这是因为它使用表单标题和文件名/位置来获取数据库的句柄以执行它需要做的事情,并且还依赖于用户不干扰/关闭应用程序/将数据库移动到他们的桌面等。这是一个有点乱。
因此,我问是否有可能以某种方式在.Net Windows窗体中托管Microsoft Access窗体,可能会将窗体本身添加为控件或子窗体,以便能够直接访问所有窗体.Net?
表单上的控件答案 0 :(得分:3)
简短的回答是“是”,答案很长“......但这可能不值得麻烦。”
您可以通过SharePoint发布Access数据库,包括表单和报表。我实际上没有这样做,但我研究了一个项目的选项,我们又走了另一个方向。
答案 1 :(得分:3)
简而言之,在我们开始之前,如果......
...你正在与Access Runtime EULA发生冲突:
<强> 2。附加许可要求和/或使用权利。
...
<强> II。分发要求。对于您分发的任何可分发代码,您必须......
- 保留状态栏,其中包含用户界面中显示的“由Microsoft Office Access提供支持”语句,供用户随时查看;
阅读EULA(不是那么长)只是为了看看你能做什么而不能使用Access Runtime来支付费用。
因此,我问是否有可能以某种方式在.Net Windows窗体中托管Microsoft Access窗体,可能会将窗体本身添加为控件或子窗体,以便能够直接访问所有窗体.Net?
表单上的控件
您可能想要反转方案:run your .NET code inside Access。
这基本上需要在Visual Studio中创建一个Access可以加载和操作的共享加载项。从那里你可以连接控件和事件。
public void HookupControls(
Access.CommandButtonClass button,
Access.ListBoxClass listBox,
Access.TextBoxClass textBox1,
Access.TextBoxClass textBox2)
{
fillProductsButton = button;
fillProductsButton.Click +=
new Access.DispCommandButtonEvents_ClickEventHandler(
fillProductsButton_Click);
fillProductsButton.OnClick = "[Event Procedure]";
unitPriceTextBox = textBox1;
quantityTextBox = textBox2;
}
它需要您的Access应用程序的一些合作:
With COMAddIns("SharedAddIn.Connect")
''// Make sure the COM add-in is loaded.
.Connect = True
''// Hook up the desired objects.
.Object.HookupControls Me.fillProductsButton, Me.productsListBox, _
Me.unitPriceTextBox, Me.quantityTextBox
End With
免责声明:我想试试这个,但在Visual Studio 2012中,似乎缺少创建共享加载项的功能。因人而异。然而,有references to Shared Add-ins in the documentation,所以也许我错过了某些东西,或者功能不在VS 2012 RC中。
答案 2 :(得分:0)
我认为你是从错误的方向前进的。 可以将.NET运行时加载到MS Access内存空间。 并将自定义.NET DLL加载到该运行时空间。
使用正确定义的C风格DLL API层,您可以将调用传播到.NET代码中或从.NET代码传回。
我知道这是因为我已经完成了。
找出必要的参数等是一件痛苦的痛苦,但只要你不想传递Unicode数据,一旦完成它就会非常顺利。
现在我将150多个表单和150多个报表迁移到.NET中。 在几年内,我可能会废弃Access端:)
无论如何,我遇到了这个问题,因为我现在正在试图弄清楚如何让.NET表单在Access中充当一个合适的MDI子,所以回到狩猎。