我们在使用Delphi提供的缓冲更新数据库时遇到一些问题,大家来讨论讨论!
一、方案如下:
1、采用TQuery控件查询数据,其cachedupdate属性设为true;
2、采用TupdateSQL更新数据。TQuery的UpdateObject指向该控件。
3、采用DBGrid显示查询结果,及修改数据.其数据源TDatasource指向TQuery.
二、测试环境:delphi5+win2000
三、现象
我们发现TQuery的Recordcount属性并不能正确的反映缓冲区的实际记录数。
出现这种情况的一个例子是:
当数据空时,连续添加两条记录,然后删除一条数据。你就会发现RecordCount变为0了。
四、问题:
   请问你们遇到该问题是怎么解决的?(我在Delphi5下测试). 

解决方案 »

  1.   

    出现这个问题,并不是DELPHI的BUG,因为其RecordCount本身就是对其“真实”数据条数的反映。而当你的Query插入与删除记录后,其仅仅是在缓存内(Post也只是更新缓存),所以这时你的RecordCount是不准确的,只有在你的Query经过ApplyUpdate后,其RecordCoun才有效。在我的应用程序工程中,我们都采用的一个循环(数据量不大),或者采用一个虚拟字段,来“编程”获取RecordCount。同理,此时的IsEmpty 也是不可靠的!有个建议:
    这种模式受限太大,而且对数据的安全性问题也不严格,是否可考虑用Query + dsp + cds ,这样,cds的一切属性正常!cds同样可以看做是一种缓存!运用起来更简单快捷!
      

  2.   

    我使用了Applyupdate和Commitupdate都还是不行.
    特别是空数据库表时连续添加两条记录,删除一条后RecordCount就变为0了。
    如果是采用SQL在后台获取数据记录数,倒也可以,但也不知会不会有问题。
    谢谢你的建议,不过现在要改过来比较困难,因为工程量太大。
      

  3.   

    这两天刚刚做了个三层的多表查询的更新,只能在应用服务器使用TupdateSQL,感觉还是很好用的.在应用程序端不能用TUPdateSQL,只好连接服务器端的.
      

  4.   

    在DELPHI6+WIN2KP+ORACLE9i中可以吗?
    UPDATESQL中的ModifySQL怎么写?