我想让用户以用户名和密码的形式  进入SqlServer2000的数据库里。  
void  CClerk_trainedDlg::OnSubmit()    
{  
       .........(函数,变量定义省略)  
       .........  
         UpdateData(TRUE);  
         strQuery  =  "select  *  from  Clerk_USER_PSWD  where  TMS_USER  =1  and  TMS_PSWD=1  ";  
         theApp.ADOExecute(theApp.m_pADOSet,  strQuery);  
 
         int  nTotalStu  =  theApp.m_pADOSet  ->GetRecordCount();  
             
           if  (nTotalStu  <=  0)  
                       AfxMessageBox("没有您的用户记录,请重新输入用户名,密码!");  
           theApp.m_pADOSet  ->MoveFirst();  
             ........  
}  
 
 
     bool  CClerk_trainedApp::ADOExecute(_RecordsetPtr  &ADOSet,  _variant_t  &strSQL)  
{  
           if  (  ADOSet->State  ==  adStateOpen)            ADOSet->Close();  
           try  
           {  
                         ADOSet->Open(strSQL,  ADOConn.GetInterfacePtr(),  adOpenStatic,  adLockOptimistic,  adCmdUnknown);  
                         
                       //MessageBox(ADOSet->State);  
                       return  true;  
           }  
           catch(_com_error  &e)  
           {  
             CString  err;  
                 err.Format("ADO  Error:  %s",(char*)e.Description());  
                 AfxMessageBox(err);  
                 return  false;  
           }  
       
 
说明:  当调用  ADOExecute(_RecordsetPtr  &ADOSet,  _variant_t  &strSQL)  时,返回值为true  
             sql数据库里的相应的用户名和密码也是正确地    
             但是  返回的记录值nTotalStu  是-1  ,表明查询不到  记录。  
             
             求各位高人指点。谢谢  了。

解决方案 »

  1.   

    strQuery  =  "select  *  from  Clerk_USER_PSWD  where  TMS_USER  ='1'  and  TMS_PSWD='1'  ";
      

  2.   

    先看看你的SQL语句有没有问题!能不能在查询分析器里执行出来??
      

  3.   

    把纪录集体的游标设置为adUseClientpRs->cursorlocation = adUseClient;
      

  4.   

    感谢各位的建议;
      1 我是将adCmdTexta改为dCmdUnknown 也不行的。这个方法试过了
      2 sql语句在查询分析器里是可用的。 语句没问题。
      3 在易出错处,数据库连接,记录集打开处,我加入了AfxMessageBox监控,都是正常的。 
      问题解决:
      我将theApp.m_pADOSet  ->GetRecordCount();换成了m_pADOSet->endoffile ,程序正常了。
    但是原因还是不清楚。  
      

  5.   

    原因是这个GetRecordCount函数并不是返回真实的记录数量的必须使用MoveNext到最后一个记录才能得到总的数量
      

  6.   

    pioneer_public() 是对的
    你在MSDN里搜索GetRecordCount,查看CRecordset::GetRecordCount里面有详细的说明。
    The total number of records is only known after the user has moved beyond the last record.
    而且,MoveLast还不行,必须重复的调用MoveNext。
    自己看看吧,easy.
      

  7.   

    招聘VC++程序员发布日期:2006年9月22日 15时7分
    公司名称:深圳亚邮科技有限公司(http://www.szyy.com)公司简介:亚邮公司成立于1994年。公司以引进开发、研制邮政及金融自动化系统为主营业务,产品销售遍及全国各地。公司研制的亚邮商业信函名址数据库
    多年来,公司与中国邮政局及金融自动化发展同步,紧跟世界科技步伐,与欧美及港、澳、台业界建立了广泛而密切的商务联系,被德国RENA公司、德国SCHEIDMANTEL公司指定为中国大陆地区总代理。 
    公司以专业水准在产品售后服务方面具有强大的技术支持能力,以快捷优质的终身服务制度受到用户的欢迎。 
        2000年10月,公司顺利通过了ISO9002国际质量体系认证,为未来更好地服务客户提供了有力的保证! 工作地点:北京市,海淀区。待遇:面议截止日期:2006年10月10日 程序员职位(1名):
    要求精通 VC++,MFC,ADO ,SQL Server 数据库。有意者请将简历发送到 [email protected] ,在邮件标题中注明‘应聘VC++程序员’。(条件不符者请勿打扰,谢谢合作)