sqlpr="insert into 人员  SELECT * FROM 人员 WHERE 姓名 is null";
//插入    
m_pConnection->Execute(sqlpr.AllocSysString(),
            
            &RecordsAffected,adCmdText);        
sqlpr="SELECT * FROM 人员 WHERE 姓名 is null";
        
//执行一条SQL语句,得到一个记录集
m_printPtr->Open(sqlpr.AllocSysString(),
            
    m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);m_printPtr->Close();//此处报错"对象关闭时,不允许操作。"

解决方案 »

  1.   

    记录集m_printPtr没有成功打开,
    看你在m_printPtr->open()前加了
    m_printPtr.CreateInstance(_uuidof(Recordset));没
    我在连SQL 2005时把adOpenDynamic换成adOpenStatic才好使。
      

  2.   

    有m_printPtr.CreateInstance(_uuidof(Recordset));
    如果用adOpenStatic,网络上没法同时看到你的更新!
      

  3.   

    初学ADO,正在做相关实验
    我在连上SQL 2005后,执行你记录集部分代码是可行的(保证之前Connection没有关闭),能得出记录集数,关闭操作也能进行。         m_printPtr->Open(sqlpr.AllocSysString(), 
            m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); 
            long num=m_printPtr->GetRecordCount(); CString message;
    message.Format("共有%d条记录",num);
    MessageBox(NULL,message,"提示",NULL);        m_printPtr->Close();
      

  4.   

    你的问题真是很奇怪,记录集关闭时出错一般都是因为重复关闭或Release造成的,像你这样打开记录集后直接关闭出错,真是不明白,中间没有别的东西了?
      

  5.   

    中间没有一点操作,也是这一句的问题
    m_pConnection->Execute(sqlpr.AllocSysString(), 
                
                &RecordsAffected,adCmdText);
    但它能成功执行。
      

  6.   

    kuyu1987:我是在VC中执行的,ACCESS数据库,SQL 2005不懂。真是一个怪问题。你有没有执行
    m_pConnection->Execute(sqlpr.AllocSysString(), 
                
                &RecordsAffected,adCmdText); 
    这一句?