b_b:=OpenDialog1.FileName;
     data_m.ADOQuery_persrec.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;DataSource='+DataFile+';Persist Security Info=False;';
      data_m.ADOQuery_persrec.SQL.Clear;
        begin
             //
              sqltxt:='';
              sqltxt:='delete * from xxsqxmk ';
              sqltxt:=sqltxt+'where sfzh1 in (select sfzh1 from b in '''+b_b+''')';
              data_m.ADOQuery_persrec.SQL.Add(sqltxt);
               data_m.ADOQuery_persrec.ExecSQL;
                //以上代码有问题,我想通过以上代码删除重复记录,事实上导致错误!
               //以下代码正确,但不能删除重复记录
               sqltxt:='';
             sqltxt:= 'insert into xxsqxmk ';
            sqltxt:=sqltxt+'select * from b in '''+b_b+'''';
              data_m.ADOQuery_persrec.SQL.Add(sqltxt);
            data_m.ADOQuery_persrec.ExecSQL;
       end;
请各位哥哥姐姐帮忙解决!

解决方案 »

  1.   

    select distinct * into #table 
    from  yourtable 
    delete yourtable
    insert into yourtabe select * from #table
      

  2.   

    1,用adoquery1选择不重复的记录保存到临时表
    2,用adoquery2删除记录
    3,把临时表导入
      

  3.   

    worktest(超级测试员):我最狠那些叫小妹的人妖,
    可是我确实是girl呀
      

  4.   

    b_b:=OpenDialog1.FileName;
         data_m.ADOQuery_persrec.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;DataSource='+DataFile+';Persist Security Info=False;';
          data_m.ADOQuery_persrec.SQL.Clear;
            begin
                 //
                  sqltxt:='';
                  sqltxt:='delete * from xxsqxmk ';
                  sqltxt:=sqltxt+'where sfzh1 in (select sfzh1 from b in '''+b_b+''''+')';//此处修改了
                  data_m.ADOQuery_persrec.SQL.Add(sqltxt);
                   data_m.ADOQuery_persrec.ExecSQL;
                    //以上代码有问题,我想通过以上代码删除重复记录,事实上导致错误!
                   //以下代码正确,但不能删除重复记录
                   sqltxt:='';
                 sqltxt:= 'insert into xxsqxmk ';
                sqltxt:=sqltxt+'select * from b in '''+b_b+'''';
                  data_m.ADOQuery_persrec.SQL.Add(sqltxt);
                data_m.ADOQuery_persrec.ExecSQL;
           end;
    请各位哥哥姐姐帮忙解决!
      

  5.   

    写错了,“小妹”
    sqltxt:='delete * from xxsqxmk ';改为
    sqltxt:='delete from xxsqxmk ';
      

  6.   

    csdn的人气越来越不景气了,一个帖子发了几天也没有解决!哎,
      

  7.   

    cdsgajxlp(起名很难):改为
    sqltxt:='delete from xxsqxmk ';//还是提示失败呀
      

  8.   

    其实real_name(*真名)和laiqinghe(来)已经讲得很清楚了。////////////////////
    begin
      b_b:=OpenDialog1.FileName;
      data_m.ADOQuery_persrec.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;DataSource='+DataFile+';Persist Security Info=False;';  data_m.ADOQuery_persrec.SQL.Clear;
      data_m.ADOQuery_persrec.sql.Add('select distinct * into #xxsqxmk'+ 
        'from  xxsqxmk '+
        'delete xxsqxmk'+
        'insert into xxsqxmk select * from #xxsqxmk');  data_m.ADOQuery_persrec.ExecSQL;
    end;试试看    
      

  9.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      adoquery1.Close;
      adoquery1.SQL.Clear;
      adoquery1.SQL.Add('select * from b where sfzh1 in (select sfzh1 from b group by sfzh1 having count(*)>1)');
      adoquery1.Open;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      adoquery1.Close;
      adoquery1.SQL.Clear;
      adoquery1.SQL.Add('select * from b ');
      adoquery1.Open;
    end;procedure TForm1.Button3Click(Sender: TObject);
    begin
      adoquery1.Close;
      adoquery1.SQL.Clear;
      adoquery1.SQL.Add('delete from b where sfzh1 in (select sfzh1 from b group by sfzh1 having count(*)>1)');
      adoquery1.ExecSQL;
      adoquery1.Close;
      adoquery1.SQL.Clear;
      adoquery1.SQL.Add('select * from b ');
      adoquery1.Open;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      ADOConnection1.Connected:=true;
    end;procedure TForm1.Button4Click(Sender: TObject);
    begin
      adoquery1.Close;
      adoquery1.SQL.Clear;
      adoquery1.SQL.Add('alter table b add idMytest int identity(1,1)');
      adoquery1.ExecSQL;  adoquery1.Close;
      adoquery1.SQL.Clear;
      adoquery1.SQL.Add('delete from b where sfzh1 in (select sfzh1 from b where b.idMytest<idMytest '+
                        'group by sfzh1 having count(*)>1)');
      adoquery1.ExecSQL;  adoquery1.Close;
      adoquery1.SQL.Clear;
      adoquery1.SQL.Add('alter table b drop column idMytest');
      adoquery1.ExecSQL;end;
      

  10.   

    如果要完整的程序,请给出电子e-mail
      

  11.   

    csdn的人气越来越不景气了,一个帖子发了几天也没有解决!哎,//哎呀  眼泪滑滑的   用付彪的话说:‘我手头又没有现金’………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………
    你到底让我怎么招啊????????”
      

  12.   

    csdn没人了么?ooooooooooooooooooooooooooooo
      

  13.   

    怎么可能呢,
      这不是很多人吗,
    不过,高手现在都很忙,没时间来CSDN啊!
    各位见量
      

  14.   

    你的SQL看来有问题:
    delete * from xxsqxmk where sfzh1 in (select sfzh1 from b in '''+b_b+''')';
    其中b_b变量无论是什么内容,但拼起来都不符合SQL语法,
    如果你把你把问题本身描述清楚一点(表中的字段,要达到的具体目的),
    我想即或不是星级,一样搞定,嘿嘿!!
    不信 mailto: [email protected]
      

  15.   

    你分几步做啊,傻瓜:
    先把没有重复的记录插入一个临时表:
    sqlTxt:='Insert TempTable select distinct * from xxsqxmk'; 
    然后把原来的记录删除:
    sqlTxt:='Delete * from xxsqxmk';//如果是Sqlserver数据库则应用'Delete from xxsqxmk';
    再将临时表的记录插回来:
    sqlTxt:='Insert xxsqxmk select * from TempTable'这样就OK了!
      

  16.   

    可能mdb语法与sql server里有不一样?
    select sfzh1 from b in '''+b_b+'''  //--------???有这样的sql?
      

  17.   

    看看这个,我的回复:
    http://community.csdn.net/Expert/topic/3826/3826686.xml?temp=.600979
      

  18.   

    对啊
    1,用adoquery1选择不重复的记录保存到临时表
    2,用adoquery2删除记录
    3,把临时表导入
      

  19.   

    dayusoft(大愚) :
    有主键:pers_id,---------------------------
    有主键的表怎么会写进了重复记录????
      

  20.   

    导入数据,判断重复数据,重复的数据就更新原来的数据,sql语句怎么写呀?
      

  21.   

    导入数据,判断与主键重复数据,重复的数据就更新原来的数据,sql语句怎么写呀?
      

  22.   

    这个问题还没有搞定啊,看来"高深"的办法不好理解,来一个最笨的办法:
    对于每一个b表中的值,在xxsqxmk中查找有没有重复,如有重复则更新,否则插入
    先用一个ADOQuery1打开b表
    假设xtxxk和b表中有两个字段
    sfzhl 主键 字符型
    sl 数字型b_b:=OpenDialog1.FileName;ADOQuery1.Close;data_m.ADOQuery_persrec.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;DataSource='+DataFile+';Persist Security Info=False;';//Query1要连接的数据库b_b
    data_m.ADOQuery1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;DataSource='+b_b+';Persist Security Info=False;';ADOQuery1.Clear;
    ADOQuery1.SQL.Add('select * from b');
    ADOQuery1.Open;//对于b表中的每一条记录
    while not ADOQuery1.Eof do
    begin
      data_m.ADOQuery_persrec.SQL.Clear;
      
      data_m.ADOQuery_persrec.SQL.Add('select count(*) from xtxxk where sfzhl='''+ADOQuery1.FieldByName('sfzhl').AsString+'''');//sfzhl假定为字符型
      data_m.ADOQuery_persrec.Open;  //xtxxk中是否存在此记录
      if data_m.ADOQuery_persrec.Fields[0].AsInteger=0 then //不存在插入
      begin
         data_m.ADOQuery_persrec.Close;
         data_m.ADOQuery_persrec.Clear;
         data_m.ADOQuery_persrec.SQL.Add('Insert into xtxxk(sfzhl,sl) values('''+ADOQuery1.FieldByName('sfzhl').AsString+''','+ADOQuery1.FieldByName('sl').AsString+')');
         data_m.ADOQuery_persrec.ExecSQL;
      end
      else//存在,更新
      begin
         data_m.ADOQuery_persrec.Close;
         data_m.ADOQuery_persrec.Clear;
         data_m.ADOQuery_persrec.SQL.Add('update xtxxk set sl=ADOQuery1.FieldByName('sl').AsString+' where sfzhl='''+ADOQuery1.FieldByName('sfzhl').AsString+''' );
         data_m.ADOQuery_persrec.ExecSQL;
      end;
      Next;
    end;
      

  23.   

    但我xxsqxmk中的字段有  (bh,djh,id,sqxmdm,xmmc,xmlb,xmlbdm,sqje,yjqsjy,yjzsjy,ztc1,ztc2,ztc3,cddw1,lxdh,cddw2,cddw3,zrs,gj,zj,cj,bsh,bs,ss,cjdw,xm1,xb,csny,sfzh1,zyjszw1,zyjszwdm1,jb,jbdm,xw,xwdm,czdw1,xmzfg1,xm2,sfzh2,zyjszw2,czdw2,xmzfg2,xm3,sfzh3,zyjszw3,czdw3,xmzfg3,xm4,sfzh4,zyjszw4,czdw4,xmzfg4,xm5,sfzh5,zyjszw5,czdw5,xmzfg5,xm6,sfzh6,zyjszw6,czdw6,xmzfg6,xm7,sfzh7,zyjszw7,czdw7,xmzfg7,xm8,sfzh8,zyjszw8,czdw8,xmzfg8,xm9,sfzh9,zyjszw9,czdw9,xmzfg9,xma,sfzha,zyjszwa,czdwa,xmzfga,xk,xkdm,xl,xldm,mz,cz,email,szxy,fzh,lxf,pjjf,scbk,zj1,zj2,zj3,zj4,zj5,pjf,sqlb,yjlb,sqlbdm,yjlbdm,yjqsjm,yjzsjm,xmjj,yjxk,yjzc1,yjzc2,yjzc3,yjzc4,yjzc5,yjzc6,yjzc7,yjzc8,yjzc9,yjzca,yqcg,allow,lxdh2),我不可能用sl=ADOQuery1.FieldByName('sl').AsString+' where sfzhl='''+ADOQuery1.FieldByName('sfzhl').AsString+''' );
         data_m.ADOQuery_persrec.ExecSQL;来实现吧