ADOQuery1,ADOQuery2的一个问题,困惑我好长时间了(100分)

  • 主题发起人 主题发起人 yzlufei
  • 开始时间 开始时间
yzlufei说的很有道理
 
看不出问题来
你有关的代码都张贴上来
 
while qry1.RecordCount <> 0 do
begin
sq:='update ..... where ..........';
adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.SQL.Text := Sq;
adoquery2.ExecSQL;
Qry1.ReQuery; //更新之后从新查询,过滤更新后的数据,总是更新第一条。
end;
试试这样。
这是个笨方法,效率很低。

------------------
仍然有问题,是不是ADO本身的问题啊?有没有新的版本的下载啊。
 
我发现不是ADO的问题,是我自己的问题,因为我如果简化update的内容,就没有错误,但是我的在update之前作的工作难道会对update有影响么?

我是在update之前通过取得query1的一个字段的内容,然后连接网络根据这个字段的内容获得相应的数据放到update ××× set ×××=网络数据 where id=××(这个是直接根据query1获得的)
 
...
adoquery2.ExecSQL;
ADOQuery1.refresh; //因为这里刷新了
ADOQuery1.next;//循环。。。所有这里的 next 已经不是指向原来那条记录的下一条了
所以第二次 update 时就乱了。
 
adoquery2.ExecSQL;
ADOQuery1.refresh; //因为这里刷新了
ADOQuery1.next;//循环。。。所有这里的 next 已经不是指向原来那条记录的下一条了
所以第二次 update 时就乱了。

-----------------------不是这个原因。我把update的内容简单化后--也就是不用从网络上获取数据,直接update就没有错误了。
 
最奇怪的就是我查看了程序运行中所有的update语句,并没有改动我不想改的数据,但是那些数据是怎么被修改的呢?
 
大有可能是 update .... where 条件 ---中这些<条件>有被改变
条件可以使用局部变量先保存,再去网络取数来更新。
 
大有可能是 update .... where 条件 ---中这些<条件>有被改变
条件可以使用局部变量先保存,再去网络取数来更新。

--------我就是这么做的,而且我获取所有的sql语句,并没有改变这些记录的语句。
 
看来你的把
update .... where
的语句写全了让我们看看了,要不然,光凭着猜测……比较费事,也费时!
 
触发器,约束.这些你都查查
 
sq:='update ..... where ..........';
ADOQuery1.refresh;
adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.SQL.Text := Sq;
adoquery2.ExecSQL;
ADOQuery1.next;//循环
 
去掉ADOQuery1.refresh;
 
这个问题我早就遇到过,
就是把ADOQuery1.refresh;放在循环外面就OK啦
 
循环完成后在查询一次
 
仍然没有解决,好像是线程和ADO的问题。
 
后退
顶部