私は、Access 2007アプリケーションに接続できるWinforms C#アプリケーションを用意しました。基本的に、ユーザーはwinformsアプリケーションのボタンをクリックすると、実行しているMSアクセスアプリケーション内の特定のフォームに移動します。MS AccessアプリケーションとC#Winformsアプリケーションの間のリンク
これは可能ですか?
ありがとうございました
私は、Access 2007アプリケーションに接続できるWinforms C#アプリケーションを用意しました。基本的に、ユーザーはwinformsアプリケーションのボタンをクリックすると、実行しているMSアクセスアプリケーション内の特定のフォームに移動します。MS AccessアプリケーションとC#Winformsアプリケーションの間のリンク
これは可能ですか?
ありがとうございました
はい、可能です。 DDEを使用する必要があります。醜い古い技術ですが、まだAccess 2007にあります。私はNDdeライブラリをcodeplexに使っています。
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
あなたのアクセスフォームは正しいと思われるaccdbまたはaccdeファイルが必要ですか?私たちはSQLServerのリンクテーブルを使用し、開発のためのaccdbファイルを持っていて、それを展開用のaccdeファイルに変換しました。どちらでも動作します。 – user957902
user957902:私はadpファイルを持っています。 – user948060
DDEを使用する代わりに、自動化を検討してください。関連するPIAライブラリのリファレンスを追加する必要があります。次に、Access開発者がAccess開発者にもっとよく知られているコードを追加する必要があります。
var access = new Access.Application();
access.OpenCurrentDatabase("MyDB.accdb");
access.OpenForm("frmNavigate");
私は、オートメーションを使用すると、常にAccessの新しいインスタンスが開始されることがわかりました。 DDEは既に実行中のインスタンスを探します。 – user957902
@ user957902あなたは 'System.Runtime.InteropServices.Marshal.GetActiveObject'で既存のインスタンスを取得できます(ただし、このアプローチにも問題があります)。例については、http://support.microsoft.com/kb/316126を参照してください。 – phoog
これはおそらくあなたが探している答えではありませんが、 WinFormsでAccessアプリケーションを書き直してみませんか? – jrummell
アクセスアプリケーションは、企業全体で日常業務を行うために使用される、大きなレガシーアプリケーションです。 winformsアプリは、実際にはAcessアプリの代わりに使われていますが、その一部にすぎません。ユーザーは、新しいアプリから既存のアプリにリンクバックする必要があります。 – user948060