采用ado连接数据库SQL Server,当某一字段(例如newzdm)为空
采用
strcpy(zmTmp[0],(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("newzdm"));
获得内容,时候就会报“类型不匹配” 错!请问如何修改??
谢谢!!
 
代码片断
 
/*------------------------------------------------------
 
 GetCwdbm() : Get cwdbm from databse to array
 
--------------------------------------------------------*/
 
int GetCwdbm()
{ char zmTmp[10][20];
 memset ( zmTmp, 0, sizeof(zmTmp) );/*-----------------数据库操作----------------------------*/ 
 CString sql;
 sql.Format("SELECT newzdm, oldzm, olddbm FROM cwdbm");
 try
 {
  m_pRecordset.CreateInstance("ADODB.Recordset");
  m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
  if(m_pRecordset->adoEOF)
  {
   AfxMessageBox("注意:数据库cwdbm为空!");
   return 1;
  }
  else
  {
   while(!m_pRecordset->adoEOF)
   {
    strcpy(zmTmp[0],(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("newzdm"));
    strcpy(zmTmp[1],(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("oldzm"));
    strcpy(zmTmp[2],(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("olddbm"));
    strcpy( cwdbm[cwdbmNum].zdm, zmTmp[0] );
    strcpy( cwdbm[cwdbmNum].zm, zmTmp[1] );
    strcpy( cwdbm[cwdbmNum].cwdbm, zmTmp[2] );
    cwdbmNum++;
    memset(zmTmp, 0, sizeof(zmTmp));
    m_pRecordset->MoveNext();
   }
  }
  m_pRecordset->Close();
 }
 catch(_com_error e)///捕捉异常
 {
  CString temp;
  temp.Format("连接数据库(cwdbm)错误信息:%s",e.ErrorMessage());
  AfxMessageBox(temp);
  return -1;
 }
/*-------------------------------------------------------*/
 return 0;
}
 
 

解决方案 »

  1.   

    先用临时变量代一下试试,
    CString sTemp = (LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("newzdm"));
    strcpy(zmTmp[0],sTemp);
      

  2.   

    newzdm字段是文本类型的吗?
    oldzm其它的字段呢,可正常?
      

  3.   

    newzdm, oldzm, olddbm,三个字段都是char ,而且是允许NULL的
    我调试的时候,发现问题好象不是在strcpy而是在
    (LPCTSTR)(_bstr_t)
    这个转换上,具体怎么改我就不知道了,肯请各位高手指教!
    谢谢
      

  4.   

    怎么才能先判断 m_pRecordset->GetCollect("newzdm"))
    是否为空,再进行转换啊?
    最好能给出代码?
    谢谢
      

  5.   

    CString sTmp;variant_t vt;
    bstr_t  bt;
    vt=m_pRecordset->GetCollect("newzdm");
    bt=(bstr_t)vt;
    sTmp=(LPSTR)bt;