VS6.0 DAO360.DLL Access Violation – プログラミング – Home

通知
すべてクリア

[解決済] VS6.0 DAO360.DLL Access Violation

固定ページ 1 / 2

toki
 toki
(@toki)
ゲスト
結合: 16年前
投稿: 10
Topic starter  

tokiといいます。
VS6.0 C++でAccessをopen時にエラーが出て困っています。
どなたかご存知の方がいらっしゃいましたらご教授ください。
宜しくお願いいたします。

□環境
OS:win xp pro sp3
VS6.0
Aceess 2003

□事象
1. AAA.mdb open 正常終了
2. AAA.mdb close 正常終了
3. AAA.mdb open 異常終了 以下、メッセージです。
  ハンドルされていない例外は、*****.exe(DAO360.DLL)にあります:
  OXC0000005 Access Violation

□対処
1.dao360.dllをレジストリに再登録
2.officeの修復

□対処結果
状況変わらず。

以上です。   


引用未解決
トピックタグ
とおり
 とおり
(@とおり)
ゲスト
結合: 21年前
投稿: 43
 

AfxGetModuleState()->m_dwVersion = 0x0601;

void CHogeHoge::OnOK()
{
CDaoDatabase db;
db.Open(d:\\db54.mdb,FALSE ,FALSE ,");

CDaoRecordset rso(&db);
rso.Open(dbOpenDynaset,SELECT * FROM list);
rso.Close();
db.Close();

db.Open(d:\\db54.mdb,FALSE ,FALSE ,");
db.Close();
}

OS:win 2000 SP4
VS6.0 SP6
Aceess 2003
db54.mdbはAceess 2003にて作成したファイル

こんな感じのコードだと再現しませんでした。
再現可能な最小のソースは提示できませんか?

#VS6のSPはいくつですか?


返信引用
toki
 toki
(@toki)
ゲスト
結合: 16年前
投稿: 10
Topic starter  

おはようございます。tokiです。
とおりさん、回答ありがとうございます。
ソースを以下に記述します。
また、VS6.0のバージョン情報を見ましたがVS6.0 C++でした。

□ソース
int Sv_main(char* ID,char* PASSWD)
{
CDaoDatabase DUSER_Dao;
int lc_Ret;
if(MDBMopen_Exc(&DUSER_Dao, DBname, DB_NOEXCL) != DB_NORMAL)
return -1;
.
.
}

DEFDLL int MDBMopen_Exc(CDaoDatabase* databasep, int db_kind, int excl_flg)
{
CString  database_name;
AfxGetModuleState()->m_dwVersion = 0x0601;
.//db_kind情報からdatabase_nameへパスとmdb名が変換されます。
.
try{
databasep->Open(database_name, FALSE, FALSE); <==ココデdao360.dllエラー発生
}
catch(CDaoException* e){
e->Delete();
return(DB_OPENERR);
}
return(DB_NORMAL);
}
以上です。宜しくお願い致します。


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

#VS6のSPはいくつですか?
聞かれているのは、サービスパックのバージョンですよ。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

SPに関してはVC++6.0の場合、バージョン情報とかには出てこないので
何処まで適応しているかはインストールした時に記録にでも残しておかないと
わからないと思います。
もし、全く当てていない状態なら当てておいた方が良いと思いますけれど。


返信引用
toki
 toki
(@toki)
ゲスト
結合: 16年前
投稿: 10
Topic starter  

皆さん、ありがとうございます。tokiです。

VS6のサービスパックはSP6でした。

宜しくお願いいたします。


返信引用
rin
 rin
(@rin)
ゲスト
結合: 18年前
投稿: 112
 

close部分のソースはどんなんでしょう?


返信引用
toki
 toki
(@toki)
ゲスト
結合: 16年前
投稿: 10
Topic starter  

rinさん、ありがとうございます。tokiです。
close部分のソースは以下のようになります。

□ソース
DEFDLL int MDBMAclose_Exc(CDaoDatabase *databasep, int db_kind)
{
 try{
   databasep->Close();
 }
 catch(...){
   return DB_EXCEPTION;
 }
 return DB_NORMAL; //正常終了
}
以上、宜しくお願い致します。


返信引用
とおり
 とおり
(@とおり)
ゲスト
結合: 21年前
投稿: 43
 

再現しませんでした。

問題の切り分けのために、新規でダイアログのプロジェクトを作成して
私の提示したソースを実行してみるとどうなりますか?
#mdbファイルなども直指定で

またオープンの所にブレークを張ってF11でステップインしていって
DAOCORE.CPPのどこでエラーが発生しているか確認できませんか?
↑環境によってはソースは見られないかも。 


返信引用
toki
 toki
(@toki)
ゲスト
結合: 16年前
投稿: 10
Topic starter  

とうりさん、ありがとうございます。tokiです。

まず、DAOCORE.CPP内でのエラー発生箇所情報を報告します。

□ソース
void CDaoDatabase::Open(LPCTSTR lpszName, BOOL bExclusive,
BOOL bReadOnly, LPCTSTR lpszConnect)
{
ASSERT_VALID(this);

// Re-Opening is invalid.
if (IsOpen())
{
ASSERT(FALSE);
return;
}

// Allocate, maintain and/or open workspace if necessary
InitWorkspace();

COleVariant var(lpszName, VT_BSTRT);

DAO_CHECK(m_pWorkspace->m_pDAOWorkspace->OpenDatabase(
V_BSTR(&var),
COleVariant((long)bExclusive, VT_BOOL),
COleVariant((long)bReadOnly, VT_BOOL),
COleVariant(lpszConnect, VT_BSTRT),
&m_pDAODatabase));           <==ココデエラー発生

以上、宜しくお願いいたします。


返信引用
toki
 toki
(@toki)
ゲスト
結合: 16年前
投稿: 10
Topic starter  

皆さん、お世話になります。tokiです。
先ほどのDAOCORE.CPPの各引数の値を追加報告します。

□ソース
void CDaoDatabase::Open(LPCTSTR lpszName, BOOL bExclusive,
BOOL bReadOnly, LPCTSTR lpszConnect)

 ・lpszName = 正しいパス名&mdb名
 ・bExclusive = 0
 ・bReadOnly  = 0 
 ・lpszConnect = "(空です)

DAO_CHECK(m_pWorkspace->m_pDAOWorkspace->OpenDatabase(
V_BSTR(&var),
COleVariant((long)bExclusive, VT_BOOL),
COleVariant((long)bReadOnly, VT_BOOL),
COleVariant(lpszConnect, VT_BSTRT),
&m_pDAODatabase));
           
 ・VT_BOOL = 11
 ・VT_BSTRT  = シンボル名がみつかりません
 ・&m_pDAODatabase = 0x00000000

以上、宜しくお願いいたします。


返信引用
gak
 gak
(@gak)
ゲスト
結合: 21年前
投稿: 132
 

> 問題の切り分けのために、新規でダイアログのプロジェクトを作成して
> 私の提示したソースを実行してみるとどうなりますか?
> #mdbファイルなども直指定で
これ重要だよ。
今まで「多分こっちの方向は症状とは無関係だろうなぁ」と思いつつ周囲300°ほどを見渡
して原因を探っていた回答者の人達が、この結果いかんで前方100°程(適当値)に絞って
原因探索を行えるようになるかもしれない。


返信引用
toki
 toki
(@toki)
ゲスト
結合: 16年前
投稿: 10
Topic starter  

gakさん、ありがとうございます。tokiです。

今、割り込み作業発生の為、未だ実行できてません。

実行できしだい、報告いたします。


返信引用
toki
 toki
(@toki)
ゲスト
結合: 16年前
投稿: 10
Topic starter  

gakさん、とおりさん tokiです。

ご提示して頂いたソースベースで正常動作いたしました。

違いが何なのか、未だわかりませんが、冷静に自分のソースを

見直してみます。

この結果から、何かヒントがありましたらお教えください。

宜しくお願い致します。


返信引用
toki
 toki
(@toki)
ゲスト
結合: 16年前
投稿: 10
Topic starter  

皆さん、お世話になります。tokiです。

ソースを見直してましたら、これかっと思われる点がありました。

以下のように、サブスレッドからopenすると異常終了。

メインスレッドだと正常終了しました。

□事象
1. AAA.mdb open [メインスレッド]正常終了
2. AAA.mdb close [メインスレッド]正常終了
3. AAA.mdb open [サブスレッド] 異常終了

□対処
1. AAA.mdb open [メインスレッド]正常終了
2. AAA.mdb close [メインスレッド]正常終了
3. AAA.mdb open [メインスレッド]正常終了

初歩的なことなのかも知れませんが、サブスレッドからは、できないのでしょうか?


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

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