我用了两个adoquery,adoquery1用来将数据库中符合条件的记录删除,并插入新的记录(使用需要,只能先把原来的记录删掉,再把新的记录插入),到此还都能够实现,但是插入完后,我立即用adoquery2来查询符合条件的记录数,比如我原来符合条件的记录数是5条,我全删掉后,又立即插入6条符合条件的记录,可用adoquery2来查询记录数时,adoquery2.count确还是5,只有过几秒种后再查时才能为6,这是为什么?我必须用两个adoquery,因为adoquery2我作为teechart中一个series的datasource,并且series的x,y轴的datasouce我都赋予了查询中的字段,结果我每次按执行按钮至少两次,才能在series中正确显示插入后的记录图!sos!

解决方案 »

  1.   

    不知道adoquery1.Excute的返回值能不能满足你的要求,就是插入或者删除的记录数
      

  2.   

    怎样能够insert记录后,数据库能够立即更新,这样接下来的查询工作就应该没问题了吧?
      

  3.   

    我执行的删除并插入记录后,用另外的adoquery查询时,不能够得到插入的正确数!实际上我主要是要series能够正确显示!
      

  4.   

    我是把listview中输入的多行数据保存到数据库,但是因为数据需要可以随时调出来并在listview中查看修改(可增减或修改数据),所有我为了省事,不想判断到底是增减了记录还是更改了记录,只要修改完毕,按确定键,我就把原来的记录都删掉,直接把listview中的数据全部插入到数据库中!
      

  5.   

    用事务看看吧。很是奇怪,数据库是什么ORACLE的话,不要忘记COMMIT。
      

  6.   

    在adoquery的查询中插入adoquery.Close;adoquery.SQL.Add('查询语句');adoquery.Open;操作应该就可以了!
      

  7.   

    用的是ado+access2000,插入用第是sql的insert语句
      

  8.   

    先close再open一下看看---------------------------------------              欢迎访问 http://www.coderpub.com 技术论坛
      

  9.   

    不行,用了两个adoquery,各有各的用途,但要先后操作同一个数据库,就出现这样的问题了!
      

  10.   

    使用同一个ADOConnection就可以了
      

  11.   

    将adoquery1插入完数据后,再执行adoquery1.close试试.
      

  12.   

    怎样能够立即更新数据库?插入完再close不行,
      

  13.   

    可以把你的sql代码贴一下给大家看看...
      

  14.   

    adoquery2.close;
    adoquery2.sql.add('select * from 你的表字');
    adoquery2.open;
    那样就ok
      

  15.   

    adoquery2.close;
    adoquery2.sql.clear;
    adoquery2.sql.add('select * from 你的表字');
    adoquery2.open;
    那样就ok
      

  16.   

    楼上,我就是这样做的,但是表中的数据不是我用adoquery1更新过的,因为我用adoquery1插入表后,马上就用adoquery2去读取表中的数据了,好像要过几秒种读取才能正确,立即读取还是插入前的数据。
      

  17.   

    用这个函数一定可以function OpenADOQuery(Conn: TADOConnection; DataSet: TADOQuery; szSql: string): Boolean;
    begin
      result := true;
      try
        if DOQuery.Active = true then
          DOQuery.Close;
        DOQuery.SQL.Text := szSql;
        DOQuery.Connection := Conn;
        DOQuery.Open;
      except
        result := false;
      end;
    end;
      

  18.   

    错了 
    这样 ——〉
    function OpenADOQuery(Conn: TADOConnection; DOQuery: TADOQuery; szSql: string): Boolean;
    begin
      result := true;
      try
        if DOQuery.Active = true then
          DOQuery.Close;
        DOQuery.SQL.Text := szSql;
        DOQuery.Connection := Conn;
        DOQuery.Open;
      except
        result := false;
      end;
    end;
      

  19.   

    执行过 insert 后,把Query close掉 ,写查询语句,再open
    这样应该可以了.
      

  20.   

    呵呵
    楼主的语句没有错误
    数据库更新是需要时间的你可以先这样试试
    我是指插入完后
    ADOQuery.Open;
    ADOQuery.Close;
      

  21.   

    adoquery2里的值你不刷新,就是等一会儿也不会变六的,
    adoquery2的值是从表里面选出的那部分放在内存里的!当然不会改变
    要改变就要刷新
      

  22.   

    Adoquery1.connection.excute(insert 你的数据);
    if Adoquery2.active then Adoquery2.close;
    Adoquery2.disablecontrols;
    Adoquery2.clear;
    Adoquery2.sql.text:='select 你的数据';
    Adoquery2.open;
    Adoquery2.EnableControls;
      

  23.   

    问题解决了,但我还是不知道怎么回事,很可笑,大家的方法我都用了,不行,我实在没办法了,只好把数据库连接语句不用了,而在窗体上加了个adoconnection控件,让adoquery的connection都指向它,就好了,但是我的数据库连接语句我原来一直用的,很好用,为什么这次不行了呢?我实在看不出来这两种方法有什么不同,我的语句如下,请大伙帮忙分析一下:
    ConnectString = 'Provider=Microsoft.Jet.OLEDB.4.0;'+
    'Data Source= %s\Data\zz.mdb;Persist Security Info=false';
    AdoQUery.ConnectionString := Format(ConnectString, [ExtractFilePath(Application.ExeName)]);  if not FileExists(ExtractFilePath(Application.ExeName) + '\Data\zz.mdb') then
      Begin
        ShowErrMsg(ErrorConnectDataBase);
        Application.Terminate;
      end
      else begin
        Try
          AdoQUery.Connection;
        except
          ShowErrMsg(ErrorConnectDataBase);
          Application.Terminate;
        end;
      end;
    end;
    我在窗口创建时,已经把每个adoquery都用上面的语句与数据库建立连接了!而我把ADOConnection的ConnectionString属性也是用上面的ConnectString来赋的值啊,
    ADOConnection1.ConnectionString:=Format(ConnectString, [ExtractFilePath(Application.ExeName)]);
      

  24.   

    8错,zhouyouben(爱因斯坦)兄的函数肯定应该可以,可是我还是搞不懂我原来的方法有什么问题?如果实在没人知道,那就只好这样了。