一个表中的数据有重复,要把多余的数据删除,我定义了一个string数组,把每一个不同的数据都写到这个数组中,而相同的我就把它删除。
procedure Tinputform.Button4Click(Sender: TObject);
var
  a: array[0..10000] of string;
  i,j,k:integer;
begin
  //showmessage(hrdm.ADOTable1.FieldByName(姓名).AsString);
  begin
    for k:=0 to 10000 do
      begin
       a[k]:='0';
      end;
      for i := 0 to 10000 do
      begin
       for j := 0 to i do
        if a[i] = hrdm.ADOTable1.FieldByName('姓名').AsString
        then
          begin
            hrdm.ADOTable1.Active:=false;
            hrdm.ADOTable1.Delete;
            hrdm.ADOTable1.Active:=true;//这个地方运行的时候说我关了数据库以后不可以这样做。
          end
        else
         begin
           a[i]:=hrdm.ADOTable1.FieldByName('姓名').AsString;
           hrdm.ADOTable1.Next;
         end;
      end;
  end;  end;delphi6说我搞错了,运行的时候hrdm.ADOTable1.Active:=true;这行有错误。

解决方案 »

  1.   

    hrdm.ADOTable1.Active:=false;
    hrdm.ADOTable1.Delete;//错误发生在这一行,你关闭了active,怎么还能再执行删除呢?
      

  2.   

    而且你的办法未免太
    给个思路,试试用select distinct
      

  3.   

    to: lsk2000(疯子无汗) 如果我不关闭他,它又说在打开的时候不可以对它进行这个操作,我到底错在哪里?
      

  4.   

    用adoquery写一个sql不行么??
      

  5.   

    你这段程序似乎根本不能达到你的目的.
    你为什么不用adoquery,用sql语句?
      

  6.   

    adotable1.Edit;//增加这个。
    adotable1.Delete;
      

  7.   

    在程序中加一个adoquery控件,设好属性
    其中sql中加这样一句:select distinct tablename.fieldname from tablename这样选择得到的结果即可。
      

  8.   

    你的代码好乱 我觉得很冗余 至少我觉得我的更好点 procedure TForm1.Button1Click(Sender: TObject);
    var
      priStr,          //前一条记录字段值
      curStr: string;  //本记录字段值
    begin
      ADOtable1.Open;
      priStr := ADOtable1.FieldByName('姓名').AsString;
      ADOtable1.Next;
      while not ADOtable1.Eof do
      begin
        curStr := ADOtable1.FieldByName('姓名').AsString;  //取当前字段值
        if curStr = priStr then  //重复
          ADOtable1.Delete       //删除后自动滚到下条记录
        else
        begin
          priStr := curStr;      //不重复,改变参考字符串
          ADOtable1.Next;        //滚到下条记录
        end;
      end;
      ADOtable1.Close;
    end;
      

  9.   

    hrdm.ADOTable1.Active:=false;
    hrdm.ADOTable1.Delete;
    hrdm.ADOTable1.Active:=true;//这个地方运行的时候说我关了数据库以后不可以
    ----------------------------------------------------------------废话,你把数据表关闭了还能进行删除操作吗?你为什么在进行删除操作钱要把表关闭啊?我再看看。
      

  10.   

    to:lincanwen(密码错误) 还是不行。
    键列信息不足或不正确,更新影响到过多的行?
      

  11.   

    risingsoft(一苇渡江):
      你的好象只是在一起的记录才可以,如果相同的记录在不同的地方就不行了
      

  12.   

    to: lsk2000(疯子无汗) 
      你的方法很好,我试了一下,只是我该怎么把我执行这个操作好的得到的数据保存下来,也就是把那些东西删除了,实现我开始想达到的效果?
      

  13.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      aNameList : TStringList;
      sName : String;
    begin
      aNameList := TStringList.Create;
      try
        with hrdm.adoTable1 do
        begin
          first;
          repeat
            sName := FieldByName('姓名').asString;
            if aNameList.IndexOf(sName) = -1 then
            begin
              aNameList.Add(sName);
              Next;
            end else
              Delete;
          Until eof ;
        end;
      finally
        aNameList.Free;
      end; 
    end;刚才不好意思说话没有太注意,对不起了。这段代码看能不能解决你的问题,我是顺着你的思路写的。但是这段代码没有经过测试。如果一定要用程序来解决这个问题的话,这个思路应该是对的。其实我想用SQL语句也能解决这个问题。但是我没有试过。希望有高手解决
      

  14.   

    to  bluesun(阿伟):
    可以将adoquery中的记录读入到你想保存的数组中,
    以你定义的数组a: array[0..10000] of string;来说
    定义一个变量i
    while not adoquery1.eof do
    begin
      a[i]:=adoquery1.filedbyname('字段名').asstring;
      adoqueyr1.next;
      inc(i);
    end;
      

  15.   

    我决定还是用ADOQUERY算了,
    insert newtable select distinct tablename.fieldname from tablename这句SQL有错误吗?
      

  16.   

    我决定还是用ADOQUERY算了,
    insert newtable select distinct tablename.fieldname from tablename这句SQL有错误吗?
      

  17.   

    用select into 语句不是用insert into.....
    SELECT INTO 语句创建一个新表,并用 SELECT 的结果集填充该表。新表的结构由选择列表中表达式的特性定义,例如:SELECT Shippers.*, Link.Address, Link.City,
                       Link.Region, Link.PostalCode
    INTO NewShippers
    FROM Shippers
         JOIN LinkServer.DB.dbo.Shippers AS Link
           ON (Shippers.ShipperID = Link.ShipperID)
      

  18.   

    而且你的办法未免太
    给个思路,试试用select distinct干嘛那么烦