Access2007 32bit からAccess2010 64bitへのバージョンアップ時の不具合について

Access2010 64bitにAccess2007 32bitのプログラムをインポートするとフォーム100本程度でメモリーエラーが発生してコンパイルできなくなってしまいます。同じ経験された方解決方法があれば教えていただけないでしょうか?すみませんが宜しくお願いします。

しかたなく現在は32bitで開発しています。

 

質問情報


最終更新日 2019年8月22日 表示 11,010 適用先:

* 小さ目のページ番号でお試しください。

* 番号のみをご入力ください。

* 小さ目のページ番号でお試しください。

* 番号のみをご入力ください。

追加ですが、少ない本数なら正常に動作します。

 

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

toc0229さん、こんにちは

Access2010 64bitに100本程度のフォームがあるAccess2007 32bit のプログラムをインポートすると、メモリエラーが発生するということですね。
インポートというのは、Accessの外部データよりインポートを行ったという事でしょうか?

以下のような、情報を追加でいただけるとみなさんからの情報も集まりやすくなるのかなと思いますよ。
・Access2007のプログラムをインポートした際の手順
 例: Accessの外部データよりインポートを行った
・メモリーエラーが発生したときのエラー番号とメッセージ
 (メッセージは、省略せず正確に書いていただくと良いです)
・どのプログラムの形式でエラーが発生するか(mdb形式、accdb形式、adp形式)
 できれば、他の形式でも試して、同様のエラーが発生するか確認するといいと思います。
・特定のフォームが原因でインポートができなくなっていないか
本数の少ないフォームではインポートができたという事なので、もしお時間があれば、ある特定のフォームが原因でインポートができないのかを確認するのもいいかなと思います。

toc0229さんの返信お待ちしています。


石田 優 – Microsoft Support
石田 優 – Microsoft Support

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

石田さん回答ありがとうございます。

ただ現在その環境がないためすぐに再実験できませんが、インポートはAccessの外部データよりのインポートです。

形式はAccess2010 adp

SQL Server2008

OSはWindows Server2008R2です。

メモリーエラーはコンパイル時に発生したと思います。エラー番号はなかったとおもいます。

特定のフォームではありません。

最終的には1フォームづつインポート-コンパイルを繰り返しました。

一度メモリーエラー?メモリー不足?が発生すると直前にインポートしたフォームを削除して再度コンパイルしてもエラーになってしまいます。

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

実験環境ができました。

再現手順

OSなどは上記のとおりで

Access2010 32bitをアンインストール

Access2010 64bitをインストール

Access2010 32bitで作成したadpアプリケーションを[Shift]キーを押しながら起動

[データベース]-[Visual Basic]で[デバッグ]-[コンパイル]

Declareの箇所でエラーが発生するため

[Declare]を[Declare PtrSafe]に置換して[コンパイル]

Microsoft Visual Basic For Applicationsのウィンドウは表示され三角の中に「!」マークが入ったアイコンで

コンパイルエラー:

メモリが不足しています。

と表示されます。

 

原因がわからないため新規にadpファイルを作成してフォームを一本づつ外部データ-Accessからインポートし

一本づつ[データベース]-[Visual Basic]で[デバッグ]-[コンパイル]すると

毎回プログラムもインポート本数も異なるのですが約100フォームくらいインポートすると上記のエラーが発生します。

 

 

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

たびたびですみませんが...

インポートの途中で

「既存のモジュール、プロジェクト、オブジェクト ライブラリと名前が競合しています。」

のメッセージが表示されます。

この時に同じフォームを何度かインポートするとインポートできます。

これが何か影響しているのでしょうか?

 

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

メモリ不足の原因はマイクロソフトのサイトでは以下のようです。

http://msdn.microsoft.com/ja-jp/library/s93kfbkz.aspx

メモリが不足しています。

Error ID: BC2004

このエラーを解決するには
  • 不要なアプリケーション、ドキュメント、およびソース ファイルを閉じます。

  • 不要なコントロールおよびフォームを削除して、同時に読み込まれる数を減らします。

  • Public 変数の数を減らします。

  • ディスクの空き容量を調べてください。

  • 追加のメモリを取り付けるかメモリの再割り当てを実行して、利用可能な RAM の容量を増やします。

  • 必要なくなった場合にメモリが解放されていることを確認します。

     

 

32bitでは正常に動作します。

フォームの数は500本程度で100本程度の場合は正常に動作します。

メモリは4Gです。

64bit環境同程度のフォーム数で動作してる方いらっしゃるのでしょうか?

 

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

toc0229さん、こんにちは

検証結果のご報告ありがとうございます。
そうですか、コンパイル中にでるエラーだったんですね。

調べてみたところ、こちらの情報が参考になるのではと思いました。
・Microsoft Office 2010 マクロ互換性について
 http://technet.microsoft.com/ja-jp/office/ff945298.aspx

こちらを読む限り、今回の現象は、P29の記述に該当する可能性があるのではと思います。

また、こちらに32 ビット バージョンと 64 ビット バージョンとの互換性についての情報もありました。
・Office 2010 の 32 ビット バージョンと 64 ビット バージョンとの互換性
 http://msdn.microsoft.com/ja-jp/library/ee691831(office.14).aspx

この中で、「比較 : 32 ビット システムと 64 ビット システム」という項目に以下の2点についての記述を見つけました。

・Office 2010 のネイティブの 64 ビット プロセスは、32 ビット バイナリをロードできません。既存の Microsoft ActiveX コントロールや既存のアドインがある場合、これは一般的な問題となることが考えられます。
・VBA には以前はポインター データ型がなかったので、開発者はポインターとハンドルを格納するために 32 ビットの変数を使用していました。Declare ステートメントを使用した場合、API 呼び出しで返される 64 ビット値は、これらの変数で切り詰められることになります。

これを見ると、Microsoft ActiveX コントロールやアドインの読み込みとDeclare ステートメントが今回の現象と関係があるのかなとも思いました。
一度、コードの中でこれらを使用しているかどうか確認してみるとよいかもしれませんね。

まず資料を読んでいただいて、どうしても今回の現象について明確な情報が必要な場合は、サポートをご利用いただいた方が良いのではと思います。
サポート (カスタマー サービス&サポート)

その後の状況報告など、またお待ちしています。


石田 優 – Microsoft Support
石田 優 – Microsoft Support

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

石田さん返信ありがとうございます。

こちらもいろいろ検証中でしたが、最終テストでAccess2010 32bitで正常動作するものからVBAコード(標準モジュール、クラスモジュール、フォームのコードは手動で空白にして)をすべて削除してコンパイルしたものからAccess 64bit環境に移動してコンパイルしても同様のエラー、メモリー不足が発生しました。

また新規にadpファイルを作成してインポートしても「既存のモジュール、プロジェクト、オブジェクト ライブラリと名前が競合しています。」のエラーが発生します。なぜなのか分からないので先週Office プロフェッショナルサポートにお願いして検証していただいております。

現在はその回答待ちの状態です。

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

Office プロフェッショナルサポートはまだ検証中ですが、どうやらVBAコードが原因でもないようです。

またadpでもaccdbでも同じようにエラーになります。フォームの数が100本をこえるとメモリ不足がでる頻度が高くなるような感じです。

途中の判断ですがバグだと思っています。

Access2010 64bitでフォーム100(Access クラスオブジェクト)以上のアプリケーション動作させている方いましたら環境など教えていただけないでしょうか?

 

再現方法 Access2010 64bit (OS:Windows Server2008 R2 foundation)

新規フォームを作成

コマンドボタンを配置

クリック時のイベントで

Private Sub コマンド0_Click()

    MsgBox "ok"

End Sub

上記フォームをfrmBaseとします。

別フォームにコマンドボタンを配置
同じくクリック時のイベントで

Private Sub コマンド0_Click()
    Dim i As Integer
    For i = 1 To 700
        DoCmd.CopyObject , "frm" & Format(i, "000"), acForm, "frmBase"
    Next
    MsgBox "OK"
End Sub

上記フォームをフォーム1とします。
フォーム1のボタンをクリックすると
frm001~frm700のフォームが作成されます。

adpの場合
[データベースツール]-[Visual Basic]-[デバッグ]-[コンパイル]を実行すると「コンパイルエラー メモリー不足」が発生します。
仮にうまくいっても再度プログラムを開いて一部修正してコンパイルを何度か繰り返すとエラーになります。


accdbの場合
フォーム1のボタンをクリック時に
frm***が見つかりませんのメッセージが表示され途中でエラーになります。
再度開きなおして
    For i = 1 To 700
i=1の部分を作成した以降の番号にしてクリックすると再度100~200フォーム作成されてエラーになります。
約500前後フォームを作成して
[データベースツール]-[Visual Basic]-[デバッグ]-[コンパイル]を実行すると「コンパイルエラー メモリー不足」が発生します。


32bitのプログラムを事前に64bitで動くようにコード変更して
64bit環境に移動させた場合、メモリー不足が発生してもそのまま閉じて
最適化などくりかえすと正常にコンパイルできる時がありますが、コードを修正するとやはり同じく「コンパイルエラー メモリー不足」が発生します。


 

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

access2010 64ビトは高速に動作しますので(同じハードスペックでaccess20102010 32ビットと比べ)魅力を感じてます

残念ながら100本以上のフオームではメモリー不足エラーの為 実用アプリケーションでは適さないと思います

当面はaccess2010 32ビットで開発致します・・・・・・・・残念ですが・・・・・・・・

 

・・・・・・・・注・・・・・・・・・・

タイトルでは  Access2007 32bit からAccess2010 64bitへのバージョンアップ時の不具合について

となつていますが 新規開発した場合も同じです

 

 

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

* 小さ目のページ番号でお試しください。

* 番号のみをご入力ください。

* 小さ目のページ番号でお試しください。

* 番号のみをご入力ください。