事情是这样的。我的A表单。。弹出B表单。。B表单里是列表,当点击按钮后,会进行的操作如下:
1。update bbs set stat=1 
2。重新读取bbs表,并填充自己的listview
3。SendMessage给A表单
这时候,A表单收到消息后,要做的操作:
4。读取bbs表里  stat=1的记录
5。显示出来。==================
这时候就出事了,在A的时候,死活也读不到第一条记录。而在读之前MsgBox一下,耽一二秒,就可以读得出。Debug了半天,发现貌似是B表单更新完了,可是A表单读的时候,仍然是老样子。(200%的确认B表单是更新完了的,因为B表单自己也要重新读取,并填充列表) 谁知道这是咋回事????????????///

解决方案 »

  1.   

    调试一下不就清楚了,估计是SendMessage放的位置不对
      

  2.   

    唉。Debug半天了。肯定是变了的。数据库是完全对的。测了N多次。。只要更新完后,有一二秒的延时,就肯定正常。
      

  3.   

    update后有没有 acceptChanged
      

  4.   

    //这里是更新数据库
     DBManage.ExecuteSQL("update bbs set stat=1 where id in("+ids+")", dbm.Connection);
    //这里是更新B表单的列表(准确无误)
     UpdateTaskList();
    //这里是 SendMessage..............
     callMainBeginWork();================================
    A的表单:
    if (mystr.lpData == "MainBeginWork")
      {
         //刷新数据库,得出等待=1的记录,准备循环打开。
          Func.mySleep(1);
         IDataReader dr = DBManage.GetDataReader("select * from bbs where stat=1 order by id asc", dbm.Connection);
         while (dr.Read())
         {--------------
    这里  Func.mySleep 是自定义的休眠时间休息一秒,就可以运行无误了。但是会卡一下。
    就这样简单的,就不行。while dr.read() 这里就是 false
      

  5.   

    不太可能  肯定是你你错误ACCESS不可能有这么低级的错误,这样ACCESS早完了
      

  6.   


    我是直接SQL操作的。不是dataset 
      

  7.   

    1. update bbs set stat=1  这个是一个极其危险的写法.除非你确定将所有资料的stat栏位更新为1
    该语句会 行锁 --> 页锁 --> 表锁,更新资料量过大,会有可能导致表锁.2.根据1的情况,你读取的时候是否有加 with(nolock) 如果加了,就可能会造成脏读,所以A看到的资料还是老的.
    因为你用Msgbox延迟了一下,可能锁被释放掉了.所以查询出来是更新的资料.(以上只是从给出语句判断)
      

  8.   

    看偏了, "操作access" , 呵呵,以上本人的帖子是针对SQL Server的.
      

  9.   

    应该是dbm的问题,你换一个form,这个dbm实例应该也换了一个吧,这样,你这边更新数据跟那边读取数据使用了不同的连接,有延时是正常的。
      

  10.   


    帅哥,搞定了。我本来为了省资源。一个FORM里是一个全局的 DBMANAGER的。我也一直怀疑是不是因为速度太快,读了缓存的数据所以我在接受消息的函数中,重新定义个dbm,解决了~!这下子不用sleep了。哈。。感谢,,一直怀疑是这个缓存的事却没有想到,重新定义个dbm来用。太感谢了。
    ==========
    也感谢其他热心的朋友们。结分。
      

  11.   

    你的Access文件时放在项目文件夹下面的。
    默认设置时每次编译的时候都会复制一份access到生成目录下。所以在项目管理器里面选中access文件,右键属性,选择:永远不复制。
    (发布程序的时候,根据需要,手动复制到生成目录)
      

  12.   

    应该是线程同步的问题吧,你在SendMessage给A表单的时候有没有关闭数据库连接?两个线程是共享的一个数据库连接吗?