大家帮忙一下ADO连接上了数据库,但是我操作的时候就会错误,不知道为什么,比如我声明了_RecordsetPt m_pRecordset;来操作m_pRecordset->adoEOF就会出错,不知道为什么,只要用到m_pRecordset这个指针就会弹出:Runtime Error!
Program:...
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.如果我把关于m_pRecordset的东西注释掉就可以了,不知道为什么,请你们帮忙以下,我弄了几天,源码也看了很多但是还是不懂,人家源码可以但是我做的时候就会出错!先感谢大家!
Program:...
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.如果我把关于m_pRecordset的东西注释掉就可以了,不知道为什么,请你们帮忙以下,我弄了几天,源码也看了很多但是还是不懂,人家源码可以但是我做的时候就会出错!先感谢大家!
看看会不会对你有帮助
http://blog.csdn.net/xianglitian/archive/2010/05/22/5617173.aspx
http://http://topic.csdn.net/u/20100429/11/a1a68cd2-d942-4f6b-b387-69a130ec5888.html
class CADODB
{
public:
CADODB();
virtual ~CADODB();
public:
_RecordsetPtr m_pRecordset;
void OnInitADODB(_bstr_t strConnect,_bstr_t userID,_bstr_t password);
void Select(_bstr_t sqlstr);
void Execute(_bstr_t sqlstr);
void AddNew(_bstr_t sqlstr,char* str[],int index);
protected:
_ConnectionPtr m_pConnection;
};#include "stdafx.h"
#include "ADODB.h"CADODB::CADODB()
{
::CoInitialize(NULL);
}CADODB::~CADODB()
{
if (m_pRecordset != NULL)
m_pRecordset->Close();
m_pConnection->Close();
::CoUninitialize();
}void CADODB::OnInitADODB(_bstr_t strConnect,_bstr_t userID,_bstr_t password)
{
try
{
m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection->Open(strConnect,userID,password,adModeUnknown);
}catch(_com_error e)
{
cout<<e.Description()<<endl;
}
}void CADODB::Select(_bstr_t sqlstr)
{
try
{
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open(sqlstr,
m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
int nResultCol = m_pRecordset->Fields->GetCount();//获得纪录集总列数
int nResultRow=0;
VARIANTARG var;
m_pRecordset->MoveFirst();
while(!m_pRecordset->adoEOF)
{
for(int i=0;i<nResultCol;i++)
{
var=m_pRecordset->GetCollect(_variant_t(long(i)));
if(var.vt!=VT_NULL)
cout<<_bstr_t(var)<<" ";
}
cout<<endl;
m_pRecordset->MoveNext();
nResultRow++;
}
m_pRecordset->Close();
m_pRecordset=NULL;
cout<<"nResultCol="<<nResultCol<<endl;
cout<<"nResultRow="<<nResultRow<<endl;
}
catch(_com_error e)///捕捉异常
{
cout<<e.Description()<<endl;
}
}void CADODB::Execute(_bstr_t sqlstr)
{
try
{
m_pRecordset=m_pConnection->Execute(sqlstr,NULL,adCmdText);
}catch(_com_error e)
{
cout<<e.Description()<<endl;
}
}void CADODB::AddNew(_bstr_t sqlstr,char* str[],int index)
{
try
{
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open(sqlstr,
m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
m_pRecordset->AddNew();
for(int i=0;i<index;i+=2)
m_pRecordset->PutCollect(str[i],str[i+1]);
m_pRecordset->Update();
}catch(_com_error e)
{
cout<<e.Description()<<endl;
}
} CADODB ado;
ado.OnInitADODB("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Project2\\test1\\db1.mdb","","");
//ado.Select("SELECT * FROM userinfo");
//ado.Execute("SELECT * FROM userinfo Where id=251");
//VARIANTARG var=ado.m_pRecordset->GetCollect("name");
//if(var.vt!=VT_NULL)
// cout<<(char*)_bstr_t(var)<<endl;
//char* str[4]={"name","dddd","pass","678"};
//ado.AddNew("SELECT * FROM userinfo",str,4);
//ado.Execute("DELETE FROM userinfo Where id=4");
ado.Execute("UPDATE userinfo set pass=1111 where id=5");
ado.Select("SELECT * FROM userinfo");
我用这个也有错的!就是m_pRecordeset跟指针有关的都会错!
再看看有没有初始化COM库.
_RecordsetPtr m_pRecordset