CString mStrCir;
mStrCir = "select * from circuit";
MessageBox("k10k10");
try
{
m_pRs_cir->Open(_variant_t(mStrCir), _variant_t((IDispatch *)m_pCon.GetInterfacePtr(),true), adOpenKeyset, adLockOptimistic, adCmdTable);
MessageBox("k10k11");
}
catch (_com_error &e)
{
::MessageBox(NULL,"无法打开mytable表。","提示", MB_OK | MB_ICONWARNING);
}调试到m_pRs_cir->Open(_variant_t(mStrCir), _variant_t((IDispatch *)m_pCon.GetInterfacePtr(),true), adOpenKeyset, adLockOptimistic, adCmdTable);后终止。运行也只能运行到MessageBox("k10k10");
此处目的是为了打开表circuit的数据集,请问各位大哥,我这里哪里有问题,请指点。
还有就是m_pRs_cir->Open(_variant_t(mStrCir), _variant_t((IDispatch *)m_pCon.GetInterfacePtr(),true), adOpenKeyset, adLockOptimistic, adCmdTable);打开MYSQL和MS SQL区别是什么,有时好象又一样,是不是ADO的读写方式都是统一一样的?并不理解m_pRs_cir->Open里各项的具体作用

解决方案 »

  1.   

    MYSQL和MS SQL重点在连接字符串不同
    你确定m_pCon是正确的了?
      

  2.   

    我刚刚发现了个事情,我的数据库连接本来是在前一个类中实现的,在这个类中主要是实现打开表circuit然后读写数据。
    当我把前个类中的数据库连接删除并在本类中实现连接时,就可以打开数据集了,但是却不能正常读出
    CString strColName[8] = {"CirNum","CirType","DirCode","DirNum","CirGroup","OccupyDesk","Gain","RingTime"};//数据库表名 int k =0;
    m_pRs_cir->MoveFirst(); while(!(m_pRs_cir->adoEOF))
    {

    for(int i = 0;i<8;i++)
    { MessageBox("k10k10222222");
    CString strContent[8];
    strContent[i]=(char*)_bstr_t(m_pRs_cir->GetCollect((_bstr_t)strColName[i])); //读取字段名

    if(i==0)
    {
    m_list_cirnum.InsertItem(k,strContent[i]);//插入LIST中
    }
    else
    {
    m_list_cirnum.SetItemText(k,i,strContent[i]);
    }
    }
    k++;
    m_pRs_cir->MoveNext();
    // m_pRscir.m_pRs_cir->MoveNext();//本来在另外一个类中连接数据库时需要前类对象m_pRscir来调用字符集操作m_pRs_cir。
    if(k>10)
    {
    MessageBox("k10k1055555555");
    break;
    }
    }
    但是失败,循环到6时就跳出循环,不知道为什么
      

  3.   

    还有问题就是前面的问题:
    在前个类中进行数据库连接时声明的对象m_pCon.CreateInstance(__uuidof(Connection));
    m_pRs_cir.CreateInstance(__uuidof(Recordset));初始后,在本类中为什么不能用前类在本类中新声明的对象来调用呢?
    前类中的m_pCon和m_pRs_cir并没有销毁(应该没有,还没关系窗口);是不是调用方法不对,请指点。菜鸟求学中...
      

  4.   

    while(!(m_pRs_cir->adoEOF)) 是不是不能读取NULL的值?
    怎么才能在读NULL值时不报错...
      

  5.   

    这句有问题,如果为空就会出错的
    strContent[i]=(char*)_bstr_t(m_pRs_cir->GetCollect((_bstr_t)strColName[i])); //读取字段名 
    应该加判断
    _variant_t GetValue;GetValue=m_pRs_cir->GetCollect((_bstr_t)strColName[i]);
    if(GetValue.vt!=VT_NULL)
        strContent[i]=(char*)_bstr_t(GetValue);