我想删掉table中所有A1字段的数值不在ArrayString这个数组中的所有记录,程序执行很长时间,
请大家看看,里面是否有不合适的地方?思路把整个数据库每条的A1拣出来,比对数组里是否有和他一样的内容,没有的话,就把那条记录delete掉
         Table1.IndexFieldNames:='A1';
         Table1.setkey;
         Table1.first;
         while not Table1.eof do
          begin
            testString:=Table1.FieldByName('A1').AsString;
            Write(f,testString);
                for i := 1 to 14426 do
                begin
                if (ArrayString[i]=testString) then
                break
                else
                         if (i=14426 )   then
                        begin
                        Table1.Delete;
                        end;
                end;
         Table1.next;
        end;

解决方案 »

  1.   

    DELETE FROM TABLEa WHERE FIELD NOT IN ('A','B',...)
      

  2.   

    问一下:
    楼主是希望只清理数据库中定义了A1字段的表的内容吗?
    其他没定义A1字段的表要不要动?
    数组ArrayString有14426个那么多?
      

  3.   

    循环嵌套,当然影响效率,有个简单的判断方法,一般人我不告诉他假设
    ArrayString[0]='a'
    ArrayString[1]='b'
    ArrayString[2]='c'
    ...你想判断testString是否在数组ArrayString里,可以把ArrayString的内容组合到一个字符串s里,
    for i:=0 to 14426 do
    s:=s+' '+ArrayString[i]//空格也可以用其他间隔符代替
    这样s='a b c ..'
    然后一个pos函数就搞定
    很简单,但大多数人不会想到,呵呵
      

  4.   

    把ArrayString 的内容加入数据库表tmep2
    DELETE FROM Table1 WHERE FIELD NOT IN (select AAA from table2)