実行時エラー2004 メモリ不足 について


こげ茶  2010-07-15 09:41:10  No: 102441  IP: [192.*.*.*]

よろしくお願いします。

VB4.0で作られたDB2への接続モジュール(DAO接続)を
WinXP(SP2以降)の環境で実行すると
  実行時エラー  #2004  メモリ不足
と出力されてしまいます。

Win2000の環境では平気なのですが、
メモリは1Gなので物理的な不足ではありません。
dllやiniファイルの設定、更新で解決するのでしょうか?
VB4.0の実行ファイルをXPで動かすこと自体に
問題があるのでしょうか?

編集 削除
魔界の仮面弁士  2010-07-15 10:17:51  No: 102442  IP: [192.*.*.*]

> VB4.0で作られた
16bit版でしょうか、それとも32bit版でしょうか。
32bit だとしたら、アップデート キット 2 は適用済みですか?

また、セットアップモジュールに、DAO および Jet のランタイムは
組み込まれていますか?

> 接続モジュール(DAO接続)を
使用している DAO のバージョンは何でしょうか?

> メモリは1Gなので物理的な不足ではありません。
DAO の古いバージョンでは、1GB のメモリをサポートしていません。

もしも 2.0、3.0、3.5 などをお使いの場合は、DAO 3.51 に差し替えるか、
もしくは過去ログにあるように BOOT.INI の /maxmem= を用いて、
Windows で使用可能な RAM 容量を制限することで回避してみて下さい。

http://support.microsoft.com/kb/161255/ja
http://support.microsoft.com/kb/833721/ja

編集 削除
こげ茶  2010-07-16 13:38:58  No: 102443  IP: [192.*.*.*]

魔界の仮面弁士さん回答ありがとうございます。

>16bit版でしょうか、それとも32bit版でしょうか。
32bit版です。アップデートキットについては分かりませんでした。

>使用している DAO のバージョンは何でしょうか?
DAO 3.51を利用しているはずです。

>BOOT.INI
この設定はなるべく避けたいと思っており、
別の手段を探しております。

>DAOを差換える
初歩的な質問なのかもしれませんが、
DAO差替えとはどのように実施するのでしょうか?

編集 削除
魔界の仮面弁士  2010-07-16 16:44:43  No: 102444  IP: [192.*.*.*]

>> 32bit だとしたら、アップデート キット 2 は適用済みですか?
> アップデートキットについては分かりませんでした。
下記の「アップデートが必要かどうかは次の方法で判別できます。」をご覧ください。
http://www.microsoft.com/japan/msdn/vs_previous/vbasic/Update/vb4update.htm


>> 使用している DAO のバージョンは何でしょうか?
32bit 環境で参照設定して使っているとすれば、
  Microsoft DAO 2.5/3.51 Compatibility Library
  Microsoft DAO 3.0 Library
  Microsoft DAO 3.5 Library
  Microsoft DAO 3.51 Library
  Microsoft DAO 3.6 Library
のいずれかになると思います。(VB4 非推奨の組み合わせも含む)


> DAO 3.51を利用しているはずです。
DAO 3.0 で無いとは珍しいですね。
VB4 の言語仕様だと、DAO 3.51 の一部のメソッドが(そのままでは)呼び出せませんし、
そもそも 純粋な VB4 開発環境なら、DAO 3.5x がインストールされていないはずですから。

# VB4 は、型付き省略可能引数をサポートしていないという理由から、DAO 3.5x や 3.6 を
# 使った場合、As Recordset 変数の Update や MoveLast を直接呼び出すことができません。


>> BOOT.INI
>この設定はなるべく避けたいと思っており、
>別の手段を探しております。
避けたい方法かどうかは別にして、「問題の切り分け」のために、
この方法で現象を回避できるかどうかを確認されましたでしょうか。

たとえば、DDL バージョン不一致による障害の可能性も考えられますが、
その場合は BOOT.INI でメモリ制限をかけても解決できないでしょう。


> DAO差替えとはどのように実施するのでしょうか?
既に DAO 3.5x を使っているのなら、Jet 3.5 Service Pack 3 を適用してください。
DAO 3.0 で運用する場合は、VB4 Update Kit 2 です。

もちろん、既に最新になっているのであれば、適用する必要はありません。

ただし、「3.5 → 3.0」や「3.0 → 3.51」といったバージョン変更を伴う場合は、
対応する開発環境を用意しなおして、EXE 自体を再作成する必要があります。
(参照設定していなかった場合には、再作成せずに済む可能性もありますが)

編集 削除
魔界の仮面弁士  2010-07-16 19:11:47  No: 102445  IP: [192.*.*.*]

>>> 使用している DAO のバージョンは何でしょうか?
> 32bit 環境で参照設定して使っているとすれば、
>          :
> のいずれかになると思います。(VB4 非推奨の組み合わせも含む)
他にも、
  Microsoft DAO 2.5/3.0 Object Library
  Microsoft Office 12.0 Access database engine Object Library
というバージョンの DAO がありますね。
まぁ、VB4 + DAO 12.0 はあり得ないでしょうけれども。


> たとえば、DDL バージョン不一致による障害の可能性も考えられますが、
済みません。DDL → DLL の間違いです。


> VB4.0の実行ファイルをXPで動かすこと自体に
> 問題があるのでしょうか?
私自身は試した事が無いので、問題があるかどうかまでは把握していないのですが、
VB4 製アプリについてのみ言えば、一応、WinXP 以降の OS でも動作したという話を
何回か耳にしています。もちろん、アプリの作りにもよるのでしょうけれども。
(ただし、動作したという VB4 アプリが DAO を使っていたかどうかは分かりません)

編集 削除