CRecordsetのOpenエラーBOX抑制 – プログラミング – Home

通知
すべてクリア

[解決済] CRecordsetのOpenエラーBOX抑制


シエル
 シエル
(@シエル)
ゲスト
結合: 19年前
投稿: 6
Topic starter  

タイトルの通り、CReordsetのOpen時のエラーBOX表示を抑制したいです。
詳しくいいますと、リモートPCのAccessのmdbにODBCでアクセスしています。
コレ自体はうまくいってますが、エラー時の処理を作ってる時につまずきました。
例外が発生する場合などはtry…catchで独自のエラー処理ができますが、
ネット越しでOpenしようとしたときに回線を切っていると
例外が発生せずにMFC?がODBC Microsoft Accessドライバログイン失敗
というタイトルでディスクまたはネットワークのエラーですという
メッセージボックスを出します。それを閉じるとOpenがFALSEを返します。
このBOXが出ると閉じるまで処理が止まってしまうので困ります。
なんとかこのBOXが出ない方法を知っている方いませんか?
どうかご教授ください。
環境はXPでVC6です。


引用未解決
トピックタグ
シエル
 シエル
(@シエル)
ゲスト
結合: 19年前
投稿: 6
Topic starter  

自分で調べててわかってきました。
::SQLDriverConnectと言う関数の中で呼ばれてるみたいです。
これの第2引数をNULLにすればBOXが出なさそうですが
MFC内部で呼ばれているために手が出せません。
こういう場合はAPIで自分で作るしかないのでしょうか?
いまから一から作るのは大変です。
MFCの一部関数を改造できないものでしょうか?


返信引用
REE
 REE
(@REE)
ゲスト
結合: 23年前
投稿: 240
 

その::SQLDriverConnectを呼んでいる関数を自分で直接呼んでいる場合、
または、その呼んでいる関数が仮想関数の場合であれば、
継承して、その関数だけ上書きできます。


返信引用
シエル
 シエル
(@シエル)
ゲスト
結合: 19年前
投稿: 6
Topic starter  

レスありがとうございます。
肝心のMFCの関数はConnectという関数でして
自分で読んだMFC関数Openの中で呼ばれています。
ヘッダを見るとvirtualがついてないようなので
仮想関数でないですよね??
改造無理そうならAPIでつくるしかないですね…


返信引用
シエル
 シエル
(@シエル)
ゲスト
結合: 19年前
投稿: 6
Topic starter  

すいません。直接APIよんでもBOX出るようです…


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

「ODBC Microsoft Accessドライバログイン失敗」
は、多分Microsoft AccessのODBCのドライバ-のエラーです。
それは、多分SQLシテートメントをドライバーが実行しようとしたときに
接続が切れたために表示されたものだと思います。
まだ、「Access」は親切なのでいいです。
他のドライバーたとえば「オラクル」などではエラー番号のみで
メッセージなどがでないときもあります。
このエラーの回避は、
  毎回「CDatabase」の「Open」、 「CReordset」の「Open」
    「CReordset」の「Close」、「CDatabase」の」Close」
を繰り返すしかないと思います。
あと、シエルさん
アプリが終了するまで、CDatabaseでOpenしっぱなしになってませんか?
そうだとすると、相手先データベースが、絶えず接続状態
 になっていて良くないです。
「オラクル」や「SQLServer」のようなサ-バ対応ならまだしも、
「Access」は、サーバ対応ではないです。
一回の通信が終わるつどきちんと「CDatabase」の「Close」
をしたほうがいいと思います。


返信引用
シエル
 シエル
(@シエル)
ゲスト
結合: 19年前
投稿: 6
Topic starter  

レスありがとうございます。
エラーの原因はわかってまして、
毎回オープンクローズはしております。
問題はこのエラー発生時にBOXが出ることです。(ポップアップで)
無人のPCにて処理を行っていますので
エラーの間(相手が落ちている場合とか)はリトライを繰り返し、
相手が復旧したら自動で通常処理に戻りたいです。
しかし、BOXがでることでオペレータの介入が必要なので
BOXではなくただエラーを返してくれえればありがたいです。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

回線を切っているとき、「CDatabase」の「Open」でエラーがかえってきませんか?

GetConnet()で調べる方法もあると思いますがどうでしょうか。
「ODBC Microsoft Accessドライバログイン失敗」のウインドウを消すには、
Microsoft AccessのODBCのドライバ-を調べないと解決できないと思います。


返信引用
シエル
 シエル
(@シエル)
ゲスト
結合: 19年前
投稿: 6
Topic starter  

レスありがとうございます。
CDatabaseのOpenでエラーがかえってきますが
かえる前にドライバーがエラーBOXをだします。

ついさっきCDatabase::noOdbcDialogを指定すると
エラーBOXが出ずに例外が発生することがわかりました。
これで解決かどうかはわかりませんが
色々試して見ます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました