初めて投稿させて頂きます。
開発環境:VS6.0SP5(VC++6.0)
OS:Windows2000Server
DB:Oracle9i
上記環境で接続オブジェクトにADOを使用し、Oracleからデータを取得後テキストに出力するプ
ログラムを作成しました。
自分の端末ではエラー無く動作していたのですが、別の端末で使用したところ「Runtime
Error!」が発生しました。
最初はConnectionオブジェクト及び、Recordsetオブジェクトのクローズのタイミングがおか
しいのかと思い何度か修正を繰り返し、エラーが発生しない状態にはなったのですが、その後で
エラーが発生していたモジュールを再度実行したところ正常に動作してしまったのです。
各オブジェクトのクローズのタイミングは関係ないのでしょうか?
VC++での開発経験がまだ3ヶ月なもので、なぜ「RunTime Error」が発生したのか?何がなんだ
かさっぱりわかりません。
こういった現象について知っている方がいらっしゃったらご教授いただきたいのですが。
よろしくお願いします。
別の端末に開発環境はインストールされていますか?
ただ「RunTime Error」これだけ表示される訳ではないはずなので
表示されたことはすべて説明してください
そこから調べ方について教授できる人が大勢いると思います
「別の端末」で、アプリケーションの更新以外に何かしていませんか?
追加
アプリケーションのエラーが発生した端末のOSとインストールされているアプリケーションの
列挙説明もほしいです
早速の返事ありがとうございます。
情報が不足しており申し訳ありませんでした。
実行環境は以下のようになります。
APサーバ(エラー発生端末)
OS:Windows2000ServerSP4+hotfix複数
APサーバ:IIS5.0
ADO:MDAC2.8
DBサーバ
OS:Windows2000ServerSP4+hotfix複数
DB:Oracle9i(9.2.0)
>ただ「RunTime Error」これだけ表示される訳ではないはずなので
>表示されたことはすべて説明してください
>そこから調べ方について教授できる人が大勢いると思います
「Microsoft Visual C++ Runtime Library
Runtime Error!
Program:実行したアプリケーション
abnormal program termination」
というメッセージです。
>「別の端末」で、アプリケーションの更新以外に何かしていませんか?
アプリケーションの更新のみで、他には変更していません。
ちなみにそのアプリケーションをバッチ処理で起動しています。
引き続き解析をしていますが、進展がありません。
何卒宜しくお願いします。
エラーコードらしいものは表示されなかったと、言うことですね
ワトソンまたはエラー報告ログは作成されましたでしょうか
また、イベントビューアはご覧になりましたでしょうか
エラーを引き起こしている情報の一旦をつかむ為には何らかのエラーコード
が無いと難しいですね
なお、MFCを利用したADOアクセスアプリのようですけど
OLE DB プロバイダーのバージョン情報は同一のものでしょうか
MFC42.DLL のバージョンは同一のものが入ってますか
ありそうなのは、ビルド時のDLLと動作環境のDLLの不整合かなと
私も思います。
ただ情報は少ないのでこれはと言う決め手は無いですね。
地道にログでも取って場所ぐらい特定できればまた話も変わると思いますけれど。
お世話になります。
ADOの宣言ですが、以下のように行っています。
---------------------------------------
#define INITGUID
#import C:\Program Files\Common Files\System\ado\msado15.dll no_namespace
rename(EOF,EndOfFile)
#include <stdio.h>
#include icrsint.h
int main(int argc, char *argv[])
{
::CoInitialize(NULL); //COMの初期化(最後にCoUninitialize()を必ず呼び
出す事。)
//ADOオブジェクトの生成
_ConnectionPtr pConn(ADODB.Connection);
_RecordsetPtr pRs(ADODB.Recordset);
_CommandPtr pCmd(ADODB.Command);
・・・本処理へ
---------------------------------------
新規作成したときは、ファイルタブの「C++ソースファイル」から作成しています。
この宣言はMFCになるのでしょうか?
開発環境と実行環境のファイルを比較しましたが、msado15.dllのバージョンは同じでした。
本プログラム作成にあたり、サンプルより引用したのでADOに関してきちんと理解できていない
部分もあります。
また、某デバッグツールを使用したところ、「c:\program files\microsoft visual
studio\vc98\include\comip.h」で発生しているように見えました。
調査ないようもきちんと説明できず申し訳ありません。
よろしくお願いします。
>「Microsoft Visual C++ Runtime Library
>この宣言はMFCになるのでしょうか?
おれの勝手な勘違いのようです
私もADOプログラミングははじめたばっかりなのでなんともいえない
(まともに動くPGまだ作れていない)のですが
私のサンプル(書籍 日経BP 3週間マスター VisualC++6.0 データベース編)
には
>CoInitialize(NULL);
のあとに「ODBC用OLE DBプロバイダへのアクセスを取得する」
CoCrteInstance(・・・・
という記述あるんですけど必要ないのでしょうか?
>某デバッグツール
Visual Studio(以下 VS) でのデバックは無理な環境なの?
VSでならブレークポイントで正常な値が渡されているかチェックできる
と思いますけど・・・
お世話になります。
本件ですが、現象が解消されました。
原因は、ConnectionオブジェクトがOpenしていない状態でClose処理が走っていたからの
ようでした。
今回は開発端末と実行端末を分けなかった事に問題があったのか・・・ちょっと疑問が
残る部分もありますが、ここで一度終了にさせて頂きます。
今一度、データベース接続を扱った処理について勉強しなおして見ます。
また、きちんとしたデバッグなども出来るよう勉強したいと思います。
>>CoInitialize(NULL);
>のあとに「ODBC用OLE DBプロバイダへのアクセスを取得する」
>CoCrteInstance(・・・・
>という記述あるんですけど必要ないのでしょうか?
今回はあくまで、ADOを使用していますので、ODBC用OLE DBプロバイダの取得は必要ない
と思います。ちなみにMSDNのADOのサンプルから引用しましたので、問題ないかと思いま
す。
皆様からの貴重な御意見、ありがとうございました。
また何かありましたら、宜しくお願いします。