如何从外部程序

时间:2017-08-18 10:07:25

标签: ms-access

背景: 我工作的慈善机构有两个系统,一个新的C#系统和一个MS Access系统。接听某人的电话通常意味着在新系统上查找它们,然后在旧系统上再次查看它们。  不幸的是,我们仍然坚持使用Access系统,因为我们没有钱重新开发它。

两个系统都为每个人使用唯一的PersonID,并且ID在系统之间同步。 Access系统基本上是一个巨型表单,显示特定PersonID的信息。

问题: 我想要做的是告诉Access将当前记录从外部c#程序移动到特定的PersonID。 我不想启动新的Access窗口,因为这在我们的PC上非常慢。

我试着想一想谷歌从外面控制Access(像DDE这样的东西?)但是我画了一个空白。任何人都可以给我任何指针寻找什么?这甚至可能吗?

3 个答案:

答案 0 :(得分:1)

您可以使用COM自动化。如果您的新系统是Excel,你可以使用这样的VBA代码:

using System;
using System.Windows.Forms;

namespace ComAutoWindowsFormsApp
{
    public partial class MyCsharpForm : Form
    {
        Microsoft.Office.Interop.Access.Application accApp;
        public MyCsharpForm()
        {
            InitializeComponent();
        }

        private void MyCsharpForm_Load(object sender, EventArgs e)
        {
            accApp = 
                (Microsoft.Office.Interop.Access.Application) 
                System.Runtime.InteropServices.Marshal.GetActiveObject("Access.Application");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Microsoft.Office.Interop.Access.Form accForm = accApp.Forms["your_giant_form"];
            Microsoft.Office.Interop.Access.Dao.Recordset accRs = accForm.RecordsetClone;
            accRs.FindFirst("myPrimaryKey = 42");
            if (!accRs.NoMatch)
            {
                accForm.Bookmark = accRs.get_Bookmark();
            }
            accRs.Close();
        }
    }
}

根据How to interact with another programs with OLE Automation in C#?,它很容易适应C#和.NET。

对于C#Windows窗体应用程序,等效代码为:

body::-webkit-scrollbar-thumb {
  background-color: darkgrey;
  outline: 1px solid slategrey;
  height: 5px;
}

答案 1 :(得分:0)

我建议提供一个非常简单的解决方案:添加一个表来访问db,只存储一行PersonID。 C#应用程序将所需的PersonID插入此表,定时器的Access应用程序检查此表,假设每500毫秒,并在找到此交换表中的数据后立即打开包含相关数据的屏幕。 Access在读取后立即删除具有PersonID的行。如果用户(例如,还没有保存当前记录),Access可以要求用户滚动确认。

我相信COM应该工作,但不确定这是否可靠,特别是如果用户可以与C#应用程序同时与Access应用程序交互。

答案 2 :(得分:0)

如果要使C#程序控制Access,请阅读this guide。这比反向更容易,因为Access已经将其大部分对象和方法暴露给其他程序。 C#程序可以只导航Access表单。

如果你想从C#程序获取信息到Access,你需要在你的C#程序中添加COM +功能,创建一个COM +库,在Access中引用它,然后你可以从Access调用你的新程序。如果您想这样做,请参阅this page,但如果您的预算有限,则可能不会。