采用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.   

    LPCTSTR是指针类型阿,给你看一个把com类型,转换为CString的函数
    CString CMyDatabase::VariantToCString(VARIANT var)
    {
    CString strValue;
    _variant_t var_t;
    _bstr_t bst_t;
    time_t cur_time;
    CTime time_value;
    COleCurrency var_currency;
    switch(var.vt)
    {
    case VT_EMPTY:strValue=_T("");break;
    case VT_UI1:strValue.Format ("%d",var.bVal);break;
    case VT_I2:strValue.Format ("%d",var.iVal );break;
    case VT_I4:strValue.Format ("%d",var.lVal);break;
    case VT_R4:strValue.Format ("%f",var.fltVal);break;
    case VT_R8:strValue.Format ("%f",var.dblVal);break;
    case VT_CY:
    var_currency=var;
    strValue=var_currency.Format(0);
    break;
    case VT_BSTR:
    var_t=var;
    bst_t=var_t;
    strValue.Format ("%s",(const char*)bst_t);
    break;
    case VT_NULL: strValue=_T(""); break;
    case VT_DATE:
    cur_time=var.date;
    time_value=cur_time;
    strValue=time_value.Format("%A,%B%d,%Y");
    break;
    case VT_BOOL: strValue.Format ("%d",var.boolVal ); break;
    default: strValue=_T(""); break;
    }
    return strValue;
    }然后直接zmTmp[0]=strValue
      

  2.   

    zmTmp[0]是一个字符吧char zmTmp[100];
    strcpy(&zmTmp,.........);char *zmTmp=new char[100];
    strcpy(zmTmp,........);