動作環境 :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(LFile 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;
}