标题:求助:ADO-ACCESS编程,Recordset,没来的及更新完毕就再次读取,读不到最新 ...
只看楼主
hahahan
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-4-10
 问题点数:0 回复次数:7 
求助:ADO-ACCESS编程,Recordset,没来的及更新完毕就再次读取,读不到最新数据.
代码:
---------------------
      .................
      ....................
    for i=1 to 10
        Call Hydro           '此过程更新rs6所在数据表    且在Hydro中编辑rs6时使用 悲观锁定
                 
        rs6.Open "select * from Simu_Section ", cn, adOpenKeyset, adLockReadOnly
            
           '读取rs6中数据到rs7
            rs7.Fields("ccc") = rs6.Fields("CTail") '  rs7.RecordCount = rs6.RecordCount
            rs7.MoveNext
            rs6.MoveNext
            
        rs6.Close: Set rs6 = Nothing
   next i
     ...........................
     ...............................
------------------------------

问题:(1)  rs6的数据随着for循环在变,但是读取到rs7中的数据却总是相同(rs6的第一个版本)。为什么????
      (2)  在  rs6.Open "select * from Simu_Section ", cn, adOpenKeyset, adLockReadOnly  设置断点。每次运行到此,就等待几秒再继续,这样程序就正常。为什么?  是不是在这几秒内,rs6数据更新完毕了,所以可以读取到最新数据?
     (3) 这种问题的解决方法?

[[it] 本帖最后由 hahahan 于 2008-8-26 21:57 编辑 [/it]]
搜索更多相关主题的帖子: Recordset 数据 
2008-08-26 21:44
不说也罢
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:39
帖 子:1481
专家分:4989
注 册:2007-10-7
得分:0 
程序代码不完整,不好判断

上面代码似乎是逐行读取rs6.Fields("CTail") 的值并赋予rs7.Fields("ccc"),如果是这样的话,代码应当这样写:RS6.OPEN语句则不需要写在FOR循环里.
Call Hydro这一句你注释是更新RS6,但不清楚你为什么要放进循环里,难道要更新十次?要不把代码都贴上来.
以下是给你的参考代码:
---------------------
      .................
      ....................
         rs6.Open "select * from Simu_Section ", cn, adOpenKeyset, adLockReadOnly
'这里应当加入RS6是否无记录或行数是否小于10的判断,否则下面的循环可能会出错
   for i=1 to 10 '此为限定十行记录,若全部读取可以这样写:for i=1 to rs6.recordcount
           '读取rs6中数据到rs7
            rs7.Fields("ccc") = rs6.Fields("CTail") '  rs7.RecordCount = rs6.RecordCount
            rs7.MoveNext
            rs6.MoveNext
            
   next i
        rs6.Close'在这个循环外再关闭RS6
        Set rs6 = Nothing
     ...........................
     ...............................
------------------------------

===================================================
讨厌C#的行尾的小尾巴;和一对大括号{ }
===================================================
2008-08-30 12:40
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
得分:0 
重新执行查询
2008-08-30 12:58
simpson
Rank: 3Rank: 3
等 级:论坛游民
威 望:7
帖 子:863
专家分:17
注 册:2006-11-16
得分:0 
DoEvents  

cn释放 重连 每次都这样

全国最大的 Java专业电子书免费分享[url]http:///in.asp?id=xrmao[/url]
2008-08-30 17:46
hahahan
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-4-10
得分:0 
回复 2# 不说也罢 的帖子: 多谢!     “ Call Hydro这一句你注释是更新RS6,但不清楚你为什么要放进循环里,难道要更新十次? ” 嗯,是要更新十次,而且每次更新rs6数据全部彻底变化(表结构不变)。


回复 3# 的帖子: 多谢!在循环中将rs6开了又关,是不是就相当于  重新执行查询 啊?


回复 3# 的帖子:  多谢! 不太明白什么意思。  



我在网上搜索了一下——这个问题确实存在的。(不知道是系统还是程序的问题)。

http://topic.

以上是链接,并且含有解决办法。但我总觉得还应该有更好的方法。

没事儿你就多到这儿转转
2008-09-05 20:33
不说也罢
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:39
帖 子:1481
专家分:4989
注 册:2007-10-7
得分:0 
可以把工程传上来一起看看,
我觉得你程序逻辑上有问题,既然Call Hydro表示rs6要更新十次,那么你的rs7.MoveNext下面语句rs6.MoveNext就失去意义了呀.

===================================================
讨厌C#的行尾的小尾巴;和一对大括号{ }
===================================================
2008-09-05 20:53
不说也罢
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:39
帖 子:1481
专家分:4989
注 册:2007-10-7
得分:0 
如果必须等待几秒再继续,我送你一个延时函数吧,在需要延时的时候调用它
 Public   Sub   Delay(mSec   As   Long)   'mSec表示你需要延长几秒
  On   Error   Resume   Next   
          Dim   TStart   As   Single   
          TStart   =   Timer   
          While   (Timer - TStart) < (mSec/1000)   
                  DoEvents   
          Wend   
   End   Sub   
在调用时,使用 Call Delay(1000),这里1000就是一秒,象计时控件Interval属性的值

===================================================
讨厌C#的行尾的小尾巴;和一对大括号{ }
===================================================
2008-09-05 21:07
hahahan
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-4-10
得分:0 
回复 7# 不说也罢 的帖子
十分感谢!!!  虽然不能根治,但确实解决了燃眉之急,雪中送炭啊。多谢!!!!

没事儿你就多到这儿转转
2008-09-17 17:06



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-230027-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030259 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved