中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 未整理篇
一个表里过滤另一个表里的字段(c++)
作者:bmsdr 时间:2003-02-23 11:11 出处:互联网 责编:chinaitpower
              摘要:一个表里过滤另一个表里的字段(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.这让我有了新的发现,就是如果想实现多线程,数组似乎是最直接的方式,可以实现多线程删除

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有