一个表里过滤另一个表里的字段(c++)

从一个表里过滤另一个表里的字段.  [2004-12-4] [ from 本站原创 ]  
心情指数#3
实现的目标是从一个库里用一个表的某个字段和另一个表的某个字段对比,如果相同则把第一个表里相同的字段删掉.
Edit1->Text        是输入一个想要拿来进行对比的表名
Edit3->Text        是对相同的单词记数
Memo1               把比较后相同的单词列表,以识别对错
ADOTable1         指向要对其进行操作的表
ADOTable2         指向要拿来对比的表
最初的写法是:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
       ADOTable1->Close();
       ADOTable2->Close();
       ADOTable2->TableName=Edit1->Text;
       Form1->Caption="正在检测表"+Edit1->Text;
       int AA=0;
       ADOTable1->Open();
       ADOTable2->Open();
       int ii=ADOTable1->RecordCount;
       int ij=ADOTable2->RecordCount;
       ADOTable1->First();
       ADOTable2->First();
       for(int i11=1;i11<=ii;i11++)
       {
           ADOTable1->RecNo=i11;
           Refresh();
           for(int i31=1;i31<=ij;i31++)
           {
                 ADOTable2->RecNo=i31;
                 Refresh();
           if (ADOTable1->FieldByName("英")->AsString==ADOTable2->FieldByName("英")->AsString)
               {
                Refresh();
                AA==AA++;
                Edit3->Text=IntToStr(AA);
                Memo1->Lines->Append(ADOTable1->FieldByName("英")->AsString);
                Memo1->Lines->Append(ADOTable2->FieldByName("英")->AsString);
                ADOTable1->Delete();
                break;
                }
           else
               {
               }
           }
       }
       Form1->Caption=Edit1->Text+"表检测结束....";
}

问题分析:执行后重新执行还会发现有相同的字段,这就说明过滤得不干净彻底,想破了头终于想出一个最合理的解释,在对数据进行删除时,也就是执行ADOTable1->Delete();时,程序并没有停止,还在运行,如果删除没有完成就又过滤出新的单词会把ADOTable2的数据指针指向新的相同的字段上,所以就漏掉了一些相同字段,而且在进行删除时改变指针还会引起数据错误,所以总结前因得出解决办法如下:

1.把所有相同字段的指针写入到数组.
2.在检测相同字段结束后执行循环删除,直到数组里的值为空时.
3.这让我有了新的发现,就是如果想实现多线程,数组似乎是最直接的方式,可以实现多线程删除
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值