为什么要动态加索引,用batchmove最好用有自然索引的表。
因为 addindex本来就有很多限制,因表的种类、表的版本不同对索引的动态建立的支持有很多不同。你上面的代码: 如果是paradox表,ixDescending 在主索引中是不支持的。
另外你的batchmove2是什么意思??batchmove1吧。batchmove完后,我把索引删了。可能是画蛇添足了,可我觉得不加这句话更危险。你自己多测测吧。看看动态加减这句话的效果。凭我的经验,最好还是用自然索引(建表就建了索引,他俩同生的,哪怕是一起动态产生)。我的测试效果时好时坏,不知道是我的调试环境的问题,还是动态建索引batchmove本来就不稳定,我也不敢肯定。
 win2k+delphi5代码修改为:  Indexstr:='Code;SaleDate';
  //dstr:='Code;SaleDate';
  Table2.Close;
  Table2.Exclusive := True;
  Table2.Open;
  Table2.AddIndex('NewIndex',indexstr,[ixPrimary]);
  //Table2.IndexDefs.Update;
  //Table2.CreateTable;
  BatchMove1.source:= table1;
  BatchMove1.Destination:= table2;
  //BatchMove1.problemTableName:='ErrFile.txt';
  BatchMove1.Mode:=batAppendupdate;
  //BatchMove1.RecordCount:=0;
  BatchMove1.Execute;
  Table2.DeleteIndex('NewIndex');

解决方案 »

  1.   

    我的程序里的是Batchmove1.Excute,而不是Batchmove2.Excute,是在这里写错了。
    laza,我将你的程序运行了一遍,还是出错,出错信息为:
            
     Number is out of range
     Index does not exist
     Index: NewIndex不知道什么原因???
      

  2.   

    我这里调试的不是建立索引错误。我这里能够导出来。表里的数据都能够append。但是不稳定。程序老自动退出。你说的情况,和我的情况不一样,你的索引根本没建立,没有索引的数据集当然不能batchmove,你要看看你的addindex建立情况,这样才能继续。你还建立自然索引吧,通常建立主索引时必须的,这样表的检索速度会大大提高。别用你这种方式了。你再看看我上面说的。你就在建表的同时就建立索引。这样省了动态建索引的麻烦,也更稳定。
      

  3.   

       我在自己的程序中是建立的自然索引,但就是不明白在运行时建索引,使用batchmove时老是出错。
       我想总会有解决的办法,要不就是Delphi5的Bug.
      

  4.   

    在这样试试
     batchmove.AbortOnProblem := False;
     指定 Mappings string; 这样容错性搞一些;  with BatchMove1.Mappings do
      begin
        Clear;
        Add('servicelistid=servicelistID');//字段名1=字段名2中间没有空格。
        Add('ProvinceID=ProvinceID');
        Add('unit=unit');
      end;  
      

  5.   

       我提出这个问题,关键是如何在使用batchmove语句进行动态索引,希望弄清问题到底出在哪?希望各位帮忙想想。谢谢。