我有一個Winforms C#應用程序,我希望能夠連接到Access 2007應用程序。基本上,用戶單擊winforms應用程序中的一個按鈕,然後將它們轉到他們運行的MS訪問應用程序中的特定表單。MS Access應用程序和C#Winforms應用程序之間的鏈接
這可能嗎?
謝謝
我有一個Winforms C#應用程序,我希望能夠連接到Access 2007應用程序。基本上,用戶單擊winforms應用程序中的一個按鈕,然後將它們轉到他們運行的MS訪問應用程序中的特定表單。MS Access應用程序和C#Winforms應用程序之間的鏈接
這可能嗎?
謝謝
是的,這是可能的。你將不得不使用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文件...這是否改變了什麼? – user948060 2012-02-22 19:58:03
你必須有一個accdb或accde文件,你的訪問表單是否正確?我們使用SQLServer鏈接表,並有一個accdb文件進行開發,然後將其轉換爲accde文件進行部署。這將與任何一個工作。 – user957902 2012-02-22 21:44:37
user957902:我有一個adp文件,就是這樣。 – user948060 2012-02-22 22:40:01
作爲使用DDE的替代方案,請考慮自動化。你需要添加引用相關PIA庫,然後你可以有代碼稍微比較熟悉的Access開發人員,像這樣:
var access = new Access.Application();
access.OpenCurrentDatabase("MyDB.accdb");
access.OpenForm("frmNavigate");
我發現使用自動化總是啓動一個新的Access實例。 DDE將找到一個已經運行的實例。 – user957902 2012-02-22 21:45:48
@ user957902你可以用'System.Runtime.InteropServices.Marshal.GetActiveObject'獲取一個現有的實例(雖然這種方法也有問題)。有關示例,請參閱http://support.microsoft.com/kb/316126。 – phoog 2012-02-22 22:03:53
這可能不是你要找的答案,但爲什麼不用WinForms重寫Access應用程序? – jrummell 2012-02-22 19:41:19
訪問應用程序是整個公司用來完成日常工作的大型遺留應用程序。實際上,Winforms應用程序是Acess應用程序的替代品,但僅佔其中的一小部分。用戶需要能夠從新應用程序鏈接到現有的應用程序。 – user948060 2012-02-22 19:52:54