DAO接続でMDBファイルをOPENしてグリッドに表示するアプリを開発しています。
VC++2005でビルドしたexeをWindows95で実行すると、
「Command Failed.」エラーが発生します。
【開発環境】
OS:WindowsXP SP3(日本語版)
言語:VC++2005(MFC)(英語版)
DB:MSAccess97(日本語版)
【動作環境】
OS:Windows95(英語版)
DB:MSAccess97(英語版)
ソースは以下の通りです。
----------------------------------------------------
(...略)
CDaoDatabase oDatabase; // DataBase
// DB接続
oDatabase.Open(C:\Temp\TEST.mdb);
// レコードセットOPEN
CDaoRecordset rs(&oDatabase);
rs.Open(dbOpenDynaset, psQuery, dbReadOnly);
(...略)
----------------------------------------------------
DB接続で失敗していることは推測できましたが、
何のエラーが発生いるかが分からないので、
例外処理を追加しました。↓
----------------------------------------------------
(...略)
CDaoDatabase oDatabase; // DataBase
// DB接続
try {
oDatabase.Open(C:\Temp\TEST.mdb);
}
catch( CDaoException *e ){
CString sErrStr;
TCHAR szCause[255];
sErrStr.Format(%s[0x%X], CString(szCause), e->m_scode);
AfxMessageBox( sErrStr );
e->Delete();
return FALSE;
}
// レコードセットOPEN
CDaoRecordset rs(&oDatabase);
rs.Open(dbOpenDynaset, psQuery, dbReadOnly);
(...略)
----------------------------------------------------
実行して表示されたメッセージ文字列部分(szCause)が、
言語の問題(?)のせいか、文字化けしてしまっています。。。
e->m_scodeのエラーコードは「0x80040154」と表示されました。
(10進だと、-2147221164です。念のため。。。)
WEBで調べてみると、0x80040154はクラスが無いといったエラーのようですが、
CDaoDatabaseクラスが存在しないと解釈すべきでしょうか?
VC++6.0でビルドしたexeは、Windows95環境で正常にDB接続できています。
また、VC++2005でビルドし、XP(SP3)で実行しても、正常に動作します。
このことから、CDaoDatabaseクラスが存在しないとは考えにくいのです。
VC++2005でビルドしたDAO接続が
Windows95でできない理由・対策方法・助言など、
よろしくお願いします。
DAO関係なしに
Visual Studio 2005 は Windows95上での動作をサポートしていないようですが大丈夫で
しょうか?
[MSDN]サポートされるプラットフォーム (Visual C++)
http://msdn.microsoft.com/ja-jp/library/ms235435%28VS.80%29.aspx
訂正
>Visual Studio 2005 は
Visual Studio 2005 で作成された実行ファイルは
>Visual Studio 2005 は Windows95上での動作をサポートしていないようですが大丈夫で
しょうか?
はい、承知の上(?)で開発を進めています。
エンドユーザーのほうから、
Windows95で動作するもの、と要求が出てきます。
いろいろ検討したのですが、
VC++2005を使用するという結論に至りました。
>いろいろ検討したのですが、
>VC++2005を使用するという結論に至りました。
なぜ?
サポートしていない以上正しく動く保証はないと思いますけど。
>Windows95で動作するもの、と要求が出てきます。
要求を満たせないし。
VC++6.0があるのであれば、そちらでビルドできるようにして実行ファイルを作るべきな
んじゃないでしょうか?
>VC++6.0があるのであれば、そちらでビルドできるようにして実行ファイルを作るべきな
>んじゃないでしょうか?
ごもっともです。
できればそうしたいところなのですが、
困ったことに、
ソースを含む開発環境も購入して納品する必要があるのです。。。
(実行ファイルだけならば、VC++6.0でも全く問題ないところです。)
となると、現在購入可能な開発環境という点で、
現在当方で購入済みの、VC++2005を選択しました。
どうやっても無理なのでは?
たとえ”動いているようにみえても”、実は裏で不正な動きをするかもしれないし、
OSがイカレタって保証はできないんじゃないでしょうか?(憶測ですけど)
顧客にそのことをきちんと話して、別途VC++6.0の開発環境も購入分を請求するか、
それができないのであれば、95はあきらめてくださいと伝えるしかないのでは?
もとから95をターゲットにしていた場合は2005で開発をスタートしたほうに非があると思
いますが、あとから95もっていう場合はまた話が違うと思います。
Blueさん、すばやいご回答ありがとうございます。
>顧客にそのことをきちんと話して、別途VC++6.0の開発環境も購入分を請求するか、
>それができないのであれば、95はあきらめてくださいと伝えるしかないのでは?
Windows95を諦めてもらうのは難しいようです。
一度打診したらしいのですが、
それなら新しいマシンを買ってくれ(約20台分)と言われたそうです。。。
そうなると、Windows95環境でも動作保証のある、
VC++6.0を購入することを検討してみたいと思います。
ここは解決とさせて頂き、
また何か疑問がありましたら質問させて頂きます。
ありがとうございました。
Win95 の関係はすでに話が出ているとおりだと思うのでおいといて
> oDatabase.Open(C:\Temp\TEST.mdb);
本当にこんなこと書いているのなら動かないのが当然。
> TCHAR szCause[255];
> sErrStr.Format(%s[0x%X], CString(szCause), e->m_scode);
> AfxMessageBox( sErrStr );
本当にこんなこと書いているのなら動かないのが当然。
勉強不足としか思えない・・・
既に手遅れになっているようですが(vv;)・・・
Visual Studio 6.0も 出荷は終了しているようです。
その他をかんがみても、きゅあさんの目論見は著しく
困難であると考えられます。