我用两个adoquery,一个是ADOQ_xs联'学生表'另一个是ADOQ_xs_cx 联'学生表的视图'在窗体里有一个查询,下面代码是个过滤,过滤后的记录在xjlr页上显示,但为什么修改总有问题呀!为什么这么说呢!是因为有时能修改,有时不能修改,有时多点几下鼠标就能修改了,不知到为什么呀!!
这是一个查询的button
procedure TF_main.suitempBitBtn6Click(Sender: TObject);
begin
  datamodule1.ADOQ_xs.Close ;
  datamodule1.ADOQ_xs.SQL.Clear ;
  datamodule1.ADOQ_xs.SQL.Add('select * from 学生表 ');
  datamodule1.ADOQ_xs.Open ;
  if datamodule1.ADOQ_xs_cx .Eof then  exit;
  datamodule1.ADOQ_xs .Filtered:=false;
  datamodule1.ADOQ_xs .Filter:='[学号] = '+QuotedStr(datamodule1.ADOQ_xs_cx .FieldByName('学号').AsString);
  datamodule1.adoq_xs .Filtered:=true;
  datamodule1.ADOQ_xs .open;
  PageControl1.ActivePage := xjlr;
 end;
请点一下,谢谢了!!!

解决方案 »

  1.   

    你是要修改一条记录,还是所有记录呀,你用的是datamodule1.ADOQ_xs进行查询,然后又判断if datamodule1.ADOQ_xs_cx .Eof then  exit;我有一点不太明白。
    如果你用SQL语句进行修改,应该会好的。
      

  2.   

    你使用 Filter有点乱!  datamodule1.ADOQ_xs.Close ;
      datamodule1.ADOQ_xs.SQL.Clear ;
      datamodule1.ADOQ_xs.SQL.Add('select * from 学生表 ');
      datamodule1.ADOQ_xs.Open ;  //问题就出在这,你原来的过滤器没有取消
      datamodule1.ADOQ_xs .Filtered:=false;  if datamodule1.ADOQ_xs_cx .Eof then  exit;
      datamodule1.ADOQ_xs .Filter:='[学号] = '+QuotedStr(datamodule1.ADOQ_xs_cx .FieldByName('学号').AsString);
      datamodule1.adoq_xs .Filtered:=true;
      datamodule1.ADOQ_xs .open;
      PageControl1.ActivePage := xjlr;
     end;即使这样修改,代码的执行效率不高,还感觉乱!