使用了一个query和一个source用来连接数据库,代码如下:with query1 do
begin
  close;
  sql.clear;
  sql.add('select * from t1 where a1=:b1');
  parambyname('b1').asstring:=trim(edit1.text);
  open;
end;
if query1.recordcount<>0 then
begin  
with query1 do
  begin
    close;
    sql.clear;
    sql.add('update t2 set a1=:b1');
    parambyname('b1').asstring:=trim(edit2.text);
    execsql;
  end;
if query1.recordcount<>0 then
  showmessage('更新成功')
else
  showmessage('更新失败');
end
else
  showmessage('找不到相应的记录');运行之后,系统提示"不能运行在一个关闭的dataset上".
问题是找出来了(只要去掉其中一个query1.recordcount的判断程序就正常了.我也试过:使用2个query和2个source分别对表t1和t2进行连接,其中一个判断也改为query2.recordcount,但是还是出现相同的错误.
但是不知道是什么原因引起的?有什么解决办法没有???

解决方案 »

  1.   

    with query1 do
    begin
      close;
      sql.clear;
      sql.add('select * from t1 where a1=:b1');
      parambyname('b1').asstring:=trim(edit1.text);
      open;
    end;
    if query1.recordcount<>0 then
    begin  
    with query1 do
      begin
        close;
        sql.clear;
        sql.add('update t2 set a1=:b1');
        parambyname('b1').asstring:=trim(edit2.text);
        execsql;
      end;
    if query1.recordcount<>0 then
      showmessage('更新成功')
    else
      showmessage('更新失败');
    end
    else
      showmessage('找不到相应的记录');
    这样就不会报错了
    ————————————————————————————
    //再次对query1赋值,因为之前赋的值,已经被清空了
    with query1 do
    begin
      close;
      sql.clear;
      sql.add('select * from t1 where a1=:b1');
      parambyname('b1').asstring:=trim(edit1.text);
      open;
    end;
    //
    ——————————————————————————
      

  2.   

    不好意思,刚才粘贴程序代码时,搞错顺序了
    with query1 do
    begin
      close;
      sql.clear;
      sql.add('select * from t1 where a1=:b1');
      parambyname('b1').asstring:=trim(edit1.text);
      open;
    end;
    if query1.recordcount<>0 then
    begin  
    with query1 do
      begin
        close;
        sql.clear;
        sql.add('update t2 set a1=:b1');
        parambyname('b1').asstring:=trim(edit2.text);
        execsql;
      end;
    ————————————————————————————
    //再次对query1赋值,因为之前赋的值,已经被清空了
    with query1 do
    begin
      close;
      sql.clear;
      sql.add('select * from t1 where a1=:b1');
      parambyname('b1').asstring:=trim(edit1.text);
      open;
    end;
    //
    ——————————————————————————————
    if query1.recordcount<>0 then
      showmessage('更新成功')
    else
      showmessage('更新失败');
    end
    else
      showmessage('找不到相应的记录');这样就不会报错了