【问题标题】:Link between MS Access application and C# Winforms applicationMS Access 应用程序和 C# Winforms 应用程序之间的链接
【发布时间】:2012-02-23 04:55:26
【问题描述】:

我有一个 Winforms C# 应用程序,我希望能够从该应用程序连接到 Access 2007 应用程序。基本上,用户单击 winforms 应用程序中的一个按钮,他们就会被带到他们正在运行的 MS 访问应用程序中的特定表单。

这可能吗?

谢谢

【问题讨论】:

  • 这可能不是您要寻找的答案,但为什么不用 WinForms 重写 Access 应用程序呢?
  • 访问应用程序是一个大型的遗留应用程序,整个公司都在使用它来完成日常工作。 winforms 应用程序实际上是 Acess 应用程序的替代品,但只是其中的一小部分。用户需要能够从新应用链接回现有应用。

标签: c# winforms ms-access


【解决方案1】:

作为使用 DDE 的替代方案,请考虑自动化。您需要添加对相关 PIA 库的引用,然后您可以获得 Access 开发人员更熟悉的代码,如下所示:

var access = new Access.Application();
access.OpenCurrentDatabase("MyDB.accdb");
access.OpenForm("frmNavigate");

【讨论】:

  • 我发现使用自动化总是会启动一个新的 Access 实例。 DDE 将定位一个已经在运行的实例。
  • @user957902 您可以使用System.Runtime.InteropServices.Marshal.GetActiveObject 获取现有实例(尽管这种方法也有问题)。有关示例,请参阅support.microsoft.com/kb/316126
【解决方案2】:

是的,这是可能的。您将不得不使用 DDE。丑陋的旧技术,但它仍在 Access 2007 中。我在 codeplex 上使用NDde 库。

using (DdeClient client = new DdeClient("MSACCESS", "MyDB.accdb"))
{
           String DdeCommand =
            "[OpenForm frmNavigate,,,,,,UserOpenArgs]";
        try
        {
            client.Connect();
            client.Execute(DdeCommand, 5000);
        }
        catch (NDde.DdeException ex)
        {
           // MessageBox.Show(ex.Message);
            Logger.Write(ex.ToString());
        }
 }

【讨论】:

  • 太好了,谢谢,我去看看 NDde。需要明确的是,Access 应用程序是连接到 MS SQL 数据库的访问表单。没有 .accdb 文件...这有什么改变吗?
  • 您的 Access 表单必须有一个 accdb 或 accde 文件吗?我们使用 SQLServer 链接表并有一个用于开发的 accdb 文件,然后将其转换为用于部署的 accde 文件。这将适用于任何一个。
  • user957902:我有一个 adp 文件,就是这样。
  • 我认为 adp 文件会起作用,因为它似乎是存储表单的位置。如果你在 adp 文件上双击,会启动访问应用程序吗?
  • 那么您应该可以在上面的示例中使用 MyApp.adp 而不是 MyApp.accdb。
猜你喜欢
  • 1970-01-01
  • 2014-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 2014-07-30
  • 1970-01-01
相关资源
最近更新 更多