10

.Net フォーム内で Microsoft Access フォームをホストできるかどうか尋ねています。

いいえ、私は気が狂っていません。Microsoft Access を IDE として使用しようとしている VBA の多くを知らない誰かによって、完全に VBA で書かれた大規模なシステムを維持しています。これは基本的に数千行のスパゲッティ コードであり、それを破棄して最初からやり直したいと考えていますが、これはオプションではありません。

したがって、そこにあるものを改善しようとしています。この特定のシナリオでは、Microsoft Access フォームを .Net Windows フォーム内で何らかの方法でホストできれば非常に役立ちます。 VB6からできます。

現在、ユーザーが一度に開いている多くの MS-Access データベースと一緒にコンピューター上で実行される .Net アプリケーションがあり、.Net アプリケーションは MS Access Interop を使用してこれらと対話し、さまざまな程度の成功を収めています。これは、フォームのタイトルとファイル名/場所を使用してデータベースのハンドルを取得し、必要なことを実行し、ユーザーが干渉しない/アプリケーションをオフにする/データベースをデスクトップに移動するなどに依存しているためです。ちょっとした混乱。

したがって、すべてのコントロールに直接アクセスできるように、フォーム自体をコントロールまたはサブフォームとして追加することにより、Microsoft Access フォームを .Net Windows フォーム内に何らかの方法でホストすることが可能かどうかを尋ねています。 .Net からのフォームで?

4

3 に答える 3

3

短い答えは「はい」です。長い答えは「...しかし、問題を起こす価値はないかもしれません」です。

SharePointを介してフォームやレポートなどのAccessデータベースを公開できます。私は実際にはそれをしていませんが、プロジェクトのオプションを調査し、別の方向に進みました。

詳細はこちら: http: //office.microsoft.com/en-us/sharepoint-online-enterprise-help/build-and-publish-an-access-database-to-sharepoint-HA102435342.aspx

および http://office.microsoft.com/en-us/access-help/introduction-to-integrating-data-between-access-and-a-sharepoint-site-HA010131463.aspx

于 2012-07-20T22:24:11.273 に答える
3

余談ですが、始める前に、もし...

  • アプリケーション クロムを使用せずに単一の Access フォームをホストする方法を尋ねています。と
  • Access のランタイム バージョンを使用している

...アクセス ランタイムの EULA に違反しています:

2. 追加のライセンス要件および/または使用権。

...

ii. 配布要件。配布可能なコードについては、次のことを行う必要があります。

  • ユーザー インターフェイスに表示される "Powered by Microsoft Office Access" というステートメントを含むステータス バーを、ユーザーがいつでも見られるようにしておく。

Access ランタイムを使用できるものと使用できないものを確認するためだけに、EULA (それほど長くはありません) を読むとお金がかかる場合があります。

したがって、すべてのコントロールに直接アクセスできるように、フォーム自体をコントロールまたはサブフォームとして追加することにより、Microsoft Access フォームを .Net Windows フォーム内に何らかの方法でホストすることが可能かどうかを尋ねています。 .Net からのフォームで?

シナリオを逆にしたい場合があります: Access 内で .NET コードを実行します

これには基本的に、Access が読み込んで操作できる共有アドインを Visual Studio で作成する必要があります。そこから、コントロールとイベントを関連付けることができます。

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 では共有アドインを作成する機能がないようです。YMMV。ただし、ドキュメントには共有アドインへの参照があるため、何かが不足しているか、機能が VS 2012 RC にない可能性があります。

于 2012-07-21T01:38:12.417 に答える
1

私はあなたが間違った方向からそれに来ていると思います。.NET ランタイムを MS Access メモリ空間にロードすることができます。そして、カスタム .NET DLL をそのランタイム空間にロードします。

また、適切に定義された C スタイルの DLL API レイヤーを使用すると、.NET コードとの間で呼び出しを伝達できます。

私はそれをやったので、私はこれを知っています。

必要なパラメーターなどを把握するのは悲惨な苦痛ですが、一度完了すると、Unicode データが渡されたくない限り、かなりスムーズです。

現在、150 以上のフォームと 150 以上のレポートを .NET に移行しています。数年後、私は Access 側を廃棄するかもしれません :)

とにかく、.NET フォームを Access 内で適切な MDI 子として機能させる方法を見つけようとしているので、これに出くわしました。

于 2018-04-12T10:26:07.843 に答える