ADO接続でSP2を入れると強制終了の回避方法?


次長課長  2007-07-24 19:22:25  No: 65824

動作環境    :WindowsXP Professional(英語版)
        Version 2002 SP2(英語版)
開発環境    :Visual C++6.0 SP6(英語版)
データベース:Access2000(ADO接続)

お世話になります。他の掲示板でも同じトピックスで載せています。
返答がなかったのでこちらの掲示板にも掲載させていただきます。

Access2000で作成したxxx.mdbに
INSERT DELETE UPDATE 処理を行うと
強制終了してしまいます。
<<デバッカーではm_pConnect->Execute()で終了>>

サービスパック2を入れてから
強制終了するようになりました。
サービスパック2をアンインスール
したところ正常に動作しました。

ちなみに
日本語のWindowsXP Professional SP2
Windows2000 では正常に
INSERT DELETE UPDATE 処理を行えます。

どなたか経験ある方はご連絡お願いします

setting.udlの中身
プロバイダ
  Microsoft Jet 4.0 OLE DB ProVider
接続データベース名  C:\\partlib\\setting.mdb
  ユーザ名  Admin
  パスワード  なし
  パスワード空にする
詳細設定  share Deny None
      
static _TCHAR *_gszTableName[5] =
{
  _T("TBL_Chip"), _T("xxx"), _T("xxx"),  _T("xxx"), _T("")

};

BOOL CVclsvwDlg::DB_Open() 
{
  HRESULT hr;
  r_count=0;
  char TmpTable[512];
  int i=0;
  int s=1;
  AfxOleInit();//OLE/COMライブラリ初期化
  
  try
  {
    //ADOオブジェクトの生成
    hr = m_pConnect.CreateInstance(__uuidof(Connection));
    if(SUCCEEDED(hr))
    {
      //データベースへの接続
      hr = m_pConnect->Open(
        _bstr_t(L"File Name=C:\\partlib\\setting.udl;"),
        _bstr_t(L""),
        _bstr_t(L""),
        adModeUnknown);

      if(SUCCEEDED(hr))
      {
        m_IsConnectionOpen = TRUE;
      }
    }
    //レコードセット取得
    if(m_IsConnectionOpen==TRUE)
    {
      if(s==0)//selectは正常に動作
      {
        sprintf(TmpTable,"SELECT * FROM %s",_gszTableName[0]);//←selectは正常に動作
        _bstr_t bstrQuery(TmpTable);//指定するテーブル
        _variant_t vRecsAffected(0L);
        m_pRecordset = m_pConnect->Execute(bstrQuery,&vRecsAffected,adOptionUnspecified);
        
        //レコードがEOFになるまでループ
        for(i=0;m_pRecordset->GetadoEOF()==false;i++)
        {
          DispFields();
          listDataInsert(r_count);
          m_pRecordset->MoveNext();
          r_count++;
          
        }

      }
      else if(s==1)//DELETE INSERT UPDATEはExecute()で強制終了
      {
        sprintf(TmpTable,"DELETE FROM %s WHERE `Part No`=%d",_gszTableName[0],partNo);
        _bstr_t bstrQuery(TmpTable);
        _variant_t vRecsAffected(0L);
        m_pConnect->BeginTrans();
        m_pConnect->Execute(bstrQuery,&vRecsAffected,adOptionUnspecified);
        m_pConnect->CommitTrans();
      //............................................
      
    }        
  }
  catch(_com_error &e)
  {
    AfxMessageBox(CString(e.ErrorMessage()));
  }
  return TRUE;
}


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加