您的位置:首页 > 编程语言 > PHP开发

ADO日记:为什么_RecordsetPtr的RecordCount为-1

2009-03-03 09:26 489 查看
/*

下面的代码中 code block1 中RecordCount的值为-1,而code block2的值正常;

*/

 

_variant_t vsSQL = "select name from sysobjects where xtype='u'";
 _RecordsetPtr pRs = NULL;
 try
 {
  if ( FAILED( pRs.CreateInstance( __uuidof( Recordset ) ) ) )
      CatchAdoError( __FILE__, __LINE__ );
  else
  {
   if ( FAILED( pRs->Open( vsSQL, m_pView->GetDbConnection().GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdText ) ) )
   {
    CatchAdoError( __FILE__, __LINE__ );
   }
   else
   {
    VARIANT vIdx;
    V_I4( &vIdx ) = 0;
    V_VT( &vIdx ) = VT_I4;
    
    for ( long i = 0 ; i < pRs->RecordCount; i++ )
    {
     VARIANT vFdValue = pRs->Fields->GetItem( vIdx )->Value;
     _bstr_t s = "NULL";
     if ( vFdValue.vt != VT_NULL )
      s = vFdValue.bstrVal;     
     m_TableListCtrl.InsertItem(i,(char*)s);
     pRs->MoveNext();
    }
   }
   pRs->Close();

  //------code block 1
   vsSQL = "select * from Table_test";
   pRs->Open( vsSQL, m_pView->GetDbConnection().GetInterfacePtr(), 
    adOpenStatic, adLockOptimistic, adCmdText );
   TRACE("ddd1 = %d /n",pRs->RecordCount);
   pRs->Close();

  //----end code block 1

//------code block 2
   vsSQL = "select * from Table_test";
   pRs->Open( vsSQL, m_pView->GetDbConnection().GetInterfacePtr(),
    adOpenKeyset, adLockReadOnly, adCmdText );
   TRACE("ddd2 = %d /n",pRs->RecordCount);
   pRs->Close();

  //----end code block 2

  }
 }
 catch ( _com_error& e )
 {
  m_pView->CatchComError( e, __FILE__, __LINE__ );
 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  file table null