動作環境 :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;
}
ツイート | ![]() |