本帖最后由 pengchao025 于 2012-12-26 09:50:47 编辑

解决方案 »

  1.   

    执行这句前
    if ADOQuery1.Locate('id',Edit7.Text,[loCaseInsensitive]) then 
    先看一下1 确认ADOQuery1的查询结果中有没有你要删除的ID
    2 有没有使用过滤器(filtered相关), 如果使用了,并过滤了Edit7.Text的ID, 就查不到了
      

  2.   

    filtered为false.
    就是想用locate这条当做查询语句用,事先是不知道数据库里有没有这条ID的,如果直接先查询,就没有locate的事了。现在问题是有些ID locate不到,我再用select却能查询到,此时再locate就定位到了,就能执行删除了。
      

  3.   


    Locate是在你当前query的结果集中定位, 如果当前query的结果集中没有该ID, 肯定查不到.如果你的query结果集和数据表内容不是完全对应的, 那你最好这么做:
    ADOQuery1.SQL.Clear;
          ADOQuery1.SQL.Text:='delete from mjkc where id='''+Edit7.Text+'''';
          ADOQuery1.ExecSQL;
          ADOQuery1.Close;
          ADOQuery1.SQL.Text:='select *from mjkc';
          ADOQuery1.Open;
      

  4.   

    to simonhehe:
    你的意思是,如果我之前用adoquery select了25,26号的数据,此时我在locate一条24号的数据,我就定位不到了?而locate一条25/26的数据就可以了?
    你贴的代码是叫我直接删除,而不判断ID是否存在了?
      

  5.   

    好像就是这个原因了,那些出问题的ID都不在AOEQUERY的数据集里,所以LOCATE不到,我就不用LOCATE了,直接SELECT查询了,谢谢simonhehe,呵呵。