我在.h文件的声明
_RecordsetPtr ADOSet;
_ConnectionPtr ADOConn;我在OnInitDialog中的定义
if (FAILED(::CoInitialize(NULL)))
{
AfxMessageBox("ADO Init failed");
return false;
}
    try
{
ADOConn.CreateInstance(__uuidof(Connection));
ADOConn->Open(  "DSN=test","","",-1);
}
catch(_com_error &e)
{
CString err;
err.Format("%s",(char*)(e.Description()));
AfxMessageBox(err);
}

ADOSet.CreateInstance(__uuidof(Recordset));
在OnButton1()中的定义
_variant_t mm;
// TODO: Add your control notification handler code here
if (ADOSet->State==adStateOpen) ADOSet->Close();
        mm="insert into t1 (name) values ('"+m_name+"')";
ADOSet->Open(mm,ADOConn.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdUnknown);
为什么编译时不报错,运行时说:
Runtime error 
D:\test\release\test.exe
abnormal program termination 急急急急急!!!!!

解决方案 »

  1.   

    有没有初始化OLE环境
    AfxInitOle();
      

  2.   

    ::CoInitialize(NULL) 和 AfxInitOle();不是一样么?
      

  3.   

    _RecordsetPtr pRec = NULL;
    TESTHR(pRec.CreateInstance(__uuidof(Recordset)));       
    pRec->CursorLocation = adUseClient;
    TESTHR(pRec->Open(strSQL ,_variant_t((IDispatch *)m_pConnection,TRUE),adOpenStatic, adLockOptimistic, adCmdText));以上是通过SQL读数据
    初始化是下面这段
    _ConnectionPtr  m_pConnection;
    CoInitialize(NULL);
    TESTHR(m_pConnection.CreateInstance(__uuidof(Connection)));
    TESTHR(m_pConnection->Open((_bstr_t)strConnect, _T(""), _T(""), adConnectUnspecified));
    其中strConnect是连接串一段用了很久的代码,试试吧
      

  4.   

    //我是这样写的,你可以参考一下 CString strConnect="Provider=SQLOLEDB; Server=";
    strConnect+=dbinfo.m_ip;
    strConnect+=";Database=";
    strConnect+=dbinfo.m_dbname;
    strConnect+="; uid=";
    strConnect+=dbinfo.m_user;
    strConnect+="; pwd=";
    strConnect+=dbinfo.m_passwd;
    strConnect+=";";
    _bstr_t strCon=_bstr_t(strConnect);
    try
    {
    hr=pConn.CreateInstance(__uuidof(Connection));
    if(FAILED(hr))
    {

    Message("pConn连接SQL Server失败!..."); 
    return false;

    pConn->Open(strCon,"","",NULL); 
    hr=pConnTrans.CreateInstance(__uuidof(Connection));
    if(FAILED(hr))
    {
    Message("pConnTrans连接SQL Server失败!..."); 
    return false;
    }
    pConnTrans->Open(strCon,"","",NULL);  
    }
    catch(_com_error err)
    {
    Message("错误信息是:");
    Message(err.ErrorMessage());
    Message("错误描述是:");
    Message((char *)err.Description());
    Message("错误源是:");
    Message((char *)err.Source());
    Message("连接SQL Server  1失败!..."); g_KillThread=FALSE;
    g_Thread1Killed=FALSE;
    return FALSE;
    }
    catch(...)
    {

    Message("连接SQL Server  2失败...");
    g_KillThread=FALSE;
    g_Thread1Killed=FALSE;

    return false;
    }

    return TRUE;
    }
      

  5.   

    跟踪一下呀
    我上次就是退出是出现这种情况,后来把m_pConnection释放掉就没事了
    m_pConnection->Close();
    m_pConnection->Release();