程序如下:
void CSerialCommDlg::OnOnCommCommtral() 
{
// TODO: Add your control notification handler code here
int countAgree=0,countDisAgree=0,countDisclaim=0;//同意数目,不同意数目,弃权数目
int countAllSel=0,countNoSel=0;//全选数目,全不选数目
int count1stand2nd=0,count1stand3rd=0;//选第一个和第二个数目,选第一个和第三个数目
int count2ndand3rd=0;//选第二个和第三个数目VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048];//设置BYTE数组An 8-bit integer that is not signed.
CString strtemp;
if(bReceive)//按下开始接收按钮
{
if(m_Com.GetCommEvent()==2)//事件为2表示接收缓冲区内有字符
{
variant_inp=m_Com.GetInput();//读缓冲区
safearray_inp=variant_inp;//VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize();//得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++)
{
n++;//换行计数BYTE bt=*(char*)(rxdata+k);//字符型
if(m_nInputMode==0)//十六进制
strtemp.Format("%02X ",bt);//将字符以无符号十六进制大写方式送入临时变量strtemp存放,注意这里加入一个空格
else
strtemp.Format("%c",bt);//将字符送入临时变量strtemp存放
m_strEditReceive=m_strEditReceive+strtemp;//加入接收编辑框对应字符串
//UpdateData(FALSE);//更新编辑框内容
**************************************************************************************************************************/ 
//把采集的数据添加到数据库中 if(!m_pSet->IsOpen())//如果没有打开数据表
{
//设置排序的字段和排序方式
m_pSet->m_strSort="ID";//默认是升序,降序为"ID DESC"
m_pSet->Open();//打开数据表
m_pSet->SetAbsolutePosition(1);//把游标放在第一个记录处,即ID=1处,不用nRecords,直接用1
}//判断选涂的结果,并根据结果来存储到相应的字段里面
/*************************************************************************************************************************
第一次触发:判断是否为FE,如果不是将下次触发仍然算第一次触发。 
第二次触发:判断是否为E3,如果不是,下次触发认为为第一次触发。 
第三次触发:就当成记录数据的第一次触发,就是上次那个number=1的情况 
前两步单独用一个变量进行表示,假设为flag; 初始值为0 若有了一个触发: 
判断flag值是否为0,若是则认为是第一次触发,判断值是否为FE,如果是令flag为1,否则令其为0;
若flag为1,则认为是第二次触发,判断是否为E3,若是,则令flag为2,否则令其为0;并把游标设置在第1页第1个
同理,若flag为1,则认为是第二次触发,判断是否为E5,若是,则令flag为2,否则令其为0;并把游标设置在第2页第1个
后面依次类推! 
若flag为2,则认为是通过前面两关的采集数据,按照上次的保存方式进行保存    
*************************************************************************************************************************/
if(flag==0)
{
//int result = (strtemp.Find("FE ")!= -1) && (strtemp.GetLength() == 2);//直接用strcmp不正确,因为strtemp 是一个CString变量,CString是一个类哎 里面塞了很多的变量
//如果strtemp="FE "。这种方法比上一种更简单
if(strtemp.Compare("FE ")==0)//每页开始标志识别
flag=1;
else
flag=0;
}
if(flag==1)
{
if(strtemp.Compare("E3 ")==0)//第1页标志识别
{
m_pSet->SetAbsolutePosition(1);//把游标放到第1页开头 
flag=2; 
}
else if(strtemp.Compare("E5 ")==0)//第2页标志识别
{
m_pSet->SetAbsolutePosition(31);//把游标放到第2页开头 
flag=2; 
}

}if(flag==2)
{
if(strtemp.Compare("69 ")==0)//同意
{
countAgree++;
m_pSet->Edit();//编辑
m_pSet->m_AGREENUMBER=countAgree;
m_pSet->Update();//更新记录集
m_pSet->MoveNext();//移向下一个记录 
}
else if(strtemp.Compare("65 ")==0)//不同意
{
countDisAgree++;
m_pSet->Edit();//编辑
m_pSet->m_DISAGREENUMBER=countDisAgree;
m_pSet->Update();
m_pSet->MoveNext(); 
}
else if(strtemp.Compare("63 ")==0)//弃权
{
countDisclaim++;
m_pSet->Edit();//编辑
m_pSet->m_DISCLAIMNUMBER=countDisclaim;
m_pSet->Update();
m_pSet->MoveNext(); 
}
//判断游标是否到最后一个记录处,如果是,就把游标重新设置到第一处,即ID=1处重新开始存数据
//if(m_pSet->IsEOF())
// m_pSet->SetAbsolutePosition(1);//把游标放在第一个记录处,即ID=1处重新从第一个记录开始存数据} 
//判断游标是否到最后一个记录处,如果是,就把游标重新设置到第一处,即ID=1处重新开始存数据
if(m_pSet->IsEOF())
m_pSet->SetAbsolutePosition(1);//把游标放在第一个记录处,即ID=1处重新从第一个记录开始存数据
counts++;
if(counts==30)//如果读了30个,就把flag=0,开始读新的一页
flag=0;}}
}
if(n%32==0)
{
m_strEditReceive+="\r\n";//接收字符换行
m_ctrlEditReceive.LineScroll( 10, 0 );
n=0;

UpdateData(FALSE);//更新编辑框内容
return;
}

解决方案 »

  1.   

    哦,这样
    如果是SQL语句
    UPDATE table SET col1 = col1 + 1;如果用记录集,num = m_pSet->m_num; //记录集中的值
    num++
    m_pSet->m_num = num;
    m_pSet->Update();        //差不多就是这样
      

  2.   

    那和我原来的是一样的呀!
    countAgree++;
    m_pSet->m_AGREENUMBER=countAgree;
    m_pSet->Update();//更新记录集
    m_pSet->MoveNext();//移向下一个记录 
    后来我以为是没有加edit()的原因,就加上edit()函数了,就是我现在的程序了countAgree++;
    m_pSet->Edit();//编辑
    m_pSet->m_AGREENUMBER=countAgree;
    m_pSet->Update();//更新记录集
    m_pSet->MoveNext();//移向下一个记录 
    我刚才调试了一下,发现我上次存到数据库中的内容,被这次采集的内容就给改写了,为什么?我的程序什么地方有错误呀?请指点。怎样才能让下次采集的数据在上次的基础上累加呀?先谢谢了!
      

  3.   

    countAgree要先从数据库中取到值
      

  4.   

    什么意思?
    你的QQ是多少?我的是331991648,能在QQ上聊聊吗?