CString Sql2;
Sql2.Format("select * from Doc_SE_Idf");
pRst=pConn->Execute(_bstr_t(Sql2),NULL,adCmdText);
while(1)
{
string str_id=(_bstr_t)pRst->GetCollect("Id");
CString s;
s=(LPCTSTR)(_bstr_t)pRst->GetCollect("Id");    
s.TrimLeft();         
s.TrimRight();
CString s1;
s1.Format("%s",id.c_str());
         if(s.Compare(s1)==0)      //相同
{
   cout<<444<<endl;
   CString str_sum;
   str_sum=(LPCSTR)(_bstr_t)pRst->GetCollect("Sum");

            CString Sql2;
   int a=atoi(str_sum);                
            int b=atoi(num.c_str());
   int c=a+b;
            cout<<777<<endl;
            Sql2.Format("update Doc_SE_Idf set Sum='%d' where Id='%s' ",c,id.c_str());//????????????
            pConn->Execute(_bstr_t(Sql2),NULL,adCmdText);
   cout<<333<<endl;
   break;
}   
else  
{
            pRst->MoveNext();
}
if (pRst->rsEOF)  //是否到底
{
    cout<<555<<endl;
    cout<<word<<endl;
             CString Sql1;
   Sql1.Format("insert into Doc_SE_Idf(Id,Word,Sum) values('%s','%s','%s')",id.c_str(),word.c_str(),num.c_str());
    pConn->Execute(_bstr_t(Sql1),NULL,adCmdText);
    break;
}
}
pRst->Close();
pConn->Close();
pRst.Release();
pConn.Release();
CoUninitialize();
出现的问题特别奇怪,上面的函数中涉及到表Doc_SE_Idf,当该表中的数据达到3000行左右时(奇怪的是有时是3092行,有时3105行3119,3093,3096 ,总之就是3000行左右)用问号标示出的语句就会报错,而假如人为的把该表中的数据删除一些如2000行,再继续执行则没有问题,但当记录再次到达3000行左右时,问题依旧,百思不得其解!!本表中大约需要存放40000行左右数据。上述代码只是部分代码,但主要的功能语句都在,请高人指点,感激不尽!!!!
报的错误是:Debug Error!
            Program :路径。exe
            abnormal progran  termination     不会发图,大家将就看吧!
           

解决方案 »

  1.   

    Sql2.Format("update Doc_SE_Idf set Sum='%d' where Id='%s' ",c,id.c_str());
    你的 sum 和 id 都是什么数据类型?
    sum 一般来说都是整数或浮点数,如果这样的话,那 %d 前后的单引号不需要。
      

  2.   

    补充一下:
    捕获的错误为:超时已过期
    现在已将SQL SERVER 中工具-》选项-》高级-》登陆超时和查询超时设为6000,
    将SQL Server组-》(local)(Window NT)右键"属性"-》连接->查询超时设定为“0”
    但问题没有解决,看过有些帖子说把ADO 组件的CommandTimeOut属性改为0,是在程序里该吗?
    在程序里加入语句“pConn->CommandTimeout=0;”后却出现另一问题:等待缓冲区闩锁时发生超时
    类型4,用于页(1:559),数据库ID7
    我还安装了sql2Ksp4的补丁也没解决问题。
    哪位高人救命啊!!!